常用3D格式说明和对比(OBJ、glTF、GLB、STEP、FBX)

本文整理了常见3D模型格式的详细说明和简单示例,以备需要的读者了解和自己需要时查阅。其中 OBJ 格式,是学习图形和OpenGL时,各代码示例中最常用、最简单的格式,但不支持动画;glTF、GLB适合网络传输,在网页中广泛应用,还支持PBR材质;STEP格式工程和制造领域的,支持复杂的几何和拓扑信息;FBX在游戏开发中应用最为广泛,支持复杂动画。

OBJ 格式

OBJ 文件

OBJ文件格式是一种用于表示三维几何形状的标准文件格式,最初由Wavefront Technologies开发。它广泛应用于计算机图形学和3D建模领域,支持多种3D软件和渲染引擎。以下是对OBJ文件格式的详细介绍:

  1. 文件扩展名:OBJ文件通常以.obj为文件扩展名。
  2. 数据表示:OBJ文件使用纯文本格式来表示数据,这使得文件内容可以被人类阅读和编辑。文件内容主要包括顶点、法线、纹理坐标和面等几何信息。
  3. 文件结构:OBJ文件的结构通常包括以下几个部分:
    1. 顶点(Vertices):使用v开头,后跟三个或四个浮点数,表示顶点的坐标。如v 1.0 2.0 3.0
    2. 纹理坐标(Texture Coordinates):使用vt开头,后跟两个或三个浮点数,表示纹理坐标。如vt 0.5 1.0
    3. 法线(Normals):使用vn开头,后跟三个浮点数,表示法线向量。如vn 0.0 0.0 1.0
    4. 面(Faces):使用f开头,后跟顶点索引、纹理坐标索引和法线索引,表示一个多边形面。如f 1/1/1 2/2/2 3/3/3
  4. 支持的几何类型:BJ文件格式支持以下几何类型
    • 点(Points)
    • 线(Lines)
    • 多边形(Polygons)
    • 三角形(Triangles)
  5. 材质文件(MTL):OBJ文件可以引用一个材质文件(MTL文件),用于定义材质属性,如颜色、纹理、反射率等。MTL文件使用纯文本格式,通常与OBJ文件一起使用。
  6. 应用领域:OBJ文件格式广泛应用于以下领域
    • 3D建模:用于创建和编辑三维模型。
    • 计算机图形学:用于渲染和显示三维图形。
    • 游戏开发:用于导入和导出游戏中的三维模型。
    • 虚拟现实(VR)和增强现实(AR):用于创建虚拟和增强现实环境中的三维对象。
  7. 优缺点
    • 优点:
      1. 简单易读,使用纯文本格式。
      2. 广泛支持,多种3D软件和渲染引擎都兼容。
      3. 易于编辑和调试。
    • 缺点:
      1. 不支持复杂的材质和动画信息。
      2. 文件可能较大,尤其是包含大量顶点和面时。
      3. 不支持层次结构和装配信息。
  8. 总结: OBJ文件格式是一种简单而强大的三维几何描述格式,广泛应用于3D建模和计算机图形学领域。它的易读性和广泛支持使其成为3D数据交换的常用格式之一。
  9. 示例:
Plaintext 复制代码
# List of vertices
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 1.0 0.0
v 0.0 1.0 0.0

# List of texture coordinates
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
vt 0.0 1.0

# List of normals
vn 0.0 0.0 1.0

# List of faces
f 1/1/1 2/2/1 3/3/1 4/4/1

MTL 文件

