Я пытался использовать 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?
Ответы:
Инструмент AC # - ваш друг здесь: вы можете быстро написать что-нибудь, используя .NET System.Xml Framework, который перебирает входной файл, выделяет ненужные части и удаляет (или настраивает) их из документа перед тем, как записать его обратно. снова По сути, это то, что делает XSLT, но на практике я всегда находил, что проще написать код C # для описания преобразования, чем найти загадочный синтаксис XSLT, который делает то же самое.
Что вам нужно сделать, так это посмотреть на «плохие» случаи и определить, что у них общего. Например, если все диффузные методы, которые имеют текстуру, которая использует texcoord = "CHANNEL0", это легко найти. Вы просто перебираете все объекты, и для каждого объекта проверяете все его методы на наличие атрибута-нарушителя. Если вы не нашли его, добавьте узел в выходной документ и продолжайте. Если вы не распознаете узел, добавьте его в вывод и продолжайте. Если вы найдете его, не пытайтесь добавить его в выходной документ, и он будет эффективно удален.
Однако определить дубликаты полигонов немного сложнее, поскольку вам придется анализировать каждую пару полигонов на предмет эквивалентности. Было бы намного проще, если бы вы могли выбрать правило, такое как «Меня не интересуют плоские цветные многоугольники, только текстурированные многоугольники», тогда вы можете просто отказаться от соответствующих многоугольников.
Однако мне кажется очень странным, что на самом деле вы получаете дубликаты; дублирование геометрии - это большое нет-нет по очевидным причинам, поэтому я удивлен, что FBX сделает это. Я только когда-либо использовал Collada с Maya / Max, поэтому не мог поручиться за то, что производит FBX. Но я хотел бы спросить, действительно ли вы вдвойне уверены, что в файле FBX действительно нет дублирующейся геометрии?
источник
Найти или написать другой экспортер или, возможно, (поскольку файлы Collada являются просто XML) использовать [XSLT] [1] для преобразования ненужных данных в более обобщенную форму?
источник