glTF格式初步了解
最近看到
Qt 3D
的进展,偶然了解到了一种新的格式:
glTF
格式。这种格式据说比现有的
3D
格式更加符合
OpenGL
应用的需要,这引起了我的好奇,于是我在
Qt 3D
的外部链接中找到了有关
glTF
的相关链接。
上海萌梦信息科技有限公司(微博:
http://weibo.com/qtdream
)原创文章,首发地址:
http://qtdream.com/topic/140
。欢迎同行前来探讨。
glTF
的官网介绍在
这里
。它介绍了
glTF
的一些特性、发起者以及应用情景。官网中,介绍了
glTF
是一种可以减少
3D
格式中与渲染无关的冗余数据并且在更加适合
OpenGL
簇加载的一种
3D
文件格式。
glTF
的提出是源自于
3D
工业和媒体发展的过程中,对
3D
格式统一化的急迫需求。官网的一张图片可以简单地说明这一点:
也就是说,
glTF
立志成为音频界的
mp3
、视频界的
H.264
,图片界的
jpeg
。
在官网的截图上我们看到,在没有
glTF
的时候,大家都要花很长的的时间来处理模型的载入。很多的游戏引擎或者工控渲染引擎,都使用的是插件的方式来载入各种格式的模型。可是,各种格式的模型都包含了很多无关的信息。比如说
.blend
格式包含了场景、灯光、摄像机信息,也包含了
blender
的元信息,这样在载入的时候会浪费很多的载入时间。这需要一次模型的再加工工序(这道工序是否需要,有待观察)
当有
glTF
之后,可以将模型再加工成为
glTF
,这样渲染的程序只需要支持
glTF
格式就可以很顺利地处理各种情况了。
给大家简单介绍了一下
glTF
这个格式,下面我说一下我对
glTF
这个新的
3D
格式的看法。
1、
为什么要有
glTF
这个格式的提出呢?
首先,一切新的事物的发明都是为了为了解决以前不方便的情况。就
glTF
格式而言,虽然以前有很多
3D
格式,但是各种
3D
模型渲染程序都要处理很多种的格式。对于那些对载入格式不是那么重要的软件(不是那些类似“格式工厂”那样的软件),可以显著减少代码量,所以也有人说,最大的受益者是那些对程序大小敏感的
3D Web
渲染引擎,只需要很少的代码就可以顺利地载入各种模型了。此外,
glTF
是对近二十年来各种
3D
格式的总结,使用最优的数据结构,来保证最大的兼容性以及可伸缩性。这就好比是本世纪初
xml
的提出。
glTF
使用
json
格式进行描述,也可以编译成二进制的内容:
bglTF
。
glTF
可以包括场景、摄像机、动画等,也可以包括网格、材质、纹理,甚至包括了渲染技术(
technique
)、着色器以及着色器程序。同时由于
json
格式的特点,它支持预留一般以及特定供应商的扩展。
2、
为什么要提出一个新的格式而不是发展现有的格式比如说
collada
?
我认为这个是对
3D
通用格式的解释权的一种争夺战。大家已经知道
OpenGL
已经成为事实上的工业渲染标准,作为现有
OpenGL
的维护组织,
khronos
也迫切希望在
3D
格式上进行一次统一,让
glTF
成为类似
jpeg
、
mp3
等常见的格式,
khronos
也有威望,可以让行业的大厂们协同一起来参与新标准的制定。对于
collada
这样基于
xml
格式的竞争对手,
glTF
的提出给大家提供了一个新的思路以及解决方案。就好像
json
当初没有提出的时候,大家都会倾向使用
xml
来描述通用的可交换的数据格式,可是随着
json
的发展,
xml
不再是一枝独秀,逐渐形成了两强的局面,大家也有了更多的选择。上图我们可以看到,我们可以利用现有的格式转换工具很轻松地将
collada
格式转换为
glTF
格式,而
glTF
对于
OpenGL
的兼容性,我想会因
khronos
而变得更好。