材质文件(MTL)是一种用于描述3D模型材质属性的文件格式,通常与OBJ文件一起使用。MTL文件使用纯文本格式,定义了模型表面的颜色、纹理、反射率等材质属性。以下是对MTL文件格式的详细介绍:

  1. 文件扩展名: MTL文件通常以.mtl为文件扩展名。
  2. 数据表示:MTL文件使用纯文本格式来表示数据,每个材质属性使用特定的关键字进行定义。文件内容主要包括材质名称、颜色、纹理映射、反射属性等。
  3. 文件结构: MTL文件的结构通常包括以下几个部分:
    1. 材质名称(Material Name):使用newmtl关键字定义一个新的材质名称。如newmtl MaterialName
    2. 环境光颜色(Ambient Color):使用Ka关键字定义环境光颜色,后跟三个浮点数,表示RGB值。如Ka 1.000 1.000 1.000
    3. 漫反射颜色(Diffuse Color):使用Kd关键字定义漫反射颜色,后跟三个浮点数,表示RGB值。如Kd 1.000 0.000 0.000
    4. 镜面反射颜色(Specular Color):使用Ks关键字定义镜面反射颜色,后跟三个浮点数,表示RGB值。如Ks 0.500 0.500 0.500
    5. 镜面高光指数(Specular Exponent):使用Ns关键字定义镜面高光指数,表示光泽度。如Ns 100.0
    6. 透明度(Transparency):使用d或Tr关键字定义透明度,值范围为0.0(完全透明)到1.0(完全不透明)。如Ns 100.0
    7. 光照模型(Illumination Model):使用illum关键字定义光照模型。如illum 2
    8. 纹理映射(Texture Mapping):使用map_Kd关键字定义漫反射纹理映射。如map_Kd texture.jpg
  4. 支持的材质属性:MTL文件格式支持多种材质属性,包括但不限于
    • 环境光颜色(Ka)
    • 漫反射颜色(Kd)
    • 镜面反射颜色(Ks)
    • 镜面高光指数(Ns)
    • 透明度(d或Tr)
    • 光照模型(illum)
    • 纹理映射(map_Kd, map_Ka, map_Ks, map_d, map_bump等)
  5. 应用领域:MTL文件格式广泛应用于以下领域
    • 3D建模:用于定义3D模型的材质属性。
    • 计算机图形学:用于渲染和显示三维图形。
    • 游戏开发:用于导入和导出游戏中的材质信息。
    • 虚拟现实(VR)和增强现实(AR):用于创建虚拟和增强现实环境中的材质效果。
  6. 优缺点
    • 优点:
      1. 简单易读,使用纯文本格式。
      2. 广泛支持,多种3D软件和渲染引擎都兼容。
      3. 易于编辑和调试。
    • 缺点:
      1. 不支持复杂的材质和光照效果。
      2. 文件可能较大,尤其是包含大量纹理映射时。
      3. 不支持动态材质属性和动画。
  7. 总结:MTL文件格式是一种简单而强大的材质描述格式,广泛应用于3D建模和计算机图形学领域。它的易读性和广泛支持使其成为3D数据交换的常用格式之一。通过与OBJ文件结合使用,MTL文件可以有效地描述3D模型的材质属性,提升模型的视觉效果。
  8. 示例
Plaintext 复制代码
# This is a simple MTL file example

# Define a new material named "RedMaterial"
newmtl RedMaterial
Ka 1.000 1.000 1.000
Kd 1.000 0.000 0.000
Ks 0.500 0.500 0.500
Ns 100.0
d 1.0
illum 2
map_Kd red_texture.jpg

# Define another material named "TransparentMaterial"
newmtl TransparentMaterial
Ka 1.000 1.000 1.000
Kd 0.000 1.000 0.000
Ks 0.500 0.500 0.500
Ns 100.0
d 0.5
illum 2
map_Kd green_texture.png

glTF格式

GLTF(GL Transmission Format)是一种用于3D场景和模型的文件格式。它被设计为提供高效的加载,以及在运行时提供渲染所需的最小的内存占用。以下是一些关于GLTF格式的关键点:

  • 开放标准:GLTF是由Khronos Group(也是OpenGL和WebGL的背后组织)开发和维护的开放标准。
  • JSON格式:GLTF文件是以JSON格式存储的,,它包含了3D模型的结构和属性信息,如节点、网格、材质等,这使得它们可以被人类读取和编辑,也可以被机器轻松解析。
  • 二进制数据和纹理:GLTF文件可以引用其他的外部文件,如顶点数据和纹理的二进制数据,这些数据可以被直接上传到GPU,无需进行任何预处理,这种分离的设计使得GLTF文件可以更有效地管理和加载大量的模型数据。
  • PBR材质:GLTF支持基于物理的渲染(PBR)材质,这使得它可以创建出逼真的3D模型(材质和光照效果)。
  • 动画:GLTF支持复杂的动画,包括骨骼动画和形状变形,可以用于创建动态的3D角色和场景。
  • 扩展性:GLTF支持通过扩展来增加新的功能,如光照、环境贴图等。
  • 广泛支持:GLTF格式被许多3D应用程序和游戏引擎支持,包括Three.js、Babylon.js、Unity、Unreal Engine等。

GLTF格式被许多3D应用程序和游戏引擎支持,包括Three.js、Babylon.js、Unity、Unreal Engine等。

一个 glft 模型是一个目录,包含多个文件:

  • .gltf文件:场景描述文件,josn格式,1 个
  • .bin文件:几何数据,二进制文件,0-n个
  • .png/.jpg文件:二进制的图片格式,,0~n个

