Pregunta

Actualmente estoy trabajando en la creación de una tubería basado en las importaciones para mi juego indie usando Maya .Ma ASCII como formato de origen y mi propio formato para la física y gráficos como de salida. Voy a mantener cosas como atributos de rango de movimiento dentro de Maya, como por una articulación de bisagra. Otros tipos de parámetros que necesita una gran cantidad de ajustes terminan en los archivos de origen separadas (posiblemente ini para cosas como la masa, constantes de elasticidad, fuerza de los motores físicos y similares).

La entrada es por lo tanto uno .MA y uno .ini, y la salida es, entre otras cosas, uno .physics y varios archivos .mesh (un archivo .mesh por la geometría / materiales).

También estoy probablemente va a usar Python 3.1 para volver a formatear los datos, y ya me encontré con algo de código LGPL 2.1 que lee ASCII básico Maya. Voy a usar Python, probablemente, también para poner en marcha la plataforma durante el desarrollo. Juego está desarrollado en C ++.

¿Hay algo en todo esto que aconsejaría contra? Un breve resumen de las cosas que podrían ser defectuosa:

  • tubería basado en las importaciones (no de exportación basado en)?
  • Maya (no 3DS)?
  • Maya .Ma ASCII (no .MB)?
  • .ini (no .xml)?
  • La separación de attibutes movimiento en Maya y "freak-pellizco" atributos en ini (no todos en maya)?
  • Python 3.1 para los datos de construcción (que no esté integrado en C ++)?

Editar:. Si usted tiene una idea mejor de cómo implementar la cadena de herramienta de importación de física / gráficos / exportación, apreciaría la entrada

¿Fue útil?

Solución

Si realmente quieres hacer esto, usted debe ser consciente de algunas cosas. La principal es que es probablemente más de una molestia que por primera vez era de esperar. Algunos otros son:

  • Maya .Ma (al menos hasta que la corriente v.2010) se construye por Mel. Mel es Turing completo, pero la forma en la escena jerárquica se describe en términos de nodos es mucho más recta de avance de “código”.
  • Añadir control de errores temprano o te vas a arrepentir más tarde.
  • Usted tiene que manejar una gran cantidad de diferentes nodos, donde las transformaciones son con mucho las más desagradables. Otros tipos incluyen mallas, materiales (muchos tipos diferentes), “motores de sombreado” y archivos (como texturas).
  • .MA sólo describe formas y ajustes; pero muy rara vez se define vértices primas. Elegí para mantener un pequeño script “exportación” dentro del .Ma para evitar tener que generar todas las primitivas exactamente de la misma manera que Maya. En retrospectiva, este fue el camino correcto a seguir. De lo contrario, usted tiene que ser capaz de hacer cosas por el estilo
    1. “Crear esfera”,
    2. “Mover la selección suave con un radio-este y que de aquí para allá”, y
    3. “Mover vértice 252 unidades xyz” (con todos los vértices implícitamente definidas).
  • Maya define polígonos para mallas; es posible que desee conve rt a los triángulos.
  • Todos los parámetros que existen en un determinado tipo de nodo son ya sea explícita o implícitamente definida. Usted tiene que saber sus valores por defecto (cuando se define implícitamente),
  • Básicamente, un objeto está definido por una transformación, una malla y una primitiva. La transformada es el padre de la malla. La transformación contiene el escalado, rotación, traslación, traducciones de pivote, y sin embargo algunos. Los enlaces de malla a un versa primitiva y el vicio. La primitiva tiene un tipo ( “polyCube”) y dimensiones ( “anchura, la altura, la profundidad”).
  • Los nodos pueden tener “herencia múltiple”. Por ejemplo, una malla instanciado varias veces tiene una única malla (y una sola primitiva), pero múltiples padres (las transformaciones).
  • transforma nodo se calcula como tal (ver Maya xform doc para obtener más información):

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • construyo mi motor alrededor de la física, por lo que el motor de juego quiere mallas colocadas en formas físicas, pero cuando se modela lo quiero al revés. Este mantenerlo genérico para aplicaciones futuras ( “sin mallas de la física”). Esta pequeña decisión me causó dolor grave en las transformaciones. álgebra lineal tiene un cepillo plano. Los problemas de escalado, rotación, traslación y esquila; lo que sea, lo he tenido.
  • construí mi herramienta de importación en cgkit ’s analizador Maya. Gracias Matthias Baas!
  • Si vas a hacer algo similar le recomiendo que mira a escondidas en mi convertidor antes de escribir el suyo propio. Este proyecto “pequeño” Me tomó tres meses de agonía para llegar a una condición básica de trabajo.

Otros consejos

Como un formato de serialización en general que a la vez pueda escribir legible y humana humana, tiene un excelente soporte de Python (y, así, cualquier soporte de idiomas en realidad), es posible que desee considerar el uso de YAML o JSON sobre los archivos ini o XML.

XML podría ser aceptable en su caso si nunca generar archivos con la mano.

Una de las ventajas de JSON y YAML está escribiendo: ambos formatos se analizan a las listas de Python, diccionarios, flotadores, enteros ... básicamente: tipos pitón sanos

.

Además, a menos que esté seguro de que todas las bibliotecas que jamás utilizar obras en 3.1, es posible que desee considerar la pervivencia de 2.x para un poco debido a problemas de disponibilidad de la biblioteca.

Se debe considerar el uso de una tubería a base de exportación o de un formato de archivo estándar como OBJ o Collada en lugar de volver a implementar un programa de análisis .Ma y replicar todas partes internas necesarias a los mayas a interpretarlo.

El formato / .MB .Ma no está destinado a ser leído por cualquier programa que no sea en sí Maya, por lo que Autodesk no pone ningún esfuerzo en hacer de este un proceso fácil. Para analizarlo correctamente al 100% lo que se necesita para poner en práctica todo el lenguaje de script MEL.

Todas las tuberías basadas en Maya que he visto, ya sea primero exportar el contenido en un formato de archivo estándar, o ejecutar secuencias de comandos dentro de Maya MEL para volcar el contenido con las interfaces de nodo MEL.

Nota de Maya puede ejecutarse en un modo "sin cabeza", donde se carga una escena, ejecuta un script MEL, y existe, sin cargar la interfaz gráfica de usuario. Por lo tanto no hay problema para usarlo dentro de los sistemas de construcción automatizados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top