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 及其关联的 BufferView 是 glTF 资源最基础的组成部分。glTF借鉴了Typed Array规范中两个基础类型:ArrayBuffer 和 ArrayBufferView 定义了Buffer 和 BufferView 。用于描述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文件

相关推荐
Swilderrr12 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
SatanII12 小时前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
I'mChloe14 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
库玛西15 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
摇滚侠15 小时前
《Java并发编程之美》第 2 章 并发编程的其他基础知识 阅读笔记 3
android·java·笔记
ss27316 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 18 PostgreSQL基本索引原理与创建
数据库·笔记·postgresql
qq_2842740517 小时前
电气控制笔记:常用低压电器符号原理与异步电动机点动、自锁、多地控制电路(含考点)
笔记·学习·自动化·制造
坤坤子吖17 小时前
Linux 线程同步与互斥——条件变量与线程同步
linux·开发语言·c++·笔记·学习
乐橙开放平台17 小时前
不用换摄像头,如何用乐橙把海康、大华、宇视统一到一个界面
笔记·物联网·自动化·音视频·智能家居
凯凯姜18 小时前
Vue 3 深入学习笔记 16:API 请求封装与统一错误处理
vue.js·笔记·学习