本文翻译自:https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_001_Introduction.md
由于本人才疏学浅,翻译难免有误,望各位不吝惜指正。
越来越多的应用程序和服务使用3D内容。网上商城为产品提供3D预览。博物馆通过3D扫描技术将收藏品扫描,允许人们在线参观。城市规划使用3D技术来可视化规划结果。教育工作者通过创建可交互的3D动画,提升教学质量。
应用程序对3D内容的需求日渐增加。很多时候,我们需要在互联网上传输这些3D内容,然后高效地渲染它们。但是,目前来说,3D内容的创建和渲染之间还存在一个不小的鸿沟。
3D内容管线
3D内容的来源非常复杂,它们往往还具有不同的文件格式,下面的链接给出了多个不同的应用程序支持的超过70种不同的3D数据文件格式。
https://en.wikipedia.org/wiki/List_of_file_formats#3D_graphicsen.wikipedia.org通常,原生的3D数据由3D扫描器扫描得到。这些扫描器通常将扫描得到的3D数据以OBJ,PLY或STL格式存储,不包含任何场景结构信息以及3D数据如何被渲染的信息。
更为复杂的3D场景数据通常是使用一些创作软件得到的。这些创作软件允许对场景进行编辑,比如对光源、相机和动画进行编辑。创作软件通常以自己的方式来存储这些可以编辑的3D场景数据。比如Blender将它的场景数据存储为.blend文件,LightWave3D将它的场景数据存储为.lws文件,3ds Max将它的场景数据存储为.max文件,Maya将它的场景数据存储为.ma文件。
为了渲染来源不同的3D内容,应用程序需要能够读取这些个数不同的3D数据文件。为了进行渲染,场景数据和3D几何数据需要转换为图形API可以接受的形式,从而可以被传输到显卡上进行渲染。通常,如下图所示,应用程序为此需要编写导入程序、加载程序。
glTF:一个3D场景数据格式
glTF格式的目标是为3D内容的数据格式提供统一的标准,方便应用程序读取进行渲染。目前来说已经存在的3D数据格式不是没有包含场景数据,就是包含一些只能用于特定创作软件的数据,许多时候,需要对几何数据进行预处理才能直接用于渲染。
目前而言,现存的3D数据格式不能够方便地在互联网上进行传输,以及直接高效地进行渲染。glTF的目标是作为一个中转格式,而不是另一个新的3D数据格式:
- 使用JSON来描述场景结构,可以方便地被应用程序分析处理。
- 3D数据以一种可以被大多数图形API直接使用的方式进行存储,不需要应用程序进行解码或预处理操作。
现在已经有一些3D内容创作软件可以将3D场景以glTF格式进行存储。一些应用程序也可以直接进行glTF场景数据的渲染。图1a给出了部分支持glTF数据格式的应用程序。如图1c,glTF可以作为3D内容创作软件和渲染应用程序之间的桥梁。
越来越多的3D内容创作软件开始支持glTF数据格式。对于其它格式的已有的3D数据可以通过下面的工具进行转换。
KhronosGroup/glTFgithub.com几乎所有的3D内容创作软件都支持导出场景到COLLADA格式,所以,我们可以使用COLLADA2GLTF工具来将场景数据转换为glTF格式。.OBJ文件可以使用obj2gltf进行转换。对于其它数据格式,可以通过深度定制完成到glTF格式的转换。
fangcun:glTF格式详解(目录)zhuanlan.zhihu.com