LibGDX导出fbx文件的图像纹理无法显示,显示为黑色。

5

我不太确定问题出现在哪里。在Blender中,我的模型看起来像这样:

render view of model

我已经将所有内容进行了UV映射等处理——蓝色高亮边缘来自于透明的.png纹理。以下是节点编辑器:

node editor of material

现在根据LibGDX的推荐,当我导出为.fbx格式时,我使用以下设置:

fbx export settings

但是当我通过fbx-convert运行它并生成我的g3dj文件时,材质会显示如下:
"materials": [
    {
        "id": "blue_wireframe_glow", 
        "ambient": [ 0.200000,  0.200000,  0.200000], 
        "diffuse": [ 0.800000,  0.800000,  0.800000], 
        "emissive": [ 0.000000,  0.000000,  0.000000], 
        "opacity":  0.000000,
        "specular": [ 0.200000,  0.200000,  0.200000], 
        "shininess":  20.000000
    }
], 

即使将不透明度更改为1.0,也看不到任何图像纹理。我还需要做些什么才能让图像纹理出现在g3dj文件中吗?在Blender中,我是附加错误的还是怎样?如果有影响的话,我使用的是Blender Cycles。我还将图像文件放在与我的项目中的g3dj文件相同的文件夹中。以下是我用来加载它的代码:

modelBatch = new ModelBatch();
modelLoader = new G3dModelLoader(new JsonReader());
heatExchangerModel = modelLoader.loadModel(Gdx.files.internal("models/heat_exchanger.g3dj"));
modelInstance = new ModelInstance(heatExchangerModel);

当我在我的桌面Java应用程序中查看它时,即使我在g3dj文件中手动将不透明度设置为1.0,它仍然只出现为黑色模型没有纹理。不确定我哪里错了 - 有任何想法吗?
编辑:我读了更多的内容,发现Blender Cycles无法将其材质导出到FBX(不确定是否正确?或者至少只能很基本的材质),并尝试使用Blender Render进行,成功使纹理加载,但是与Blender渲染出来的模型还是有些不同。
能否指点一下如何在libGDX中正确处理材质?我应该从头开始编写自己的材质吗?我觉得这样在Blender中完成所有工作,然后再导出可能不是我应该做的方式。
1个回答

2
酷炫的着色器shanling。
我建议你尝试以下两个方法。首先,从Blender中将FBX导出为ASCII格式,看看能否从中找到文件路径。我敢打赌,在fbx->g3dj过程中,它可能已经丢失了。
其次,我认为使用节点构建着色器可能会影响FBX导出器。Blender很棒,但它仍然是开源的,并且存在不完美之处。(其他软件也是如此,但没有一家公司会承认!)请尝试在着色器构建窗格中构建相同的着色器,看看是否有所帮助。
否则,你只能在libGDX中重新构建着色器。可以用Java编写,或者我敢打赌你可以修改你的g3dj文件,将文件路径作为辐射贴图包含进去。
例如:这是我的一个g3dj文件的一部分,我在其中添加了一个法线贴图。将类型更改为“EMISSIVE”或“EMIT”,我认为你之后就可以成功了。
"materials": [
            {
                "id": "background", 
                "ambient": [ 0.000000,  0.000000,  0.000000], 
                "diffuse": [ 0.800000,  0.800000,  0.800000], 
                "emissive": [ 0.800000,  0.800000,  0.800000], 
                "opacity":  1.000000, 
                "reflection": [ 0.100000,  0.100000,  0.100000],
                "shininess":  65.098038, 
                "textures": [
                    {
                        "id": "Texture.005", 
                        "filename": "carbonClr.png", 
                        "type": "DIFFUSE"
                    },
                    {
                        "id": "Texture.006", 
                        "filename": "carbonNormal.png", 
                        "type": "NORMAL"
                    }
                ]
            }
        ]       

希望这可以帮到您!

感谢您的回复,Sean。经过一番摆弄后,使用旧的渲染引擎和菜单面板进行导出工作。希望他们能尽快支持Cycles节点编辑器的导出! :-( 感谢您的帮助! - shan
如何将g3dj文件转换为g3db文件。Libgdx似乎只能加载g3db文件。 - Duna
@Lunatikul 我不知道有什么方法可以进行这种转换。但是如果你有原始文件(OBJ或FBX),你可以使用fbx-conv将其转换为g3dj或gd3b格式。 - Thomas
FBX和OBJ文件中不包含纹理链接,只有网格。我可以手动将纹理链接添加到g3dj文件中。 - Duna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接