OBJ 3D模型文件格式详解
OBJ(Wavefront .obj)是一种纯文本的3D模型数据格式,由 Wavefront Technologies 开发,广泛用于3D建模、游戏开发、3D打印等领域。它存储模型的几何信息(顶点、面、UV坐标等),但不包含动画、材质或光照数据(需配合 .mtl 材质文件使用)。
1. OBJ 文件结构
OBJ 文件由一系列关键字(Keyword)开头的行组成,每行代表一种数据类型:
关键字作用示例#注释行# This is a commentv顶点坐标v 1.0 2.0 3.0vt纹理坐标(UV)vt 0.5 0.5vn法线向量vn 0.0 1.0 0.0f面(Face)f 1/1/1 2/2/2 3/3/3g组(Group)g Cubeusemtl使用材质usemtl Material1mtllib引用材质库mtllib model.mtl
2. 核心数据解析
(1) 顶点数据(v)
定义3D空间中的顶点坐标(X, Y, Z):
obj
v 1.0 0.0 0.0 # 顶点1 (X=1.0, Y=0.0, Z=0.0)
v 0.0 1.0 0.0 # 顶点2
v 0.0 0.0 1.0 # 顶点3
(2) 纹理坐标(vt)
定义UV映射(U, V):
obj
vt 0.0 0.0 # UV坐标1 (U=0.0, V=0.0)
vt 1.0 0.0 # UV坐标2
vt 0.5 1.0 # UV坐标3
(3) 法线向量(vn)
定义面的朝向(用于光照计算):
obj
vn 0.0 0.0 1.0 # 法线向量 (X=0.0, Y=0.0, Z=1.0)
(4) 面(f)
定义多边形面(三角形或四边形),引用v/vt/vn的索引:
格式:f 顶点索引/UV索引/法线索引示例(三角形面): obj
f 1/1/1 2/2/2 3/3/3 # 使用顶点1/UV1/法线1, 顶点2/UV2/法线2, 顶点3/UV3/法线3 省略UV或法线: obj
f 1 2 3 # 仅顶点
f 1//1 2//2 3//3 # 顶点和法线,无UV
3. OBJ 的优缺点
✅ 优点
纯文本格式,可手动编辑或程序解析。广泛支持,几乎所有3D软件(Blender、Maya、3ds Max)和游戏引擎(Unity、Unreal)都兼容。轻量化,适合存储静态模型。
❌ 缺点
不支持动画(需FBX/GLTF等格式)。材质依赖外部.mtl文件,单独传输可能丢失贴图。大模型文件体积较大(相比二进制格式如.glb)。
4. 常见问题
Q1: OBJ 和 FBX 有什么区别?
特性OBJFBX格式类型纯文本二进制(或ASCII)动画支持❌ 不支持✅ 支持骨骼/关键帧动画材质/贴图需外部.mtl文件可内嵌适用场景静态模型、3D打印游戏、动画、影视
Q2: 如何优化OBJ文件?
使用 MeshLab 或 Blender 减少面数。压缩为 .zip 或 .7z 减小体积。删除未使用的 vn(法线)或 vt(UV)数据。
5. 示例文件
完整OBJ文件示例(配合 .mtl 材质):
obj
# 模型: Cube
mtllib cube.mtl
# 顶点
v -1.0 -1.0 1.0
v 1.0 -1.0 1.0
v 1.0 1.0 1.0
v -1.0 1.0 1.0
# UV坐标
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
vt 0.0 1.0
# 法线
vn 0.0 0.0 1.0
# 材质
usemtl Red
# 面
f 1/1/1 2/2/1 3/3/1 4/4/1
配套MTL文件(cube.mtl):
mtl
newmtl Red
Ka 1.0 0.0 0.0 # 环境光(红)
Kd 1.0 0.0 0.0 # 漫反射(红)
Ks 0.5 0.5 0.5 # 高光
总结
OBJ 适合存储静态模型,兼容性极强,但需搭配 .mtl 管理材质。游戏/动画推荐 FBX 或 glTF,OBJ 更适用于3D打印、CAD等场景。使用 Blender 或 MeshLab 可方便地编辑/优化OBJ文件。
如果需要更高级的功能(如动画、PBR材质),建议选择 FBX、glTF 或 USDZ 格式。