2017-09-05 135 views
0

我有几个非常大的flt格式的对象文件。这些对象的所有纹理都在rgb和rgba文件中。我使用3DS Max将flt转换为fbx,但所有纹理仍然采用rgb/rgba格式。 Unity似乎不接受这些图像文件。对于其中的一个,我使用image magik转换所有图像,然后在Unity中将每个相应的纹理添加到正确的材质。这是一个痛苦,非常耗时。不仅如此,它只适用于一个Unity项目,所以如果我想将其应用到任何其他项目或软件中,我将不得不重做一次。那一个模型有几百个纹理,其他的我也有。从rgb/rgba纹理的flt对象转换为jpg/png纹理的fbx的快速高效的方法

有没有办法将带有RGB/RGBA纹理文件的FLT对象轻松转换为带有JPG/PNG纹理文件的FBX对象?我可以轻松地将所有的rgb文件转换为jpg和rgba文件到png(如果有的话)。我可以使用3DS Max和Maya。

回答

0

现在还没有一种简单的一次性方法 - FLT和RGB都不是常见的文件格式。

也许最好的代码解决方案是批量转换所有图像(改变它们的扩展名),然后在Unity中编写一个AssetPostprocesor,匹配找到与资源引用的材料相对应的新的.tga或.jpg文件,将它们交换。这将节省Unity结束时的手工工作。如果这将是你经常做的事情,那么这项工作是值得的。

你可以在Maya中做一些相当类似的事情:你可以将fbx文件导入空白的maya场景,查找文件纹理节点,并用tga或jpg或其他东西替换rgb/rgba扩展名。这看起来像这样:

def update_fbx(filname, source = 'rgb', target = 'tga'): 
    cmds.file(f=True, new=True) # clear the scene 
    cmds.FBXImport(f=filename) # import the fbx 

    #assuming you have materials with file nodes pointing at 
    # rgb extensions, replace with tga 
    for each_file_node in cmds.ls(type = 'file'): 
     oldname = cmds.getAttr(each_file_node + ".ftn") 
     newname = oldname.replace(source, target) 
     cmds.setAttr(each_file_node + ".ftn", newname) 

然后将场景重新导出为新的FBX,它将具有正确的文件引用。

有很多变量,这取决于源文件的结构,但这是您如何解决它的一般想法。