GPU PRO 5 - 5.2 glTF: Designing an Open-Standard Runtime Asset Format笔记

glTF: Designing an Open-Standard Runtime Asset Format

glTF:一种开放标准运行时资源格式的设计

文章里一些概念:

COLLADA:这是一种开放标准的资源文件格式,用于各种图形软件程序之间交换数字资产

这篇文章主要是提倡另一种资源文件格式,用来给开发者提供一个统一的基础,将美术资源格式转换到统一的渲染引擎在运行时使用的资源格式,文章给这种资源文件格式的名字是glTF

提议glTF的动机:

解决引擎开发者仍然需要自行构建内容制作流水线和资源传输格式。并存在以下两个问题:

1,资源必须经过处理,以满足GL API 所要求的数据格式。

2,资源必须被组织成适合传输和快速解析的格式。

glTF的目标:

1,定义规范并提供完整的生态

2,开放协作,包括GitHub,社区,Markdown,Issue跟踪

3,从WebGL切入,扩展到整个实时图形领域

glTF 的json结构:

早期的glTF整体结构的设计理念可以概括为三

个方面:

1,场景图为组织核心:Scene → Node → Mesh 的层级来组织整个场景

2,数据与结构分离:Json描述结构场景、引用关系和资源元数据,Buffer/BufferView 存储顶点等数据

3,以引用关系连接资源:引用式设计,减少文件体积,提高运行时加载效率

Buffer 与 BufferView:

Buffer 及其关联的 BufferViewglTF 资源最基础的组成部分。glTF借鉴了Typed Array规范中两个基础类型:ArrayBuffer 和 ArrayBufferView 定义了BufferBufferView 。用于描述Json文件中依赖二进制数据存储的数据,比如顶点,索引等:

这里可以看到,一个office.bin 文件被划分为两个bufferView,Buffer表示一整块连续的二进制数据,BufferView则是其中的一段数据,可以用于划分不同用途的数据块。最终Buffer怎么加载由运行时的引擎决定,或是渐进式加载或是一次性加载。这种结构可以实现数据存储与数据解释的分离,提高了资源共享能力和运行时加载效率。

网格:

在glTF中,网格本质上一个需要被渲染的Primitive数组。

每个Primitive指定了:

1,图元类型

2,索引数据

3,材质

4,顶点属性

这些属性会由同一个Mesh中的多个Primitive共享,换句话说共享同一组顶点属性的多个Primitive会被归为一个Mesh

材质:

glTF中定义了一些材质中必要字段,并对每个字段都会在OpenGL 的API有相应的映射

glTF的材质系统主要可以分为四层:

Material:保存具体材质参数(颜色,纹理,光泽度等)

Technique :定义渲染方法,包括参数、Pass和渲染状态,是多个Material可以共享的渲染模板。

Pass :描述一次渲染所需的完整配置、包括Program、Shader 和 OpenGL状态

Program : 对应实际绑定到GPU的着色器程序

这种分层设计能够让glTF中的材质描述能够映射到OpenGL的底层调用,并通过共享 Technique 来减少 Shader 和状态切换,提高渲染效率

动画:

glTF支持多种业界标准的动画技术:

包括:关键帧动画、蒙皮动画、形态变形

glTF中将动画拆分为了以下几个部分:

Channels、Samplers、Parameters

Parameters:提供关键帧的数据、通常引用bufferViews部分里的某部分bufferView

Samplers:定义了输入、输出和插值方式

Channels:将采样结果绑定到目标节点的某个属性上,比如平移、旋转、缩放

对于蒙皮动画,Channels控制的时骨骼中的关节节点。

COLLADA2GLTF:

定义完每种美术资源如何在glTF的保存后,接下来需要了解的是如何从统一的美术资源格式COLLADA转换到glTF格式。主要阶段按顺序为

1,Triangulate :三角化,将几何体转换为OpenGL支持的图元

2,Single Index:单一索引,规范每个顶点只能使用一个索引

3,Split:网格拆分

4,Skinning optimizations:限制每个顶点能被骨骼影响的最大数量

5,shaders :自动生成与材质描述相对应的shader

6,Json格式化:转换器会把整个数据结构序列化

7,Image conversion:对图片的Alpha通道检查

8,Binary 格式化:将数值数据序列化为多个.bin文件

9,其他资源的处理:这个转换管线支持开发者拓展

参考资料:

Collada DAE模型格式说明

什么是3D模型,什么是GLTF,又如何使用GLTF文件

相关推荐
罗西的思考1 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 —(1)— 总体
人工智能·笔记·深度学习·学习·机器学习
blue_ice .2 小时前
DDS原理及简易实现
开发语言·经验分享·笔记·嵌入式硬件·fpga开发
bug嘛我经常写2 小时前
MIKE21结合ArcGIS制作随时间变化的降水文件(.dfs2)-笔记
经验分享·笔记·arcgis
hanlin032 小时前
刷题笔记:力扣第169题-多数元素
笔记·算法·leetcode
kaixin_啊啊2 小时前
中国研究生数学建模竞赛(华为杯)学习笔记——数据预处理全流程
人工智能·笔记·学习·数学建模·ai·大模型·数据预处理
星云API|微信接口开发6 小时前
企业微信二次开发实战笔记:如何用在线调试快速验证接口功能
数据库·笔记·企业微信
David猪大卫11 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
自小吃多16 小时前
高云FPGA ModelSim中的仿真
笔记·嵌入式硬件·fpga开发
小刘在重生~17 小时前
Java 异常体系完整笔记
java·笔记·python
泡泡鱼(敲代码中)17 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm