首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Assimp FBX加载器和PBR纹理

Assimp FBX加载器和PBR纹理
EN

Stack Overflow用户
提问于 2021-08-22 10:33:24
回答 1查看 457关注 0票数 0

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

我目前正在使用它与glTF/glb文件,它完美地加载我的PBR纹理。我通过"assimp/pbrmaterial.h“头文件加载PBR纹理,但这个文件只定义了glTF宏。

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

致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 10:26:48

我不认为它可以。glTF 2.0使用单一纹理,其中包含:蓝色通道上的金属,绿色通道上的粗糙度。根据我自己使用Blender v2.93.3 (最新版本)的测试,如果你使用它的着色器编辑器将单个纹理分割成单独的RGB通道,FBX将不会与任何路径一起保存。即使您将FBX导入回搅拌器,它也只会应用基础颜色和法线贴图,而不会应用其他任何内容。所以我认为你也不能期望Assimp (v5.0.1)使用它…但这可能只是Blender中的一个bug,我不确定。因为似乎如果金属和粗糙度是单独的纹理,Blender可以正确地将FBX重新导入。这是一个相当大的疏忽,你不能导出(作为FBX)使用多通道纹理的模型。几乎所有的PBR工作流程都涉及将它们合并到单个纹理中,以减少纹理查找。

我不知道。看起来glTF 2.0是一个更好的格式。它配备了图形处理器友好的二进制文件(相比于像Wavefront OBJ这样非常慢的东西),如果你在导出时选择"glTF Separate“格式,你甚至可以拥有单独的纹理。你会自动得到一个金属和粗糙度都有的PNG文件,就像我之前说的:

如果你真的想支持FBX文件(我知道我这样做了;它是一种流行的格式),你可以做的是,让它正确地识别和加载基础颜色和法线贴图,但然后你必须在渲染循环开始之前手动加载"PBR“纹理,然后手动绑定纹理并在绘制之前将其作为统一的碎片着色器发送到碎片着色器。我对此进行了测试,它可以正常工作。

代码语言:javascript
复制
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个留给你,手动处理,对于每个…单身..。模型..。只是..。不是吧。如果这不是一个“恰当”的答案,我很抱歉。对于过去几年所有AAA游戏中普遍使用的PBR支持,我真的很失望。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68880487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档