Wie kann man eine von FBX produzierte schlechte Collada reparieren?

10

Ich habe versucht, mit dem FBX SDK (2011.3.1) FBX-Dateien zu laden und als Collada-Dateien zu speichern, um FBX-Dateien in Panda3D importieren zu können. Leider können die resultierenden Collada-Dateien aus mehreren Gründen nicht verwendet werden, darunter:

  • Es gibt eine Maya-spezifische Extra-Technik

diffus

<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>
  • Es weist einen Texcoord-Kanalnamen zu, auf den an keiner anderen Stelle in der Datei verwiesen wird (im vorherigen Codebeispiel verwendet keine Geometrie "CHANNEL0" ...).

  • Jedes Polygon wird zweimal exportiert, ein erstes Mal mit einem Grundmaterial (nur diffuse Farbe, Spiegelfarbe usw.) und ein zweites Mal mit einem strukturierten Material -> dies verdoppelt die Anzahl der Polygone jedes Modells ohne wertvollen Grund

Auf jeden Fall kann die resultierende Collada-Datei weder mit OpenCOLLADA noch mit "dae2egg" von Panda3D korrekt geöffnet werden.

Hat jemand Erfahrung damit, wie man es "repariert" und es für gängige und renommierte Collada-Importeure wie OpenCOLLADA verständlich macht?

David
quelle
3
Dies ist ein großes Problem, das ich bei Collada festgestellt habe: Es ist eigentlich nicht so nützlich für den Transport von Daten zwischen beliebigen Tools, die Unterstützung dafür beanspruchen, weil es ein so übergeneralisiertes Format ist. Es kann Daten nahezu aller Schemata enthalten und dennoch eine gültige, standardkonforme Collada-Datei sein, die der von Ihnen verwendete Importer nicht wirklich verarbeiten kann. Als Datenaustauschformat ist es geringfügig nützlicher, wenn Sie mehr Kontrolle über den Importeur / Exporteur haben oder die Tools zufällig Collada produzieren, das Ihnen gefällt.
1
@ Josh: Zumindest ist es im Gegensatz zu geschlossenen Binärformaten für Menschen lesbar. Zumindest mit Collada können Sie Tools und Skripte erstellen, die von einem Datensatz in einen anderen übersetzt werden können. Interop ist zumindest möglich , auch wenn es zusätzliche Arbeit erfordert.
Nicol Bolas

Antworten:

2

Das AC # -Tool ist hier Ihr Freund - Sie können schnell etwas mit dem .NET System.Xml-Framework schreiben, das die Eingabedatei durchläuft, Teile erkennt, die Ihnen nicht gefallen, und sie aus dem Dokument entfernt (oder optimiert), bevor Sie es zurückschreiben nochmal raus. Eigentlich ist es das, was XSLT tut, aber in der Praxis war es immer einfacher, C # -Code zu schreiben, um die Transformation zu beschreiben, als die kryptische XSLT-Syntax zu finden, um dasselbe zu tun.

Was Sie tun müssen, ist sich die "schlechten" Fälle anzusehen und herauszufinden, was sie gemeinsam haben. Wenn zum Beispiel alle diffusen Techniken eine Textur haben, die texcoord = "CHANNEL0" verwendet, ist das leicht zu finden. Sie iterieren einfach alle Objekte und überprüfen für jedes Objekt alle seine Techniken auf das fehlerhafte Attribut. Wenn Sie es nicht finden, fügen Sie den Knoten einem Ausgabedokument hinzu und fahren Sie fort. Wenn Sie den Knoten nicht erkennen, fügen Sie ihn der Ausgabe hinzu und fahren Sie fort. Wenn Sie es finden, müssen Sie es nicht zum Ausgabedokument hinzufügen, da es dann effektiv gelöscht wird.

Das Erkennen doppelter Polygone ist jedoch etwas schwieriger, da Sie jedes Polygonpaar auf Äquivalenz analysieren müssen. Wäre viel einfacher, wenn Sie sich für eine Regel entscheiden könnten, z. B. "Ich interessiere mich nicht für flache farbige Polygone, sondern nur für strukturierte Polygone", dann können Sie einfach die entsprechenden Polygone verwerfen.

Es scheint mir jedoch sehr seltsam, dass Sie tatsächlich Duplikate herausholen. Das Duplizieren von Geometrie ist aus offensichtlichen Gründen ein großes Nein-Nein, daher bin ich überrascht, dass FBX dies tun würde. Ich habe Collada bisher nur mit Maya / Max verwendet und konnte daher nicht dafür bürgen, was FBX produziert. Aber ich würde fragen, sind Sie sich doppelt sicher, dass die FBX-Datei wirklich keine doppelte Geometrie enthält?

MrCranky
quelle
Danke für deine Antwort. Natürlich konnte ich es in meinem eigenen Importer beheben. Ich suchte nur nach jemandem, der bereits auf genau dasselbe Problem gestoßen ist und es behoben hat, damit ich eine Standardkorrektur haben und möglicherweise Korrekturen für Probleme anwenden kann, die ich noch nicht entdeckt habe.
David
0

Suchen oder schreiben Sie einen anderen Exporter oder verwenden Sie (da Collada-Dateien nur XML sind) [XSLT] [1], um die unerwünschten Daten in eine allgemeinere Form umzuwandeln?


quelle
Das ist sicher, was ich tue, aber ich habe jemanden gesucht, der das bereits getan hat (das Rad nicht neu erfinden, oder?)
David