Быстрый и эффективный способ переноса из объекта flt с текстурами rgb / rgba в fbx с текстурами jpg / png

У меня есть несколько действительно больших объектных файлов в формате flt. Эти объекты имеют все свои текстуры в файлах rgb и rgba. Я использовал 3DS Max для преобразования из flt в fbx, но все текстуры по-прежнему в формате rgb / rgba. Unity, похоже, не принимает эти файлы изображений. Для одного из них я преобразовал все изображения с помощью image magik, а затем в Unity добавил каждую соответствующую текстуру к нужному материалу. Это было болезненно и отнимало очень много времени. Мало того, это применимо только к одному проекту Unity, поэтому, если я захочу включить его в любой другой проект или программное обеспечение, мне придется сделать это снова. У этой одной модели было несколько сотен текстур, как и у других, которые у меня есть.

Есть ли способ легко преобразовать объект FLT с файлами текстур RGB / RGBA в объект FBX с файлами текстур JPG / PNG? Я могу легко преобразовать все файлы rgb в jpg и файлы rgba в png (если это имеет значение). У меня есть 3DS Max и Maya, которыми я могу пользоваться.


person kingcobra1986    schedule 05.09.2017    source источник


Ответы (1)


Нет простого одноразового способа сделать это - в наши дни ни FLT, ни RGB не являются распространенными форматами файлов.

Вероятно, лучшим решением для кода является массовое преобразование всех изображений (изменение их расширений), а затем запись AssetPostprocesor в Unity, который соответствует, находит новые файлы .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, который будет иметь правильные ссылки на файлы.

В зависимости от того, как структурированы исходные файлы, существует множество переменных, но это общее представление о том, как с этим можно справиться.

person theodox    schedule 07.09.2017