GLTF2.0格式说明

GLTF文件的主要组成部分包括:

  • Asset:描述文件的元数据,如版本、生成器等。
  • Scenes:描述3D场景的列表,每个场景包含一组节点(Node)。
  • Nodes:描述3D对象的列表,每个节点可以包含网格(Mesh)、摄像机(Camera)、骨骼(Skin)等。
  • Meshes:描述3D网格的列表,每个网格包含一组图元(Primitive)。
  • Materials:描述材质的列表,每个材质定义了表面的外观,如颜色、纹理、光照模型等。
  • Textures:描述纹理的列表,每个纹理包含一个图像(Image)和一个采样器(Sampler)。
  • Animations:描述动画的列表,每个动画包含一组通道(Channel)和采样器(Sampler)。

以上是GLTF格式的一些基本信息,具体的细节和规范可以在Khronos Group的官方文档中找到。

示例如下:

json 复制代码
{
  "asset": {
    "version": "2.0"
  },
  "scenes": [
    {
      "nodes": [0]
    }
  ],
  "nodes": [
    {
      "mesh": 0
    }
  ],
  "meshes": [
    {
      "primitives": [
        {
          "attributes": {
            "POSITION": 0
          },
          "indices": 1
        }
      ]
    }
  ],
  "buffers": [
    {
      "uri": "data:application/octet-stream;base64,...",
      "byteLength": 1024
    }
  ],
  "bufferViews": [
    {
      "buffer": 0,
      "byteOffset": 0,
      "byteLength": 512
    }
  ],
  "accessors": [
    {
      "bufferView": 0,
      "componentType": 5123,
      "count": 36,
      "type": "SCALAR"
    }
  ]
}

GLB格式

GLB是一种3D模型文件格式,由Khronos Group定义,作为GLTF(GL Transmission Format)的二进制版本。以下是一些关于GLB格式的关键点:

  • 单一文件:GLB格式的主要特点是它将所有的模型数据(包括结构、几何、纹理等)打包到一个单一的文件中。这使得GLB文件更易于传输和加载,因为只需要一个文件就可以表示一个完整的3D模型。
  • 二进制格式:GLB文件是二进制格式的,这使得它们可以直接被GPU读取和处理,无需进行任何预处理。然而,这也意味着GLB文件不易于人类阅读和编辑。
  • GLTF兼容:GLB文件是完全兼容GLTF规范的,它们支持所有的GLTF特性,如PBR材质、动画、骨骼等。你可以将任何GLTF文件转换为GLB文件,反之亦然。
  • 广泛支持:GLB格式被许多3D应用程序和游戏引擎支持,包括Three.js、Babylon.js、Unity、Unreal Engine等。

总的来说,GLB是一种高效、紧凑的3D模型格式,特别适合于网络传输和实时渲染。

GLTF和GLB格式比较

GLTF和GLB都是由Khronos Group定义的3D模型格式,它们都支持现代3D引擎和应用程序所需的各种特性,如PBR材质、动画和骨骼。然而,它们在文件结构和用途上有一些重要的区别:

  • GLTF (.gltf):GLTF文件是JSON格式的,它包含了3D模型的结构和属性信息,如节点、网格、材质等。GLTF文件可以引用其他的外部文件,如二进制数据文件 (.bin) 和纹理图像。这种分离的设计使得GLTF文件易于阅读和编辑,但可能需要多个文件才能表示一个完整的3D模型。

  • GLB (.glb):GLB文件是GLTF的二进制版本,它将所有的模型数据(包括JSON、二进制数据和纹理)打包到一个单一的文件中。这使得GLB文件更易于传输和加载,因为只需要一个文件就可以表示一个完整的3D模型。然而,GLB文件不易于阅读和编辑,因为它们是二进制格式的。

总的来说,如果你需要一个易于阅读和编辑的格式,或者你的模型数据需要分散在多个文件中,那么GLTF可能是一个好的选择。如果你需要一个易于传输和加载的格式,或者你的模型数据可以打包到一个文件中,那么GLB可能是一个好的选择。

STEP 格式

