顶点法线,纹理uv坐标

Vertex normal, texture uv coordinate

我有一个 gltf 问题:在 gltf 中,一个顶点是否必须对应一个顶点法线和一个顶点纹理 uv 坐标?如果我有一种源格式的模型,其中一个顶点可以对应三个顶点法线。如何将此类模型导出到 glTF 文件?

示例: 源格式模型中的立方体:8 个顶点,24 个顶点法线。 glTF 文件中的立方体:我需要写 24 个顶点和 24 个顶点法线吗?

是的,glTF exporters/writers 必须 "split" 出现不连续 UV 或法线的任何地方的顶点。

glTF 旨在成为 GPU 就绪交付格式,即最后一英里格式,而不是艺术家交换格式。因此,它的内部数据结构几乎 1:1 匹配顶点属性传递给 GPU 的方式,例如 vec3 位置属性,vec3 法线属性,以及在典型情况下可能是 vec2 纹理坐标。所以是的,每个顶点一个法线和一个 UV,正如预期的那样,一组原始数据被提供给 GPU。

部分优势在于精心策划的 glTF 文件集合将包含可以设置为(例如)移动设备的二进制有效负载,然后这些移动设备可以将二进制数据的整个部分直接传输到GPU 内存未经进一步处理。例如,WebGL 框架在收到文件后不必进行大量顶点处理,它们只需加载文件并进行渲染。负担明确放在导出器和写入器上,而不是读取器和加载器。

有关结构的更多详细信息在 glTF Tutorial. In particular the section on Buffers, Buffer Views, and Accessors covers the raw storage of vertex data in binary blobs. Generally, a programmer familiar with graphics APIs could think of a glTF accessor as an individual vertex attribute, and a bufferView as a block of GPU memory containing multiple vertex attributes (accessors) at the same stride, possibly interleaved 中详细说明。 buffer 本身只是 glTF 中所有二进制数据 (bufferViews) 的一块,没有任何跨度。