Traté de usar el SDK de FBX (2011.3.1) para cargar archivos FBX y guardarlos como archivos Collada para poder importar archivos FBX en Panda3D. Lamentablemente, los archivos Collada resultantes no se pueden usar por varias razones, entre ellas:
- Hay una técnica extra específica maya
difuso
<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>
Asigna un nombre de canal texcoord al que no se hace referencia en ningún otro lugar del archivo (en el ejemplo de código anterior, ninguna geometría usa "CHANNEL0" ...)
Cada polígono se exporta dos veces, una primera con un material básico (solo color difuso, color especular, etc.) y una segunda vez con un material texturizado -> esto duplica el número de polígonos de cada modelo sin ninguna razón valiosa
De todos modos, el archivo Collada resultante no se puede abrir correctamente con OpenCOLLADA o con "dae2egg" de Panda3D.
¿Alguien tiene alguna experiencia sobre cómo "arreglarlo" y hacerlo comprensible para los importadores de Collada comunes y de buena reputación como OpenCOLLADA?
Respuestas:
La herramienta AC # es su amigo aquí: puede escribir rápidamente algo utilizando el marco .NET System.Xml que itera sobre el archivo de entrada, detecta partes que no le gustan y las elimina (o modifica) del documento antes de volver a escribirlo Fuera denuevo. Efectivamente, eso es lo que hace XSLT, pero en la práctica siempre me ha resultado más fácil escribir código C # para describir la transformación que encontrar la sintaxis críptica XSLT para hacer lo mismo.
Lo que debe hacer es mirar los casos "malos" y detectar lo que tienen en común. Por ejemplo, si todas las técnicas difusas que tienen una textura que usa texcoord = "CHANNEL0", es fácil de encontrar. Simplemente itera todos los objetos y, para cada objeto, verifica todas sus técnicas para el atributo ofensivo. Si no lo encuentra, agregue el nodo a un documento de salida y continúe. Si no reconoce el nodo, agréguelo a la salida y continúe. Si lo encuentra, no se moleste en agregarlo al documento de salida y se eliminará efectivamente.
Sin embargo, detectar polígonos duplicados es un poco más complicado, ya que tendrías que analizar cada par de polígonos para determinar la equivalencia. Sería mucho más simple si pudieras decidir una regla, como "No me interesan los polígonos de colores planos, solo los polígonos con textura", entonces puedes descartar los polígonos apropiados.
Sin embargo, me parece muy extraño que realmente estés obteniendo duplicados; La duplicación de la geometría es un gran no-no por razones obvias, por lo que me sorprende que FBX lo haga. Solo he usado Collada con Maya / Max, por lo que no puedo responder por lo que produce FBX. Pero pregunto, ¿estás súper doblemente seguro de que realmente no hay geometría duplicada en el archivo FBX?
fuente
¿Busca o escribe un exportador diferente o quizás (dado que los archivos Collada son solo XML) use [XSLT] [1] para transformar los datos no deseados en una forma más generalizada?
fuente