【译】glTF教程:介绍(一)

【译】glTF教程:介绍(一)

2019-02-08

目录前言

glTF 教程

作者Marco Hutter, @javagl 本教程介绍了GL传输格式glTF。总结了glTF最重要的特性和应用案例,描述了与glTF相关的文件的结构。它解释了如何读取、处理和使用glTF资产来有效地显示3D图形。 本文假设您对JSON和JavaScript对象符号有一些基本的了解。此外,还需要对OpenGL或WebGL等常见图形api有基本的了解。

===

介绍使用WebGL的glTF

越来越多的应用程序和服务基于3D内容。在线商店提供带有3D预览的产品配置器。博物馆通过3D扫描将他们的文物数字化,并允许参观者在虚拟画廊中探索他们的收藏品。城市规划师使用三维城市模型进行规划和信息可视化。教育工作者创造交互式的、动画的人体三维模型。许多应用程序直接在web浏览器中运行,这是可能的,因为所有现代浏览器都支持使用WebGL进行高效的呈现。


Image 1a:显示3D模型的各种网站和应用程序的截图。.

各种应用对3D内容的需求不断增加。在许多情况下,3D内容必须通过web传输,并且必须在客户端高效地呈现。但是到目前为止,在运行时应用程序中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调用序列来描述呈现过程。因此,每个运行时应用程序必须为它将支持的所有文件格式创建导入器、加载器或转换器,如下所示图1 b.


图1b:今天的3D内容管道

glTF: 用于3D场景的传输格式

glTF的目标是定义一个表示3D内容的标准,其形式适合在运行时应用程序中使用。现有的文件格式不适合这个用例:有些不包含任何场景信息,只包含几何数据;还有一些是为创作应用程序之间交换数据而设计的,它们的主要目标是尽可能多地保留关于3D场景的信息,从而生成通常较大、复杂且难以解析的文件。此外,几何数据可能必须进行预处理,以便能够使用clien呈现

现有的文件格式都不是为在web上高效传输3D场景并尽可能高效地呈现它们而设计的。但是glTF不是“另一种文件格式”。定义3D场景的“传输”格式为:

  • 场景结构用JSON描述,非常紧凑,易于解析。
  • 对象的3D数据以一种普通图形api可以直接使用的形式存储,因此不存在解码或预处理3D数据的开销。

不同的内容创建工具现在可以提供glTF格式的3D内容。越来越多的客户机应用程序能够使用和呈现glTF。其中一些应用程序显示在 图 1a. 因此,glTF可能有助于弥合内容创建和呈现之间的差距,如下所示 图 1c.


图 1c: glTF的3D内容管道。

越来越多的内容创建工具将能够直接提供glTF。或者,可以使用Khronos glTF存储库中列出的一个开源转换实用程序来使用其他文件格式创建glTF资产。例如,几乎所有创作应用程序都可以以COLLADA格式导出它们的场景。因此COLLADA2GLTF工具可用于将场景和模型从这些创作应用程序转换为glTF。“OBJ”文件可能是