Як виправити поганий Collada, який виробляє 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, ні Panda3D "dae2egg".

У когось є досвід того, як це "виправити" та зробити його зрозумілим звичайним та відомим імпортерам Collada, таким як OpenCOLLADA?


3
Це велика проблема, яку я виявив у Collada: насправді це не так страшно корисно для транспортування даних між довільними інструментами, які вимагають їх підтримки, тому що це такий формат перегенералізованого типу. Він може містити дані майже будь-якої схеми і все ще бути дійсним, сумісним із стандартами файлом Collada, який конкретний імпортер, який ви використовуєте, насправді не може обробити. Це вкрай корисніше як формат обміну даними, коли у вас є більше контролю над імпортером / експортером або якщо інструменти виробляють Collada, який вам подобається.

1
@Josh: Принаймні, це читається людиною, на відміну від закритих бінарних форматів. Принаймні, за допомогою Collada ви можете створювати інструменти та сценарії, які можуть переводити з одного набору даних в інший. Інтероп принаймні можливий , навіть якщо він вимагає додаткової роботи.
Нікол Болас

Відповіді:


2

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

Що вам потрібно зробити, це подивитися на «погані» випадки та визначити, що у них спільного. Наприклад, якщо всі дифузні методи, які мають текстуру, яка використовує texcoord = "CHANNEL0", це легко знайти. Ви просто повторіть усі об'єкти, і для кожного об'єкта перевіряйте всі його прийоми на атрибут, що порушує. Якщо ви його не знайдете, додайте вузол у вихідний документ і рухайтеся далі. Якщо ви не розпізнаєте вузол, додайте його до виводу та рухайтеся далі. Якщо ви все-таки знайдете його, не намагайтеся додавати його у вихідний документ, і він фактично буде видалений.

Визначення дублікатів багатокутників трохи складніше, оскільки вам доведеться аналізувати кожну пару багатокутників на еквівалентність. Було б набагато простіше, якби ви могли визначитися з правилом, наприклад, "Мені не байдуже багатокутники плоских кольорів, лише текстуровані багатокутники", тоді ви можете просто відкинути відповідні багатокутники.

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


Дякую за вашу відповідь. Звичайно, я зміг це виправити у власного імпортера, я просто шукав когось, з яким вже стикався, і виправляв саме таку проблему, щоб я міг мати стандартне виправлення та, можливо, застосувати виправлення до проблем, яких я ще не виявив.
Девід

0

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


Це точно, що я роблю, але я шукав когось, хто вже це робив (не винаходити колесо, правда?)
Девід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.