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 小时前
个人笔记——栈
笔记
chnyi6_ya2 小时前
论文阅读笔记 | One Sentence, One Drama: 基于多智能体系统的个性化短剧生成
论文阅读·笔记
ysa0510302 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
Dory_Youth3 小时前
联想笔记本电脑失灵
运维·笔记·电脑
2501_926978333 小时前
认知边缘的双向耦合:从核技术类比到智力货币时代
人工智能·经验分享·笔记·ai写作
hanlin034 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
茯苓gao4 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
FellAveal5 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
极地野狼 音乐哔哔6 小时前
AI Agent 30天速成|Day4 笔记
人工智能·笔记