• 正文概述
  • 简介

    glTF是基于中立 API 的运行时数据传输格式。glTF 搭建起了三维内容创建工具和现代三维应用软件之间的桥梁。它可以提供高效的、可扩展的、可互操作的格式,来进行三维内容的传输和加载。

    glTF基本特点

    glTF由json和外部数据构成,构成如下:

    • 一个json格式的文件(.gltf)包含完整的场景描述:阶段层级结构、材质、相机以及mesh、animation等的描述信息。
    • 二进制文件(.bin),存储geometry、animation数据以及其他基于buffer的数据
    • 纹理文件(.jpg, .png)

    设计目标

    • 文件大小尽量压缩。glTF的json文件是明文存储。Geometry、animation等占用空间较大的数据以二进制文件存储
    • 快速加载。json和bin的数据可以快速被GPU调用,不需要解析和处理。
    • 完整的3D场景描述。glTF可以包含完整场景,包括节点、转换矩阵、mesh、材质、相机、animations。
    • 可扩展。glTF在支持丰富的要素的同事,允许扩展。

    以下不是glTF的设计初衷

    • glTF不支持流式加载
    • glTF的设计是面向开发人员的,并不是对所有用户友好

    概念

    资源(Asset)

    每个glTF必须包含一个asset属性。一个合法的glTF文件,在顶层属性中,也就这么一个必须要有的属性。

    {
     "asset": {
     "version": "2.0",
     "generator": "collada2gltf@f356b99aef8868f74877c7ca545f2cd206b9d3b7",
     "copyright": "2017 (c) Khronos Group"
     }
    }

    索引和命名(Indices and Names)

    glTF文件顶层有bufferView和buffers两个数组类型的object。bufferView通过其下层的buffer来引用buffers中对应的buffer。如

    {
     "buffers": [
     {
     "byteLength": 1024,
     "uri": "path-to.bin"
     }
     ],
     "bufferViews": [
     {
     "buffer": 0,
     "byteLength": 512,
     "byteOffset": 0
     }
     ]
    }

    该例中,bufferView和buffers都只有一个元素。bufferView对象的buffer属性为0,代表了bufferView引用了buffers中下标为0的元素。

    glTF文件顶层object都可以有一个name属性,用来显示。name属性可以缺失,也不保证唯一。

    坐标和单位(Coordinate System and Units)

    • glTF采用右手坐标系
    • 长度单位是米
    • 角度单位为弧度
    • 正向旋转为逆时针
    • 颜色采用sRGB格式

    场景(Scenes)

    • glTF可以包含0个或多个Scene,保存在scenes数组里。
    • 另外有一个scene属性用来指定加载时要显示的那个scene。scene属性可以为空。

    Nodes and Hierarchy

    glTF中可以定义nodes,其中包含了场景中要渲染的实体。

    • nodes 可以包含name属性
    • nodes 可以包含坐标变换参数
    • nodes 有父子结构。一个父节点用children数组对象保存儿子节点的下标(笔者认为这种方式不直观)
    {
     "nodes": [
     {
     "name": "Car",
     "children": [1, 2, 3, 4]
     },
     {
     "name": "wheel_1"
     },
     {
     "name": "wheel_2"
     },
     {
     "name": "wheel_3"
     },
     {
     "name": "wheel_4"
     } 
     ]
    }

    Transformations

    一个node可以定义一个本地空间变换参数,有两种方式:

    1. 定义一个matrix对象
    2. 定义TRS(translation, rotation, scale)对象

    两种方式原则上可以相互转换。

    二进制存储(Binary Data Storage)

    • Buffer 是二进制blob,可以包含geometry、animation和skin。
    • Buffers 存储在buffers数组对象中
    • Buffer 数据小端存储
    • 一个buffer view可以包含定点索引(vertex indices)或属性(attributes),但一个buffer view只能包含一种数据。
    • buffers和bufferView不包含类型信息。
    • 内容较大的数据(mesh、skins、annimations)应存放在buffers对象中,从而可以被accessor获取到。

    几何信息(Geometry)

    • 一个node可包含一个mesh
    • 一个mesh包含一个primitives数组对象
    • 一个primitives可包含一个attributes对象
    • attributes对象可包含以下属性:POSITION, NORMAL, TANGENT, TEXCOORD_0, TEXCOORD_1, COLOR_0, JOINTS_0, and WEIGHTS_0
    • mesh可以用node.mesh属性进行实例化。相同的mesh可以被多个node引用,只是变换矩阵不同而已。如:
    {
     "nodes": [
     {
     "mesh": 11
     },
     {
     "mesh": 11,
     "translation": [
     -20,
     -1,
     0
     ] 
     }
     ]
    }

    纹理(Texture Data)

    Texture 可被定义在textures, images, samplers三种不同的对象中

    材质(Materials)

    相机(Cameras)

    Camera定义从视图(view)坐标转换到剪辑(clip)坐标的投影矩阵。

    相机(Cameras)保存在cameras数组对象中。

    每个camera有一个type属性,代表投射类型,其值为perspective 或 orthographic。

    每个camera有一个perspective 或 orthographic属性对象。

    动画(Animations)

    glTF通过节点(node)变换的关键帧动画支持关节(articulated)动画和蒙皮(skinned)动画。关键帧数据存储在缓冲区(buffers)中,并使用访问器在动画中引用。gltf2.0也以类似的方式支持实例化变形目标(Morph Targets)的动画。

    所有动画都存储在”animations”数组中。动画定义为一组通道(channels)和一组采样器(samplers),这些采样器使用关键帧数据和插值(interpolation)方法(采样器属性)指定访问器。

    Specifying Extensions

    glTF定义了一种扩展机制,允许用新功能扩展基本格式。任何glTF对象都可以具有可选的extensions属性。如下例所示:

    {
     "material": [
     {
     "extensions": {
     "KHR_materials_common": {
     "technique": "LAMBERT"
     }
     }
     }
     ]
    }

    glTF中使用的所有扩展必须列在顶级extensionsUsed数组对象中,例如

    {
     "extensionsUsed": [
     "KHR_materials_common",
     "VENDOR_physics"
     ]
    }

    加载或呈现资产所需的所有glTF扩展必须列在顶级扩展所需的数组中,例如

    {
     "extensionsRequired": [
     "WEB3D_quantized_attributes"
     ]
    }

    extensionsRequired是extensionsUsed的一个子集。extensionsRequired中的所有值也必须存在于extensionsUsed中。

    GLB File Format Specification

    glTF提供了两个也可以一起使用的交付选项(delivery options):

    • gltf json指向外部二进制数据(几何体、关键帧、皮肤)和图像。
    • gltf json使用数据uri嵌入base64编码的二进制数据和图像。

    由于采用了base64编码,glTF需要单独的请求或额外的空间。Base64编码需要额外的处理来解码,这增加了文件大小(对于编码资源,增加了约33%)。虽然gzip减轻了文件大小的增加,但是解压和解码仍然增加了大量的加载时间。

    为了解决这个问题,引入了一种二进制格式的glTF。在二进制glTF中,glTF资产(JSON、.bin和images)可以存储在二进制blob中。

    后缀(File Extension)

    二进制glTF的后缀为glb。

    MIME Type

    二进制glTF的MIME类型为model/gltf-binary

    Binary glTF Layout

    • 二进制glTF为小端存储
    • 文件前12字节为Header,包含:magic、version、length
    • Header后为chunk,每个chunk的结构为:chunkLength、chunkType、chunkData

    Properties Reference

    Objects

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » glTF 2.0 学习笔记

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    • 7879会员数(个)
    • 16034资源数(个)
    • 40本周更新(个)
    • 39125 今日更新(个)
    • 1139稳定运行(天)

    提供最优质的资源集合

    加入VIP
    开通VIP 享更多特权,建议使用 QQ 登录
    ×