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文件

相关推荐
Shaoxi Zhang11 小时前
JAVA学习笔记035——对象和JSON格式
java·笔记·学习
Oll Correct11 小时前
Adobe illustrator 案例六:手枪图标绘制
笔记·ui·adobe·illustrator
摇滚侠13 小时前
《Docker技术入门与实战 第4版》阅读笔记 2 Docker 镜像
笔记·docker·容器
疯狂打码的少年16 小时前
【数据结构】图的遍历:深度优先搜索(DFS)
数据结构·笔记·算法·深度优先
智者知已应修善业17 小时前
【51单片机数码管逐位显示1-8余位不亮】2024-10-23
c语言·经验分享·笔记·嵌入式硬件·51单片机
Wang's Blog17 小时前
PostgreSQL笔记16: 索引基础——概念、类型、创建与最佳实践
数据库·笔记·postgresql
ysa05103017 小时前
c++常用自带函数用法与注意
c++·笔记·算法
Wang's Blog18 小时前
PostgreSQL笔记24: Background Writer 后台写进程的原理、参数调优与可观测性演进
数据库·笔记·postgresql
无聊的菜鸟18 小时前
TMS320F2806X学习笔记(一)—— 了解片上资源
笔记·ti·c2000·f2806x
优化Henry19 小时前
学习笔记之爱立信站点指向证书执行
运维·服务器·网络·笔记·学习·信息与通信