我尝试加载一个 gltf 格式的场景。它具有金属和粗糙纹理(未嵌入)。现在我想使用 Assimp 加载具有指定纹理的模型。我使用 GetTexture() 检索纹理,但 aiTextureType 没有粗糙度/金属的成员。
所以问题是:我如何导入它们?由于 Assimp 支持 gltf,它也必须以某种方式支持基于物理的材质贴图。
谢谢
自 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);
完整列表在这里: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);
组合的粗糙度/金属纹理是 aiTextureType_UNKNOWN。
你可以在这里看到这个:https ://github.com/assimp/assimp/blob/master/include/assimp/pbrmaterial.h#L57
反照率纹理(或基色)是 aiTextureType_DIFFUSE
法线是 aiTextureType_NORMALS
ETC...
(非 pbr 特定的东西似乎是相同的命名)
因此,如果有人遇到同样的问题:GetTexture(aiTextureType_UNKNOWN) 返回 pbr 纹理的路径。