【问题标题】:How do I load roughness/metallic map with Assimp using gltf format?如何使用 gltf 格式通过 Assimp 加载粗糙度/金属贴图?
【发布时间】:2019-06-04 15:00:40
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: assimp gltf shading


    【解决方案1】:

    从 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);
    

    【讨论】:

      【解决方案2】:

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

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

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

      法线是 aiTextureType_NORMALS

      等等……

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你知道它是什么纹理吗?反照率?还是粗糙度/金属?
        猜你喜欢
        • 2020-07-23
        • 1970-01-01
        • 2020-11-30
        • 2020-07-12
        • 1970-01-01
        • 2020-03-05
        • 1970-01-01
        • 2019-01-27
        • 2018-05-10
        相关资源
        最近更新 更多