您的位置:首页 > 理论基础 > 数据结构算法

3D引擎数据结构与glTF(1):简介

2017-12-09 16:35 531 查看
不是有句老话讲“程序 = 算法 + 数据结构”嘛,对于3D引擎来说也是这样。学习和掌握3D引擎中的核心数据有哪些,它们直接的关系是怎样等等问题,对于理解3D引擎的架构和图形渲染关系都有着非常大的帮助。然而,现在的商业3D引擎非常复杂,想要通过学习其源代码嘛非常困难,那么你就这样放弃了吗? :wink: 我们需要一个合适的方式切入。

那么,什么是glTF呢

直接去研读Unreal Engine的源代码,对于没有基础的同学来说,确实太困难了。想要对3D引擎内部有一些必要的了解,glTF是一个很好的切入点。学习glTF也是具有实用价值的,已经有越来越多的引擎支持这种格式,另外还可以顺便学一下英语。:smile:

glTF是什么呢?

* glTF即GL Transmission Format的缩写;

* glTF是一种3D内容的格式标准,由Khronos Group管理;(Khronos Group还管理着OpenGL系列、OpenCL等重要的行业标准)

* glTF的设计是面向实时渲染应用的,尽量提供可以直接传输给图形API的数据形式,不再需要二次转换;

* glTF对OpenGL ES、WebGL非常友好;

* glTF的目标是:3D领域的JPEG;

* 作为一个标准,自2015年10月发布(glTF 1.0)以来,已经得到了业界广泛的认可,你可以相信它的水平;

* glTF目前最新版本为2.0已于2017年6月正式发布。

glTF都包含哪些数据

从逻辑的角度,它包含所有常用的、必须的数据:

* glTF包括场景定义数据,它使用SceneGraph,也就是一个树来定义场景;场景中的节点包含Transform矩阵(也就是位置、旋转、缩放)、父子关系的描述,以及包含的功能(mesh、camera等);

* 包含mesh和skin数据,通过它们你可以加载静态模型和骨骼模型;

* 包含动画数据,通过定义场景中节点的运动来定义动画,这些节点可以用来组成骨架结构(Skeleton),也可以直接控制节点中的mesh做刚体运动;

* 包含Morph Target(也称作Blend Shape)模型动画数据;

* 包含材质定义;在glTF 1.0中,包含一个technique的定义,相对于Unity3D中的ShaderLab,或者D3D中的effect文件;

glTF标准所定义的上述数据,从物理结构上了由以下几个文件组成:



* 一个JSON文本文件,作为整个标准的核心,描述场景结构,数据对应关系等;

* 一个二进制文件,用来存储Vertex Buffer、Index Buffer等,这些数据可以直接通过OpenGL或者WebGL API直接上传到显示驱动,无需再做解析和转换;

* 还包含所引用的shader文件、贴图文件等;

本系列文章

通过上面的简单介绍,你可能对于glTF已经比较糊涂了,哈哈,因为我也没打算三两句把它说清楚。我将通过一系列文章讲述glTF的各方面的数据是如何组织的,以及如果通过图形API去实现整个glTF定义的场景的渲染。完整掌握了这些知识,你自己动手实现一个基本的3D渲染引擎应该是可以的。 :smile:

请微信扫码关注公众号“游戏程序员的自我修养”



参考资料

glTF官方网站

glTF 2.0 标准文档

glTF 1.0 标准文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: