如何使用 gltf 格式通过 Assimp 加载粗糙度/金属贴图?

DaO*_*ner 7 assimp shading gltf

我尝试加载 gltf 格式的场景。它具有金属和粗糙纹理(未嵌入)。现在我想使用 Assimp 加载具有指定纹理的模型。我使用 GetTexture() 检索纹理,但 aiTextureType 没有粗糙度/金属的成员。

所以问题是:我如何导入它们?由于 Assimp 支持 gltf,因此它也必须以某种方式支持基于物理的材质贴图。

谢谢

pez*_*ode 7

自 Assimp 5.1.0 起,通用 PBR 材质属性甚至适用于非 glTF 文件:

// for some formats (like glTF) metallic and roughness may be the same file
aiString fileBaseColor, fileMetallic, fileRoughness;
material->GetTexture(AI_MATKEY_BASE_COLOR_TEXTURE, &fileBaseColor);
material->GetTexture(AI_MATKEY_METALLIC_TEXTURE, &fileMetallic);
material->GetTexture(AI_MATKEY_ROUGHNESS_TEXTURE, &fileRoughness);
Run Code Online (Sandbox Code Playgroud)

完整列表位于: https: //github.com/assimp/assimp/blob/v5.1.4/include/assimp/material.h#L972


旧答案:(自 Assimp 5.1.0 起已弃用)

对于 GLTF PBR 材质,您可以使用中定义的材质键pbrmaterial.h

#include <assimp/pbrmaterial.h>

aiString fileBaseColor, fileMetallicRoughness;
material->GetTexture(AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_BASE_COLOR_TEXTURE, &fileBaseColor);
material->GetTexture(AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLICROUGHNESS_TEXTURE, &fileMetallicRoughness);
Run Code Online (Sandbox Code Playgroud)


DaO*_*ner 2

因此,如果有人遇到同样的问题:GetTexture(aiTextureType_UNKNOWN) 返回 pbr 纹理的路径。