0

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

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

使用带有 assimp 的 FBX 文件格式时如何加载 PBR 纹理?

问候。

4

1 回答 1

1

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

我不知道......似乎 glTF 2.0 是一种更好的格式。它带有一个对 GPU 友好的二进制文件(与非常慢的 Wavefront OBJ 之类的东西相比),如果您在导出时选择“glTF 分离”格式,您甚至可以单独拥有纹理。就像我之前说的那样,您会自动获得具有金属和粗糙度的合并 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 游戏中如此普遍使用的东西。

于 2021-08-26T10:26:47.580 回答