Как исправить плохую колладу производства FBX?

10

Я пытался использовать FBX SDK (2011.3.1) для загрузки файлов FBX и сохранения их в виде файлов Collada, чтобы иметь возможность импортировать файлы FBX в Panda3D. К сожалению, полученные файлы Collada не могут быть использованы по нескольким причинам, среди которых:

  • Там майя специфическая дополнительная техника

размытый

<diffuse>
    <texture texture="Map__2-image" texcoord="CHANNEL0">
        <extra>
            <technique profile="MAYA">
                <wrapU sid="wrapU0">TRUE</wrapU>
                <wrapV sid="wrapV0">TRUE</wrapV>
                <blend_mode>ADD</blend_mode>
            </technique>
        </extra>
    </texture>
</diffuse>
  • Он назначает имя канала texcoord, на которое нет ссылок нигде в файле (в предыдущем примере кода ни одна геометрия не использовала "CHANNEL0" ...)

  • Каждый полигон экспортируется дважды, первый раз с основным материалом (только диффузный цвет, зеркальный цвет и т. Д.), А второй раз с текстурированным материалом -> это удваивает количество полигонов каждой модели без какой-либо веской причины

В любом случае, полученный файл Collada не может быть правильно открыт ни с помощью OpenCOLLADA, ни с помощью «dae2egg» Panda3D.

У кого-нибудь есть опыт, как «починить» это и сделать его понятным для обычных и известных импортеров Collada, таких как OpenCOLLADA?

Дэвид
источник
3
Это большая проблема, которую я обнаружил в Collada: на самом деле она не очень полезна для переноса данных между произвольными инструментами, которые требуют ее поддержки, потому что это слишком обобщенный формат. Он может содержать данные практически любой схемы и при этом оставаться действительным, совместимым со стандартом файлом Collada, который не может обработать конкретный импортер, который вы используете. Это в некоторой степени более полезно в качестве формата обмена данными, когда у вас есть больший контроль над импортером / экспортером или когда инструменты производят Collada, который вам нравится.
1
@Josh: по крайней мере, он читается человеком, в отличие от закрытых двоичных форматов. По крайней мере, с Collada вы можете создавать инструменты и сценарии, которые могут переводить из одного набора данных в другой. Взаимодействие по крайней мере возможно , даже если это требует дополнительной работы.
Никол Болас

Ответы:

2

Инструмент AC # - ваш друг здесь: вы можете быстро написать что-нибудь, используя .NET System.Xml Framework, который перебирает входной файл, выделяет ненужные части и удаляет (или настраивает) их из документа перед тем, как записать его обратно. снова По сути, это то, что делает XSLT, но на практике я всегда находил, что проще написать код C # для описания преобразования, чем найти загадочный синтаксис XSLT, который делает то же самое.

Что вам нужно сделать, так это посмотреть на «плохие» случаи и определить, что у них общего. Например, если все диффузные методы, которые имеют текстуру, которая использует texcoord = "CHANNEL0", это легко найти. Вы просто перебираете все объекты, и для каждого объекта проверяете все его методы на наличие атрибута-нарушителя. Если вы не нашли его, добавьте узел в выходной документ и продолжайте. Если вы не распознаете узел, добавьте его в вывод и продолжайте. Если вы найдете его, не пытайтесь добавить его в выходной документ, и он будет эффективно удален.

Однако определить дубликаты полигонов немного сложнее, поскольку вам придется анализировать каждую пару полигонов на предмет эквивалентности. Было бы намного проще, если бы вы могли выбрать правило, такое как «Меня не интересуют плоские цветные многоугольники, только текстурированные многоугольники», тогда вы можете просто отказаться от соответствующих многоугольников.

Однако мне кажется очень странным, что на самом деле вы получаете дубликаты; дублирование геометрии - это большое нет-нет по очевидным причинам, поэтому я удивлен, что FBX сделает это. Я только когда-либо использовал Collada с Maya / Max, поэтому не мог поручиться за то, что производит FBX. Но я хотел бы спросить, действительно ли вы вдвойне уверены, что в файле FBX действительно нет дублирующейся геометрии?

MrCranky
источник
Спасибо за Ваш ответ. Конечно, я смог исправить это в своем импортере, я просто искал кого-то, кто уже сталкивался и исправлял точно такую ​​же проблему, чтобы я мог иметь стандартное исправление и, возможно, применить исправления для проблем, которые я еще не обнаружил.
Дэвид
0

Найти или написать другой экспортер или, возможно, (поскольку файлы Collada являются просто XML) использовать [XSLT] [1] для преобразования ненужных данных в более обобщенную форму?


источник
Это точно, что я делаю, но я искал кого-то, кто уже сделал это (не изобретайте велосипед, верно?)
Дэвид