Domanda

Attualmente sto lavorando sulla creazione di un gasdotto di importazione a base per il mio gioco indie usando Maya .ma ASCII come formato sorgente e il mio proprio formato per la fisica e la grafica in uscita. Terrò cose come attributi range of motion all'interno di Maya, come ad esempio per un giunto a cerniera. Altri tipi di parametri che ha bisogno di un sacco di ritocchi finire in file di origine separati (possibilmente .ini per cose come la massa, costante elastica, la forza dei motori fisici e simili).

L'ingresso è quindi uno .MA e uno .ini, e l'uscita è, tra le altre cose, uno .physics e più file .mesh (un file per ogni .mesh geometria / materiale).

Sono anche probabilmente andando a utilizzare Python 3.1 per riformattare i dati, e ho già trovato un codice LGPL 2.1 che legge ASCII base Maya. Io probabilmente uso anche Python per lanciare la piattaforma durante lo sviluppo. Gioco è sviluppato in C ++.

C'è qualcosa in tutto questo che si sarebbe consiglio contro? Un breve riassunto di cose che potrebbero essere viziata:

  • gasdotto Import-based (non esporta-based)?
  • Maya (non 3DS)?
  • Maya ASCII .ma (non .mb)?
  • .ini (non .xml)?
  • Separazione delle attibutes movimento in Maya e "freak-Tweak" attributi in .ini (non tutti in Maya)?
  • Python 3.1 per i dati di costruzione (non incorporato C ++)?

Modifica:. Se si dispone di una migliore suggerimento di come implementare la catena fisica / grafica import / strumento di esportazione, mi piacerebbe apprezzare l'ingresso

È stato utile?

Soluzione

Se si vuole veramente fare questo, si dovrebbe essere a conoscenza di alcune cose. Il principale è che è probabilmente più di una seccatura di quanto ci si aspetterebbe prima. Alcuni altri sono:

  • Maya .ma (almeno fino alla v.2010 corrente) è costruito da Mel. Mel è Turing-completo, ma il modo in cui la scena gerarchica è descritta in termini di nodi è molto più diretto di “codice”.
  • Aggiungi la gestione degli errori presto o te ne pentirai in seguito.
  • Devi gestire un sacco di diversi nodi, in cui le trasformazioni sono di gran lunga i più fastidiosi. Altri tipi includono maglie, materiali (molti tipi diversi), “motori dello shader” e file (come ad esempio le texture).
  • .ma descrive solo le forme e ritocchi; ma molto raramente definisce vertici prime. Ho scelto di mantenere un piccolo script “esportazione” all'interno del .ma per evitare di dover generare tutte le primitive esattamente allo stesso modo di Maya. Col senno di poi, questa è stata la strada giusta da percorrere. In caso contrario, si deve essere in grado di fare cose come
    1. “Crea sfera”,
    2. “Sposta selezione morbido con raggio questo-e-che da qui a lì”, e
    3. “Sposta vertice 252 unità XYZ” (con tutti i vertici definite implicitamente).
  • Maya definisce poligoni per mesh; si potrebbe desiderare di conve rt per triangoli.
  • Tutti i parametri che esistono su un certo tipo di nodo sono o definiti esplicitamente o implicitamente. Dovete conoscere i loro valori di default (quando implicitamente definito),
  • In sostanza, un oggetto è definito da una trasformazione, una maglia e una primitiva. La trasformazione è genitore della rete. La trasformazione contiene il ridimensionamento, rotazione, traslazione, le definizioni di articolazione, e tuttavia alcuni. I link mesh versa uno primitivo e vice. Il primitivo ha un tipo ( “polyCube”) e dimensioni ( “larghezza, altezza, profondità”).
  • I nodi possono avere “l'ereditarietà multipla”. Per esempio, una maglia istanziato più volte ha una sola rete (e un unico primitivo), ma più i genitori (le trasformazioni).
  • trasformate Nodo sono calcolati in questo modo (vedi Maya xform doc per maggiori informazioni):

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • Costruisco il mio motore in giro la fisica, in modo che il motore di gioco vuole maglie disposte su forme fisiche, ma quando si modellano lo voglio il contrario. Questo per tenerlo generico per applicazioni future ( “maglie senza fisica”). Questo piccolo decisione mi ha causato gravi il dolore nelle trasformazioni. L'algebra lineare ha un pennello-up. Problemi in scala, la rotazione, la traduzione e di taglio; è il nome, l'ho avuto.
  • Ho costruito il mio strumento di importazione cgkit s ‘ Maya parser. Grazie Matthias Baas!
  • Se avete intenzione di fare qualcosa di simile vi consigliamo caldamente di sbirciare mio convertitore prima di scrivere il proprio. Questo progetto “piccolo” Mi ci sono voluti tre strazianti mesi per arrivare a una condizione di lavoro di base.

Altri suggerimenti

Come formato di serializzazione generale che è sia scrivibile leggibile e umano, ha un eccellente supporto Python (e, beh, qualsiasi supporto per la lingua in realtà), si potrebbe voler considerare l'utilizzo di YAML o JSON sui file ini o XML.

XML potrebbe essere accettabile nel tuo caso se non si generano file a mano.

Uno dei vantaggi di JSON e YAML sta scrivendo: entrambi i formati vengono analizzati fino a liste Python, dizionari, galleggianti, int ... in fondo: tipi di pitone sane

.

Inoltre, se non sei sicuro che ogni biblioteca potrai mai usare lavori su 3.1, si potrebbe prendere in considerazione attaccare con 2.x per un po 'a causa di problemi di disponibilità di libreria.

Si dovrebbe considerare l'utilizzo di un oleodotto di esportazione-based o un formato di file standard, come OBJ o COLLADA, invece di ri-attuazione di un parser .MA e replicare tutti i Maya Internals necessaria per interpretarlo.

Il formato / .mb .ma non è destinato ad essere letti da qualsiasi programma diverso Maya stesso, in modo Autodesk non mettere alcuno sforzo nel rendere questo un processo facile. Per analizzare al 100% in modo corretto si avrebbe bisogno di implementare l'intero linguaggio di scripting MEL.

Tutte le tubazioni Maya a base che ho visto sia primo contenuto esportare in un formato di file standard, o eseguire script MEL all'interno di Maya per scaricare contenuti utilizzando le interfacce dei nodi MEL.

Nota di Maya può essere eseguito in modalità "senza testa", in cui si carica una scena, esegue uno script MEL, ed esiste, senza caricare l'interfaccia grafica. Quindi non v'è alcun problema di utilizzarlo all'interno dei sistemi di compilazione automatici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top