Assimp FBX 加载器和 PBR 纹理

Assimp FBX loader and PBR textures

我想知道 assimp FBX 加载器是否支持 PBR 材质。

我目前将它与 glTF/glb 文件一起使用,它完美地加载了我的 PBR 纹理。 我正在通过“assimp/pbrmaterial.h”头文件加载 PBR 纹理,但该文件仅定义了 glTF 宏。

在 assimp 中使用 FBX 文件格式时如何加载 PBR 纹理?

此致。

我觉得不行。 glTF 2.0 使用单一纹理,其中包含:蓝色通道上的金属色,绿色通道上的粗糙度。根据我自己使用 Blender v2.93.3(目前最新的)进行的测试,如果您使用其着色器编辑器将单个纹理拆分为单独的 RGB 通道,FBX 将不会保存任何路径。即使您将 FBX 导入回 Blender,它也只会应用基础颜色和法线贴图,没有其他任何东西。所以我认为您也不能指望 Assimp (v5.0.1) 可以使用它……但这可能只是 Blender 中的一个错误,我不确定。因为看起来如果金属和粗糙度是单独的纹理,Blender 可以正确地将 FBX 导入回来。您无法导出(作为 FBX)使用多通道纹理的模型,这是一个很大的疏忽。几乎所有 PBR 工作流程都涉及将它们合并到单个纹理中,以减少纹理查找。

我不知道...似乎 glTF 2.0 是一种更好的格式。它带有一个 GPU 友好的二进制文件(与非常慢的 Wavefront OBJ 之类的东西相比),如果您在导出时选择“glTF Separate”格式,您甚至可以单独拥有纹理。就像我之前说的那样,您会自动获得具有金属和粗糙度的合并 PNG:

如果您真的想要支持 FBX 文件(我知道我支持;这是一种流行的格式),您可以做的是让它正确识别并加载基色和法线贴图,但是您有在渲染循环开始之前在某处手动加载“PBR”纹理,然后在绘制之前手动绑定纹理并将其作为制服发送到片段着色器。我测试了这个并且它有效。

glActiveTexture(GL_TEXTURE2); // Texture unit 2
glBindTexture(GL_TEXTURE_2D, *pMyMetRoughTexture);
pShader->SetInt("uMaterial.MetallicRoughnessTexture", 2); // Tell the sampler2D from the fragment shader to use texture unit 2
pMyModel->Draw(pShader);

但是有 2/3 的纹理自动加载和 1 留给你,手动处理,对于每个......单个......模型......只是......bleh。如果这不是一个“正确”的答案,我很抱歉。我对缺乏 PBR 支持感到非常失望,因为在我认为过去几年的所有 AAA 游戏中无处不在的东西。