什么是3D文件格式?

标准方式将3D模型存储在文件中,以便不同程序可以交换。每种格式决定了哪些内容能在旅程中存活下来:几何体、UV、材质、纹理、骨骼、动画或整个场景。常见的有:用于实时和网页的 glTF 和 GLB,用于游戏引擎和动画的 FBX,用于简单几何的 OBJ,以及用于 3D 打印的 STL。

3D文件可以包含什么

3D文件可以承载远超一个形状,格式主要区别在于它们保留了多少剩余内容:
  • 几何:顶点、面和法线。每种格式都会存储这些数据。
  • UV:将纹理映射到表面的二维布局。参见UV映射。
  • 材质和纹理:从单色到完整的PBR贴图集不等。
  • 场景数据:对象层级、枢轴、变换、摄像机和灯光。
  • 骨骼与动画:骨骼、皮肤权重、关键帧和变形目标。
当模型在导出时“丢失”某些东西,几乎总是因为目标格式没有地方存放。

GLF与GLB

glTF 是 Khronos 集团推出的开放标准,该联盟是 OpenGL 和 Vulkan 背后的联盟,旨在高效地向实时渲染器交付。它存储几何体、UV、金属粗糙度模型中的PBR材质、场景层级、骨骼、动画和变形目标。规范修正了导致大多数交叉工具问题的惯例:+Y 是向上,单位是米,坐标系是右手的。 它有两种包装,内容完全相同。.gltf 是一个 JSON 文本文件,通常放在一个包含几何体和独立纹理图像的.bin文件旁边,适合版本控制。.glb 是所有内容打包在一个二进制文件中,适合上传和分享。Godot的文档推荐使用glTF 2.0作为首选导入格式,Three.js、Babylon.js、虚幻引擎和Blender都能读取。

FBX

FBX是Autodesk专有的交换格式。它成为了在建模工具和游戏引擎之间移动绑定和动画角色的事实标准,Unity 也原生导入了它。其弱点在于专有:完整规范不公开,其他工具依赖FBX SDK或逆向工程读取器,且每个程序对材料的解读不同。导入后要重新连接纹理。细节比较是在glTF和FBX中。

OBJ

OBJ由Wavefront Technologies开发,是至今仍在日常使用的最古老的格式之一。它是纯文本,几乎每个3D程序都能读取,并且能可靠地存储几何体、UV和法线。材质会放在一个配套的.mtl文件里,搭配一个简单的PBR前材质模型。它没有骨架,没有动画,正如Godot文档所说,没有第二个UV通道和PBR材质。当你需要静态网格在任何地方打开时就用它。

STL和USD的

STL是3D打印格式。它将表面存储为没有颜色、UV或材质的原始三角形,这对切片软件来说就足够了。 皮克斯的 USD(Universal Scene Description,Universal Scene Description)专为在电影和视觉特效流程中从多个分层文件组装非常大的场景而设计。USDZ是包装版,是苹果AR Quick Look在iPhone和iPad上的格式。

GLB与OBJ

对于静态模型,两种格式都保持几何体和UV不变。区别在于它周围的一切:
  • 纹理。GLB 的纹理存储在一个文件中。OBJ需要它的.mtl文件和所有图像都沿着它移动,路径保持完整。
  • 材料。GLB存储完整的PBR材料。OBJ存储了基本的色彩和镜面模型,因此粗糙感和金属感会被削弱。
  • 尺寸和装填。GLB是二进制的,加载速度很快。OBJ是文本,所以文件更大,解析速度较慢。
  • 场景和动作。GLB可以容纳多个具有层级结构的对象,以及动画。OBJ只存储静态网格。
选择GLB来支持网页、增强现实和现代引擎。保留OBJ作为老软件和罕见的不读取其他工具。

你应该用哪种格式?


  • Web、Three.js、Godot、Android 上的增强现实:GLB。
  • Unity:FBX,它是原生导入的。glTF也通过Unity的glTFast包工作。
  • 虚幻引擎:FBX或GLT。两者都是直接进口的。
  • Blender 到另一个 DCC 工具:FBX用于绑定和动画,glTF用于静态资产和PBR材质。
  • 3D打印:STL,或者如果你的切片软件支持3MF。
  • 苹果增强现实快速预览:USDZ。