Comment réparer le mauvais Collada produit par FBX?

10

J'ai essayé d'utiliser le SDK FBX (2011.3.1) pour charger des fichiers FBX et les enregistrer en tant que fichiers Collada afin de pouvoir importer des fichiers FBX dans Panda3D. Malheureusement, les fichiers Collada résultants ne sont pas utilisables pour plusieurs raisons, notamment:

  • Il y a une technique supplémentaire spécifique aux Mayas

diffuser

<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>
  • Il attribue un nom de canal texcoord qui n'est référencé nulle part ailleurs dans le fichier (dans l'exemple de code précédent, aucune géométrie n'utilise "CHANNEL0" ...)

  • Chaque polygone est exporté deux fois, une première fois avec un matériau de base (uniquement couleur diffuse, couleur spéculaire, etc.) et une deuxième fois avec un matériau texturé -> cela double le nombre de polygones de chaque modèle sans raison valable

Quoi qu'il en soit, le fichier Collada résultant ne peut pas être ouvert correctement avec OpenCOLLADA ou "dae2egg" de Panda3D.

Quelqu'un a-t-il une expérience sur la façon de le "réparer" et de le rendre compréhensible par les importateurs Collada courants et réputés tels que OpenCOLLADA?

David
la source
3
C'est un gros problème que j'ai trouvé avec Collada: ce n'est pas vraiment terriblement utile pour transporter des données entre des outils arbitraires qui prétendent le prendre en charge, car c'est un format tellement généralisé. Il peut contenir des données de presque n'importe quel schéma et être toujours un fichier Collada valide et conforme aux normes que l'importateur spécifique que vous utilisez ne peut pas vraiment gérer. Il est légèrement plus utile comme format d'échange de données lorsque vous avez plus de contrôle sur l'importateur / exportateur, ou lorsque les outils produisent le Collada que vous aimez.
1
@Josh: Au moins, c'est lisible par l'homme, contrairement aux formats binaires fermés. Au moins avec Collada, vous pouvez créer des outils et des scripts qui peuvent traduire d'un ensemble de données à un autre. L'interopérabilité est au moins possible , même si elle nécessite un travail supplémentaire.
Nicol Bolas

Réponses:

2

L'outil AC # est votre ami ici - vous pouvez rapidement écrire quelque chose en utilisant le framework .NET System.Xml qui itère sur le fichier d'entrée, repère les parties que vous n'aimez pas et les élimine (ou les ajuste) du document avant de le réécrire encore dehors. C'est effectivement ce que fait XSLT, mais dans la pratique, j'ai toujours trouvé qu'il était plus facile d'écrire du code C # pour décrire la transformation que de trouver la syntaxe XSLT cryptique pour faire la même chose.

Ce que vous devez faire, c'est regarder les «mauvais» cas et repérer ce qu'ils ont en commun. Par exemple, si toutes les techniques diffuses qui ont une texture qui utilise texcoord = "CHANNEL0", c'est facile à trouver. Vous venez d'itérer tous les objets et pour chaque objet, vérifiez toutes ses techniques pour l'attribut incriminé. Si vous ne le trouvez pas, ajoutez le nœud à un document de sortie et continuez. Si vous ne reconnaissez pas le nœud, ajoutez-le à la sortie et continuez. Si vous le trouvez, ne vous embêtez pas à l'ajouter au document de sortie et il sera effectivement supprimé.

Cependant, repérer des polygones en double est un peu plus délicat, car vous devrez analyser chaque paire de polygones pour l'équivalence. Ce serait beaucoup plus simple si vous pouviez décider d'une règle, telle que "Je me fiche des polygones plats, seulement des polygones texturés", alors vous pouvez simplement jeter les polygones appropriés.

Cependant, il me semble très étrange que vous obteniez des doublons; la duplication de la géométrie est un grand non-non pour des raisons évidentes, donc je suis surpris que FBX le fasse. Je n'ai jamais utilisé Collada avec Maya / Max, donc je ne peux pas garantir ce que FBX produit. Mais je demanderais, êtes-vous super doublement sûr qu'il n'y a vraiment pas de géométrie en double dans le fichier FBX?

MrCranky
la source
Merci pour votre réponse. Bien sûr, j'ai pu le résoudre dans mon propre importateur, je cherchais simplement quelqu'un qui a déjà rencontré et corrigé exactement le même problème afin que je puisse avoir un correctif standard et peut-être appliquer des correctifs pour des problèmes que je n'ai pas encore découverts.
David
0

Trouvez ou écrivez un autre exportateur, ou peut-être (puisque les fichiers Collada ne sont que du XML) utiliser [XSLT] [1] pour transformer les données indésirables ou les convertir en une forme plus généralisée?


la source
C'est sûr ce que je fais, mais je cherchais quelqu'un qui a déjà fait ça (ne réinventez pas la roue, non?)
David