越来越多的应用程序和服务基于3D内容。在线商店提供带有3D预览的产品配置器。博物馆通过3D扫描将其工件数字化,并允许访问者在虚拟画廊中探索他们的馆藏。城市规划者使用3D城市模型进行规划和信息可视化。教育工作者创建人体的交互式动画3D模型。其中许多应用程序直接在Web浏览器中运行,这是可能的,因为所有现代浏览器都支持使用WebGL进行高效渲染。
图1a:显示3D模型的各种网站和应用程序的屏幕截图。
各种应用中对3D内容的需求不断增加。在许多情况下,3D内容必须通过Web传输,并且必须在客户端有效地呈现。但到目前为止,3D内容创建与运行时应用程序中3D内容的高效呈现之间存在差距。
3D内容管道
在客户端应用程序中呈现的3D内容来自不同的源,并以不同的文件格式存储。在对维基百科的3D图形文件格式列表中显示了绝大多数,有超过70种不同的文件格式的3D数据,服务于不同目的和应用案例。
例如,可以使用3D扫描仪获得原始3D数据。这些扫描仪通常提供单个对象的几何数据,该对象存储在OBJ,PLY或STL文件中。这些文件格式不包含有关场景结构或对象应如何呈现的信息。
可以使用创作工具创建更复杂的3D场景。这些工具允许人们编辑场景的结构,灯光设置,相机,动画,当然还有场景中出现的对象的3D几何图形。应用程序以自己的自定义文件格式存储此信息。例如,Blender将场景存储在.blend
文件中,LightWave3D使用.lws
文件格式,3ds Max使用.max
文件格式,Maya使用.ma
文件。
为了呈现这样的3D内容,运行时应用程序必须能够读取不同的输入文件格式。必须解析场景结构,并且必须将3D几何数据转换为图形API所需的格式。必须将3D数据传输到图形卡存储器,然后可以使用图形API调用序列来描述渲染过程。因此,每个运行时应用程序必须为它将支持的所有文件格式创建导入器,加载器或转换器,如图1b所示。
图1b:今天的3D内容管道
glTF:3D场景的传输格式
glTF的目标是以适合在运行时应用程序中使用的形式定义用于表示3D内容的标准。现有的文件格式不适合这种用例:有些不包含任何场景信息,只包含几何数据; 其他设计用于在创作应用程序之间交换数据,其主要目标是尽可能多地保留有关3D场景的信息,从而导致文件通常较大,复杂且难以解析。另外,可能必须预处理几何数据,以便可以使用客户端应用程序来呈现它。
现有的文件格式都不是为在网上有效传输3D场景并尽可能高效地渲染它们的用例而设计的。但是glTF并不是“另一种文件格式”。它是3D场景传输格式的定义:
场景结构用JSON描述,它非常紧凑,可以很容易地解析。对象的3D数据以可以由公共图形API直接使用的形式存储,因此没有用于解码或预处理3D数据的开销。
现在,不同的内容创建工具可以以glTF格式提供3D内容。越来越多的客户端应用程序能够使用和呈现glTF(其中一些应用程序如图1a所示)。因此,glTF可以帮助弥合内容创建和渲染之间的差距,如图1c所示。
图1c:带有glTF的3D内容管道。
越来越多的内容创建工具将能够直接提供glTF。或者可以使用Khronos glTF存储库中列出的开源转换实用程序将其他文件格式转为glTF结构。例如,几乎所有创作应用程序都可以以COLLADA格式导出其场景。因此,COLLADA2GLTF工具可用于将这些创作应用程序中的场景和模型转换为glTF。OBJ可以使用obj2gltf将文件转换为glTF。对于其他文件格式,可以使用自定义转换器创建glTF结构,从而使3D内容可用于各种运行时应用程序。