GLTF格式的模型使用了更优的数据结构,为应用程序实时渲染而生,在Blender、ThreeJS、BabylonJS中有最好的支持性。
前言:
常见的模型格式有obj、3mf、dae、fbx、gltf等,可以根据纯字符编码还是JSON数据编码分为两大类:以obj、gltf为代表。
详解:
gltf格式旨在统一所有三维模型格式标准,本质为JSON对象。格式为gltf的模型描述了整个场景,包含场景、相机、光源、三维模型等。其中,三维模型的拓扑数据采用二进制存储,其它部分利用二进制数据的索引找到相关内容进行引用,由于二进制存储了大部分内容,文件尺寸相对于其它格式更小。gltf存储数据效率更高,目前受到广泛使用,gltf的结构如图所示。图中的各个结构含义如下:scene:gltf中场景入口,在场景转换树结构后处于最顶层,通过scene可访问到树结构中所有内容。node:是场景中的单个节点,该节点能够进行各类变换,如旋转、平移和缩放,该节点可以由其它node组成,也可以作为虚拟节点管理其它节点。节点类型分为mesh、camera、skin和虚拟节点。
如图所示,为GLTF结构图
camera:定义渲染场景的相机自身参数,坐标和朝向。表示场景中所有三维对象,定义了对象渲染时的外观,可作为三维对象的索引。三维对象的拓扑数据存储于accessor中,渲染外观material内。animation:定义相关node随时间变换的状态,并通过动画组件播放node作为模型的动画行为。
accessor:数据的虚拟存储地,其包含几何数据、蒙皮参数和依赖时间的动画行为,并通过bufferView查询数据,几何数据提供给mesh,蒙皮参数提供给skin,动画行为提供给animation。数据通过转换为二进制降低存储开销,accessor是令gltf格式文件尺寸更小的关键组件。
material:定义三维对象的渲染外观。渲染时,渲染器根据该内容定义对象表面,经过图形计算进行渲染。为了方便定义外观,将所有信息定义于纹理texture内,后续参照纹理赋予三维对象的渲染外观。
texture:由采样器sampler和图像组成,旨在将纹理图像映射到三维对象表面。
在Web中渲染GLTF模型效果图
此外,GLTF格式的模型对Draco压缩算法支持性极好(是一种基于量化的压缩方法,提供压缩和解压3D几何网格和点云的功能)