快速有效地从具有 rgb/rgba 纹理的 flt 对象传输到具有 jpg/png 纹理的 fbx
Posted
技术标签:
【中文标题】快速有效地从具有 rgb/rgba 纹理的 flt 对象传输到具有 jpg/png 纹理的 fbx【英文标题】:Quick and efficient way to transfer from an flt object with rgb/rgba textures to fbx with jpg/png textures 【发布时间】:2018-02-14 00:44:21 【问题描述】:我有几个非常大的 flt 格式的目标文件。这些对象的所有纹理都在 rgb 和 rgba 文件中。我使用 3DS Max 将 flt 转换为 fbx,但所有纹理仍然是 rgb/rgba 格式。 Unity 似乎不接受这些图像文件。对于其中一个,我使用 image magik 转换了所有图像,然后在 Unity 中将每个相应的纹理添加到正确的材质中。这是一个痛苦和非常耗时的。不仅如此,它只适用于一个 Unity 项目,所以如果我想将它拉入任何其他项目或软件,我将不得不再做一次。那个模型有几百个纹理,我的其他模型也有。
有没有办法将带有 RGB/RGBA 纹理文件的 FLT 对象轻松转换为带有 JPG/PNG 纹理文件的 FBX 对象?我可以轻松地将所有 rgb 文件转换为 jpg 并将 rgba 文件转换为 png(如果这很重要)。我有可以使用的 3DS Max 和 Maya。
【问题讨论】:
【参考方案1】:没有一种简单的一次性方法可以做到这一点——FLT 和 RGB 目前都不是常见的文件格式。
可能最好的代码解决方案是批量转换所有图像(更改它们的扩展名),然后在 Unity 中编写 AssetPostprocesor 匹配找到与资产引用的材料对应的新 .tga 或 .jpg 文件并交换它们。这将节省 Unity 端的手工工作。如果这将成为您经常做的事情,那么这项工作是值得的。
您可以在 Maya 中进行类似的操作:将 fbx 文件导入到空白的 Maya 场景中,查找文件纹理节点,然后将 rgb/rgba 扩展名替换为 tga 或 jpg 等。看起来像这样:
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,它将具有正确的文件引用。
有很多变数,具体取决于源文件的结构,但这是解决问题的一般思路。
【讨论】:
以上是关于快速有效地从具有 rgb/rgba 纹理的 flt 对象传输到具有 jpg/png 纹理的 fbx的主要内容,如果未能解决你的问题,请参考以下文章