我尝试加载一个以 gltf 格式存储的场景。它包含了金属度和粗糙度贴图(非嵌入式)。现在,我想使用 Assimp 加载具有指定贴图的模型。我使用 GetTexture() 检索贴图,但是 aiTextureType 没有粗糙度/金属度的成员。
因此问题来了: 我该如何导入它们?由于 Assimp 支持 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
等等...
(非PBR特定内容似乎具有相同的命名)
那么获取 aiTextureType_UNKNOWN
(或最有可能的是 AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLICROUGHNESS_TEXTURE
)是没有更好的选择了,因为在gltf中金属和粗糙度纹理都在相同的材质属性 metallicRoughnessTexture
中指定。就像这样:
"images": [
{
"uri": "textures/DefaultMaterial_metallicRoughness.png"
},
{
"uri": "textures/DefaultMaterial_baseColor.jpeg"
},
{
"uri": "textures/DefaultMaterial_normal.png"
}
],
"materials": [
{
"doubleSided": true,
"emissiveFactor": [
0,
0,
0
],
"name": "DefaultMaterial",
"normalTexture": {
"index": 2,
"scale": 1,
"texCoord": 0
},
"pbrMetallicRoughness": {
"baseColorFactor": [
1,
1,
1,
1
],
"baseColorTexture": {
"index": 1,
"texCoord": 0
},
"metallicFactor": 1,
"metallicRoughnessTexture": {
"index": 0,
"texCoord": 0
},
"roughnessFactor": 0.86756859760000005
}
}
],
我尝试了:
material->GetTexture(AI_MATKEY_METALLIC_TEXTURE, &fileMetallic);
material->GetTexture(AI_MATKEY_ROUGHNESS_TEXTURE, &fileRoughness);
使用Assimp 5.2.2,但它无法处理我的glTF测试文件。