Bagaimana cara memperbaiki Collada buruk yang diproduksi oleh FBX?

10

Saya mencoba menggunakan FBX SDK (2011.3.1) untuk memuat file FBX dan menyimpannya sebagai file Collada agar dapat mengimpor file FBX di Panda3D. Sayangnya file Collada yang dihasilkan tidak dapat digunakan karena beberapa alasan, di antaranya:

  • Ada teknik tambahan khusus Maya

membaur

<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>
  • Itu menetapkan nama saluran texcoord yang tidak direferensikan di tempat lain dalam file (dalam sampel kode sebelumnya, tidak ada geometri menggunakan "CHANNEL0" ...)

  • Setiap poligon diekspor dua kali, pertama kali dengan bahan dasar (hanya warna difus, warna specular, dll.) Dan kedua kali dengan bahan bertekstur -> ini menggandakan jumlah poligon dari masing-masing model tanpa alasan yang berharga

Bagaimanapun, file Collada yang dihasilkan tidak dapat dibuka dengan benar dengan OpenCOLLADA atau "dae2egg" dari Panda3D.

Adakah yang punya pengalaman tentang cara "memperbaikinya" dan membuatnya dimengerti oleh importir Collada yang umum dan bereputasi baik seperti OpenCOLLADA?

David
sumber
3
Ini adalah masalah besar yang saya temukan pada Collada: sebenarnya bukan hal yang sangat berguna untuk mentransport data antara alat yang sewenang-wenang yang mengklaim dukungan untuk Collada, karena itu format yang terlalu umum. Ini dapat berisi data dari hampir semua skema dan masih berupa file Collada yang valid dan sesuai standar yang tidak dapat ditangani oleh importir spesifik yang Anda gunakan. Ini sedikit lebih berguna sebagai format pertukaran data ketika Anda memiliki lebih banyak kendali atas importir / eksportir, atau alat yang kebetulan menghasilkan Collada yang Anda sukai.
1
@Josh: Setidaknya itu bisa dibaca manusia, tidak seperti format biner tertutup. Setidaknya dengan Collada, Anda dapat membuat alat dan skrip yang dapat menerjemahkan dari satu set data ke yang lain. Interop setidaknya mungkin , bahkan jika itu membutuhkan kerja ekstra.
Nicol Bolas

Jawaban:

2

Alat AC # adalah teman Anda di sini - Anda dapat dengan cepat menulis sesuatu menggunakan kerangka kerja .NET System.Xml yang beralih ke file input, melihat bagian-bagian yang tidak Anda sukai, dan menghilangkan (atau mengubah) mereka dari dokumen sebelum menulis kembali keluar lagi. Secara efektif itulah yang dilakukan XSLT, tetapi dalam praktiknya saya selalu merasa lebih mudah untuk menulis kode C # untuk menggambarkan transformasi daripada menemukan sintaks XSLT samar untuk melakukan hal yang sama.

Yang perlu Anda lakukan adalah melihat kasus-kasus 'buruk' dan menemukan kesamaannya. Misalnya jika semua teknik difus yang memiliki tekstur yang menggunakan texcoord = "CHANNEL0", itu mudah ditemukan. Anda hanya mengulang semua objek, dan untuk setiap objek, periksa semua tekniknya untuk atribut yang menyinggung. Jika Anda tidak menemukannya, tambahkan node ke dokumen keluaran dan lanjutkan. Jika Anda tidak mengenali node, tambahkan ke output dan lanjutkan. Jika Anda menemukannya, jangan repot-repot menambahkannya ke dokumen keluaran dan itu akan dihapus secara efektif.

Melihat duplikat poligon agak rumit, karena Anda harus menganalisis setiap pasangan poligon untuk kesetaraan. Akan jauh lebih sederhana jika Anda bisa memutuskan aturan, seperti "Saya tidak peduli tentang poligon berwarna datar, hanya poligon bertekstur", maka Anda bisa membuang poligon yang sesuai.

Namun tampaknya sangat aneh bagi saya bahwa Anda benar-benar mendapatkan duplikat; duplikasi geometri adalah besar tidak-tidak karena alasan yang jelas, jadi saya terkejut FBX akan melakukannya. Saya hanya pernah menggunakan Collada dengan Maya / Max, jadi saya tidak bisa menjamin apa yang FBX hasilkan. Tapi saya akan bertanya, apakah Anda sangat yakin bahwa tidak ada duplikat geometri di file FBX?

MrCranky
sumber
Terima kasih atas jawaban anda. Tentu saja saya bisa memperbaikinya di importir saya sendiri, saya hanya mencari seseorang yang sudah mengalami dan memperbaiki masalah yang sama persis sehingga saya bisa memiliki perbaikan standar dan mungkin menerapkan perbaikan untuk masalah yang belum saya temukan.
David
0

Temukan atau tulis eksportir yang berbeda, atau mungkin (karena file Collada hanya XML) menggunakan [XSLT] [1] untuk mengubah data yang tidak diinginkan menjauh atau ke bentuk yang lebih umum?


sumber
Itu pasti apa yang saya lakukan, tetapi saya sedang mencari seseorang yang sudah melakukan itu (jangan menemukan kembali kemudi, kan?)
David