Come riparare Bad Collada prodotto da FBX?


10

Ho provato a utilizzare l'SDK FBX (2011.3.1) per caricare i file FBX e salvarli come file Collada per poter importare i file FBX in Panda3D. Purtroppo i file Collada risultanti non sono utilizzabili per diversi motivi, tra cui:

  • C'è una tecnica extra specifica per Maya

diffondere

<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>
  • Assegna un nome di canale texcoord a cui non si fa riferimento in nessun altro punto del file (nell'esempio di codice precedente, nessuna geometria utilizza "CHANNEL0" ...)

  • Ogni poligono viene esportato due volte, una prima volta con un materiale di base (solo colore diffuso, colore speculare, ecc.) E una seconda volta con un materiale strutturato -> questo raddoppia il numero di poligoni di ciascun modello senza alcun motivo valido

Ad ogni modo, il file Collada risultante non può essere aperto correttamente con OpenCOLLADA o "dae2egg" di Panda3D.

Qualcuno ha qualche esperienza su come "risolverlo" e renderlo comprensibile da importatori Collada comuni e rinomati come OpenCOLLADA?


3
Questo è un grosso problema che ho riscontrato con Collada: in realtà non è molto utile per trasportare dati tra strumenti arbitrari che ne richiedono il supporto, perché è un formato così sovradimensionato. Può contenere dati di quasi tutti gli schemi ed essere comunque un file Collada valido e conforme agli standard che l'importatore specifico che stai utilizzando non è in grado di gestire. È marginalmente più utile come formato di interscambio di dati quando si ha un maggiore controllo sull'importatore / esportatore o quando si verificano gli strumenti per produrre Collada che ti piace.

1
@Josh: almeno è leggibile dall'uomo, a differenza dei formati binari chiusi. Almeno con Collada, puoi creare strumenti e script in grado di tradurre da un set di dati a un altro. L'interoperabilità è almeno possibile , anche se richiede un lavoro extra.
Nicol Bolas,

Risposte:


2

Lo strumento AC # è il tuo amico qui: puoi scrivere rapidamente qualcosa usando il framework .NET System.Xml che scorre sul file di input, individua le parti che non ti piacciono e le elimina (o modifica) dal documento prima di riscriverlo di nuovo fuori. In effetti è quello che fa XSLT, ma in pratica ho sempre trovato più facile scrivere codice C # per descrivere la trasformazione piuttosto che trovare la sintassi XSLT criptica per fare la stessa cosa.

Quello che devi fare è guardare i casi "cattivi" e individuare ciò che hanno in comune. Ad esempio se tutte le tecniche diffuse che hanno una trama che utilizza texcoord = "CHANNEL0", è facile da trovare. Basta iterare tutti gli oggetti e, per ogni oggetto, controllare tutte le sue tecniche per l'attributo offensivo. Se non lo trovi, aggiungi il nodo a un documento di output e vai avanti. Se non riconosci il nodo, aggiungilo all'output e vai avanti. Se lo trovi, non preoccuparti di aggiungerlo al documento di output e verrà effettivamente eliminato.

Individuare poligoni duplicati è tuttavia un po 'più complicato, dal momento che dovresti analizzare ogni coppia di poligoni per equivalenza. Sarebbe molto più semplice se potessi decidere su una regola, come "Non mi interessano i poligoni colorati piatti, solo i poligoni strutturati", quindi puoi semplicemente scartare i poligoni appropriati.

Tuttavia mi sembra molto strano che tu stia effettivamente ottenendo duplicati; la duplicazione della geometria è un grande no-no per ovvie ragioni, quindi sono sorpreso che FBX lo farebbe. Ho mai usato Collada con Maya / Max, quindi non potevo garantire ciò che produce FBX. Ma ti chiedo, sei davvero doppiamente sicuro che non ci sia davvero una geometria duplicata nel file FBX?


Grazie per la tua risposta. Ovviamente sono stato in grado di risolverlo nel mio importatore, stavo solo cercando qualcuno che avesse già riscontrato e risolto lo stesso identico problema in modo da poter avere una correzione standard e forse applicare correzioni per problemi che non ho ancora scoperto.
David,

0

Trova o scrivi un altro esportatore o forse (dato che i file Collada sono solo XML) utilizzare [XSLT] [1] per trasformare i dati indesiderati in una forma più generalizzata?


Questo è certo quello che sto facendo, ma stavo cercando qualcuno che lo abbia già fatto (non reinventare la ruota, giusto?)
David
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.