我有一个gltf问题:在gltf中,一个顶点是否必须对应于一个顶点法线和一个顶点纹理uv坐标?如果我有一种源格式的模型,其中一个顶点可以对应三个顶点法线。如何将此类模型导出到glTF文件?
示例: 源格式模型中的一个多维数据集:8个顶点,24个顶点法线。 glTF文件中的一个多维数据集:是否需要编写24个顶点和24个顶点法线?
答案 0 :(得分:0)
是的,glTF导出器/编写器必须在出现不连续的UV或法线的任何位置“分割”顶点。
glTF设计为可用于GPU的交付格式,最后一英里格式,而不是艺术家互换格式。结果,它的内部数据结构与顶点属性传递给GPU的方式几乎是1:1匹配,例如,具有vec3
位置属性,vec3
普通属性以及可能的在典型情况下,vec2
纹理坐标。因此,是的,正如将一组原始数据提供给GPU所期望的那样,每个顶点一个法线和一个UV。
部分优势在于,精心组织的glTF文件集合将包含二进制有效载荷,可以将其设置为(例如)移动设备,这些移动设备随后可以将二进制数据的整个部分直接传输到GPU内存无需进一步处理。例如,WebGL框架在接收文件后不必进行大量顶点处理,它们只需加载并渲染即可。负担明确地由出口商和作家承担,而不是由读者和装载者承担。
glTF Tutorial中很好地阐明了有关该结构的更多详细信息。尤其是Buffers, Buffer Views, and Accessors的部分介绍了二进制二进制斑点中顶点数据的原始存储。通常,熟悉图形API的程序员可以将glTF accessor
视为单个顶点属性,而将bufferView
视为包含GPU内存的同一步幅(可能包含多个顶点属性(访问器)的块) interleaved。 buffer
本身只是glTF中所有二进制数据(bufferViews)的集合,没有任何步幅。