5

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

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

谢谢

4

3 回答 3

6

自 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);
于 2019-05-06T23:14:19.450 回答
2

组合的粗糙度/金属纹理是 aiTextureType_UNKNOWN。

你可以在这里看到这个:https ://github.com/assimp/assimp/blob/master/include/assimp/pbrmaterial.h#L57

反照率纹理(或基色)是 aiTextureType_DIFFUSE

法线是 aiTextureType_NORMALS

ETC...

(非 pbr 特定的东西似乎是相同的命名)

于 2021-07-14T06:17:01.107 回答
2

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

于 2019-01-10T14:44:39.003 回答