3D模型文件格式之《OBJ格式介绍》

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 有什么区别?​​

​​特性​​​​OBJ​​​​FBX​​​​格式类型​​纯文本二进制(或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​​ 格式。

Back to top: