¿Cómo arreglar el mal Collada producido por FBX?


10

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?


3
Este es un gran problema que he encontrado con Collada: en realidad no es tan útil para transportar datos entre herramientas arbitrarias que reclaman soporte para él, porque es un formato tan generalizado. Puede contener datos de casi cualquier esquema y aún así ser un archivo Collada válido y compatible con el estándar que el importador específico que está utilizando realmente no puede manejar. Es marginalmente más útil como formato de intercambio de datos cuando tienes más control sobre el importador / exportador, o cuando las herramientas producen Collada que te gusta.

1
@ Josh: Al menos es legible para humanos, a diferencia de los formatos binarios cerrados. Al menos con Collada, puede crear herramientas y scripts que pueden traducirse de un conjunto de datos a otro. La interoperabilidad es al menos posible , incluso si requiere trabajo adicional.
Nicol Bolas

Respuestas:


2

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?


Gracias por tu respuesta. Por supuesto, pude solucionarlo en mi propio importador, solo estaba buscando a alguien que ya se haya encontrado y haya solucionado exactamente el mismo problema para poder tener una solución estándar y tal vez aplicar soluciones a problemas que aún no he descubierto.
David

0

¿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?


Eso es seguro lo que estoy haciendo, pero estaba buscando a alguien que ya lo haya hecho (no reinventes la rueda, ¿verdad?)
David
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.