Как исправить плохой Collada от FBX?

Я попытался использовать 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?

10 голосов | спросил David 13 PMpWed, 13 Apr 2011 19:21:00 +040021Wednesday 2011, 19:21:00

2 ответа


2

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

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

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

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

ответил MrCranky 1 PM00000010000004531 2011, 13:40:45
0

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

ответил Josh 29 J0000006Europe/Moscow 2011, 19:16:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132