STEP(Standard for the Exchange of Product model data)文件格式是一种用于描述三维模型数据的国际标准格式,由ISO 10303标准定义。它的主要目的是实现不同CAD(计算机辅助设计)系统之间的互操作性。STEP文件格式广泛应用于工程、制造和建筑等领域,用于交换复杂的产品数据。

  • 文件扩展名:STEP文件通常以.stp或.step为文件扩展名。
  • 数据格式:STEP文件使用ASCII文本格式来表示数据,这使得文件内容可以被人类阅读和编辑。文件内容通常包括几何信息、拓扑信息、材料属性、装配结构等。
  • 数据结构:
    • HEADER:文件头部,包含文件的基本信息,如文件名、作者、日期等。
    • DATA:数据部分,包含具体的几何和拓扑信息。
    • END-ISO-10303-21:文件结束标志。
  • 优缺点:
    • 优点:
      1. 高互操作性: STEP文件格式的主要优势在于其高互操作性。不同的CAD软件可以通过STEP文件格式进行数据交换,从而避免了数据丢失和格式不兼容的问题。
      2. 标准化:ISO 10303标准定义
      3. 支持复杂的几何和拓扑信息
    • 缺点
      1. 文件可能较大
      2. 解析和生成STEP文件可能需要较高的计算资源

示例:

ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('Example STEP file'),'2;1');
FILE_NAME('example.stp','2023-10-10T12:00:00',('Author'),('Organization'),'','');
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
ENDSEC;
DATA;
#1 = CARTESIAN_POINT('',(0.0, 0.0, 0.0));
#2 = CARTESIAN_POINT('',(1.0, 0.0, 0.0));
#3 = LINE('',#1,#2);
ENDSEC;
END-ISO-10303-21;

GLTF和STEP格式比较

  1. 标准和发布机构
    • GLTF:
      • 由Khronos Group发布。
      • 主要用于实时3D图形和Web应用。
    • STEP:
      • 由国际标准化组织(ISO)发布,具体标准为ISO 10303。
      • 主要用于工程和制造领域的数据交换。
  2. 文件扩展名
    • GLTF:.gltf(JSON格式)和.glb(二进制格式)。
    • STEP:.stp或.step。
  3. 数据表示
    • GLTF:
      • 使用JSON格式表示数据,易于解析和编辑。
      • 支持二进制格式(.glb),更适合传输和存储。
      • 主要包含几何信息、材质、纹理、动画等。
    • STEP:
      • 使用ASCII文本格式表示数据,文件内容可以被人类阅读和编辑。
      • 主要包含几何信息、拓扑信息、材料属性、装配结构等。
  4. 应用领域
    • GLTF:
      • 主要用于WebGL、虚拟现实(VR)、增强现实(AR)和游戏开发。
      • 适合实时渲染和交互应用。
    • STEP:
      • 主要用于机械设计、建筑设计、航空航天、汽车制造、电子产品设计等工程和制造领域。
      • 适合复杂的产品数据交换和长期存储。
  5. 互操作性
    • GLTF:
      • 设计为跨平台和跨设备的3D模型传输格式。
      • 广泛支持现代浏览器和3D引擎,如Three.js、Babylon.js等。
    • STEP:
      • 高互操作性,不同的CAD软件可以通过STEP文件进行数据交换。
      • 广泛支持各种CAD软件,如AutoCAD、SolidWorks、CATIA、PTC Creo、Siemens NX等。
  6. 文件大小和性能
    • GLTF:
      • 文件通常较小,适合网络传输和实时渲染。
      • 支持压缩和优化,如Draco压缩。
    • STEP:
      • 文件可能较大,包含详细的几何和拓扑信息。
      • 解析和生成STEP文件可能需要较高的计算资源。
  7. 主要特点
    • GLTF:
      • 轻量级,适合实时渲染。
      • 支持PBR(Physically Based Rendering)材质。
      • 支持动画和骨骼动画。
    • STEP:
      • 支持复杂的几何和拓扑信息。
      • 支持装配结构和产品数据管理。
      • 高度标准化,适合长期存储和数据交换。
  8. 总结
    • GLTF适合实时渲染和Web应用,文件小,易于传输和渲染。
    • STEP适合工程和制造领域的数据交换,支持复杂的几何和拓扑信息,高度标准化。

FBX 格式

FBX(Filmbox)文件格式是一种广泛使用的三维模型和动画文件格式,由Autodesk开发和维护。FBX格式支持多种3D数据类型,包括几何、材质、纹理、动画、骨骼、灯光和摄像机等,因此在3D建模、动画制作、游戏开发和虚拟现实等领域得到了广泛应用。

  1. 文件扩展名:FBX文件通常以.fbx为文件扩展名。
  2. 数据表示:FBX文件可以使用二进制格式或ASCII文本格式来表示数据。
    • 二进制格式更紧凑,适合传输和存储;
    • ASCII格式则更易于阅读和调试。
  3. 支持的数据类型:FBX格式支持多种3D数据类型,包括但不限于
    • 几何(Geometry):顶点、边、面、法线、UV坐标等。
    • 材质(Materials):颜色、纹理、反射率等。
    • 动画(Animation):关键帧动画、骨骼动画、变形动画等。
    • 骨骼(Skeletons):骨骼结构、关节、权重等。
    • 灯光(Lights):点光源、聚光灯、环境光等。
    • 摄像机(Cameras):透视摄像机、正交摄像机等。
  4. 文件结构:FBX文件的结构相对复杂,包含多个层次的节点,每个节点可以包含不同类型的数据。以下是FBX文件的一些主要结构元素
    • Header:文件头部,包含文件版本等基本信息。
    • Objects:定义了文件中的所有对象,如几何、材质、动画等。
    • Connections:定义了对象之间的关系和连接。
    • Takes:包含动画数据。
  5. 应用领域:
    1. 3D建模和动画:用于创建和编辑三维模型和动画。
    2. 游戏开发:用于导入和导出游戏中的三维模型和动画。
    3. 虚拟现实(VR)和增强现实(AR):用于创建虚拟和增强现实环境中的三维对象。
    4. 影视制作:用于制作电影和电视中的三维特效和动画。
  6. 优缺点
    • 优点:
      • 支持多种3D数据类型,包括几何、材质、动画等。
      • 高度兼容,广泛支持多种3D软件和渲染引擎。
      • 支持复杂的动画和骨骼结构。
    • 缺点:
      • 文件结构相对复杂,不易手动编辑。
      • 文件可能较大,尤其是包含大量动画数据时。
      • 二进制格式不易阅读和调试。
  7. 总结:FBX文件格式是一种功能强大的三维模型和动画文件格式,广泛应用于3D建模、动画制作、游戏开发和虚拟现实等领域。它支持多种3D数据类型,具有高度兼容性和广泛的应用支持,是3D数据交换和存储的常用格式之一。
  8. 示例:以下是一个简单的FBX文件示例(ASCII格式)
Plaintext 复制代码
; FBX 7.4.0 project file
; ----------------------------------------------------

FBXHeaderExtension:  {
    FBXHeaderVersion: 1003
    FBXVersion: 7400
    CreationTimeStamp: {
        Version: 1000
        Year: 2023
        Month: 10
        Day: 10
        Hour: 12
        Minute: 0
        Second: 0
        Millisecond: 0
    }
    Creator: "FBX SDK/FBX Plugins version 2020.0"
}

Objects:  {
    Geometry: "Cube" {
        Vertices: *24 {
            a: 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0,1,1
        }
        PolygonVertexIndex: *24 {
            a: 0,1,2,3,-1, 4,5,6,7,-1
        }
    }
}

Connections:  {
    C: "OO", "Geometry::Cube", "Model::Cube"
}

与GLTF相比,GLTF适合实时渲染和Web应用,文件小,易于传输和渲染,特别适用于WebGL、虚拟现实和增强现实等实时交互应用。而FBX适合需要复杂动画和骨骼结构的3D建模和动画制作,广泛应用于游戏开发、影视制作和虚拟现实等领域。

相关推荐
白葵新11 小时前
Open3D 删除点云中重叠的点(方法二)
图像处理·人工智能·python·算法·计算机视觉·3d
木木阳19 小时前
WACV2023论文速览3D相关
论文阅读·3d·wacv
mirrornan1 天前
什么是Web3D交互展示?有什么优势?
3d·webgl·3d模型·web3d·3d展示
VRARvrnew3d1 天前
采煤机作业3D虚拟仿真教学线上展示增强应急培训效果
安全·3d·vr·虚拟现实·虚拟仿真·3d展示·采煤机作业
LhcyyVSO1 天前
Maya崩溃闪退常见原因及解决方案
3d·3d建模·云渲染·动画渲染·maya·3d渲染·渲染农场
q567315231 天前
Python 3.x 下的 3D 游戏引擎
开发语言·后端·python·3d·django·游戏引擎
q567315232 天前
matplotlib mplot3d模块在Ubuntu 10.04中的问题与解决方法
ubuntu·3d·matplotlib
MediTechInsight2 天前
「opengl」光照和材质在3D图形渲染中的作用与实现
3d·图形渲染·材质
久数君2 天前
数据驱动制造业升级,免费可视化工具成关键
大数据·网络·物联网·3d·信息可视化
枝上棉蛮2 天前
用免费的可视化工具制作3D智慧城市大屏,融合数字孪生,引领数据升级
3d·免费·数字孪生·数据可视化·3d可视化大屏·数据可视化工具·山海鲸可视化