Question

Je travaille actuellement sur la création d'un pipeline basé import-pour mon jeu indie en utilisant .ma ASCII Maya comme format source et mon propre format pour la physique et les graphiques en sortie. Je vais garder des choses comme des attributs gamme de mouvement à l'intérieur de Maya, comme pour une articulation. D'autres types de paramètres qui a besoin de beaucoup de réglages finissent dans les fichiers sources séparés (.ini peut-être pour des choses comme la masse, des constantes de ressort, la force des moteurs physiques, etc.).

L'entrée est donc une .MA et une ini, et la sortie est, entre autres choses, un .physics et plusieurs fichiers .mesh (un fichier .mesh par la géométrie / matériau).

Je suis aussi probablement vais utiliser Python 3.1 pour reformater les données, et je l'ai déjà trouvé un code LGPL 2.1 qui lit ASCII Maya de base. Je vais probablement utiliser aussi Python pour lancer la plate-forme au cours du développement. Le jeu est développé en C ++.

Y at-il quelque chose dans tout cela qui vous conseiller contre? Un résumé rapide des choses qui pourraient être viciée:

  • pipeline à base d'importation (non fondées sur les exportations)?
  • Maya (non 3DS)?
  • Maya .ma ASCII (non .MB)?
  • .ini (non .xml)?
  • Séparation des attibutes de mouvement dans Maya et "freak-tweak" attributs dans .ini (pas tous dans Maya)?
  • Python 3.1 pour les données de construction (non embarqué C ++)?

Edit:. Si vous avez une meilleure idée de la façon de mettre en œuvre la physique / graphiques import / export chaîne d'outils, j'apprécierais l'entrée

Était-ce utile?

La solution

Si vous voulez vraiment faire cela, vous devez être au courant de quelques choses. Le principal étant qu'il est probablement plus compliqué que vous ne le premier attendez. D'autres sont:

  • Maya .MA (au moins jusqu'à ce que le courant v.2010) est constitué par mel. Mel est Turing-complet, mais la façon dont la scène hiérarchique est décrite en termes de nœuds est beaucoup plus linéaire en avant que « code ».
  • Ajouter une erreur de traitement précoce ou vous regretterez plus tard.
  • Vous devez gérer un grand nombre de nœuds différents, où les transformations sont de loin les plus odieuses. D'autres types comprennent des mailles, des matériaux (de différents types), « les moteurs de shaders » et les fichiers (tels que les textures).
  • .ma ne décrit que les formes et les coups secs; mais définit très rarement les sommets bruts. J'ai choisi de garder un petit script « export » à l'intérieur du .ma pour éviter d'avoir à générer toutes les primitives exactement de la même manière que Maya. Avec le recul, ce fut la bonne façon de procéder. Sinon, vous devez être en mesure de faire des choses comme
    1. « Créer sphère »,
    2. « Déplacer la sélection douce avec un rayon et ce qui d'ici là », et
    3. « Déplacer sommet 252 unités xyz » (avec tous les sommets implicitement définis).
  • Maya définit des polygones de mailles; vous voudrez peut-être conve rt aux triangles.
  • Tous les paramètres qui existent sur un certain type de noeud sont explicitement ou implicitement défini. Vous devez connaître leurs valeurs par défaut (lorsque implicitement défini),
  • Fondamentalement, un objet est défini par une transformation, une maille et une primitive. La transformée est parent du maillage. La transformation contient la mise à l'échelle, rotation, translation, traductions de pivot, et pourtant certains. Les liens de maille à une primitive et vice versa. La primitive a un type ( « polyCube ») et les dimensions ( « largeur, hauteur, profondeur »).
  • Les noeuds peuvent avoir « l'héritage multiple ». Par exemple, un maillage instancié plusieurs fois a une seule maille (et une seule primitive), mais plusieurs parents (les transformations).
  • transforme Node sont calculés comme si (voir Maya xform doc pour plus d'info):

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • Je construis mon moteur autour de la physique, de sorte que le moteur de jeu veut mailles placées sur des formes physiques, mais lors de la modélisation que je veux l'inverse. Ceci pour le garder générique pour les applications futures ( « mailles sans physique »). Cette petite décision m'a causé la douleur grave dans les transformations. algèbre linéaire a une brosse-up. Les problèmes de mise à l'échelle, rotation, translation et cisaillement; vous le nom, je l'ai eu.
  • Je construit mon outil d'importation sur cgkit analyseur de Maya. Merci Matthias Baas!
  • Si vous allez faire quelque chose de similaire, je vous recommande fortement de jeter un oeil à mon convertisseur avant d'écrire votre propre. Ce projet « petit » m'a fallu trois mois angoissante pour se rendre à une condition de travail de base.

Autres conseils

En tant que format de sérialisation général qui est à la fois accessible en écriture lisible et humain humain, offre un excellent support de Python (et, bien, tout soutien linguistique vraiment), vous voudrez peut-être envisager d'utiliser YAML ou JSON sur les fichiers ini ou XML.

XML pourrait être acceptable dans votre cas si vous ne générer des fichiers manuellement.

L'un des avantages de JSON et YAML est en tapant: les deux formats sont analysés vers le bas pour les listes Python, des dictionnaires, des flotteurs, ints ... En gros: les types de python sain d'esprit

.

En outre, à moins que vous êtes sûr que toutes les bibliothèques que vous aurez jamais utiliser des œuvres sur 3.1, vous voudrez peut-être envisager de coller avec 2.x pour un peu en raison de problèmes de disponibilité bibliothèque.

Vous devriez envisager d'utiliser un pipeline basée sur l'exportation ou un format de fichier standardisé OBJ ou COLLADA au lieu de re-mettre en œuvre un analyseur de .ma et reproduire tous les Maya nécessaires pour interpréter Fonctionnement interne il.

Le .ma / format .mb n'est pas destiné à être lu par un programme autre que Maya lui-même, si Autodesk ne met aucun effort pour faire de ce processus facile. Pour l'analyser 100% vous correctement besoin de mettre en œuvre l'ensemble langage de script MEL.

Tous les pipelines à base de Maya que j'ai vu soit d'abord d'exporter du contenu dans un format de fichier standardisé ou d'exécuter des scripts MEL dans les Maya pour vider le contenu à l'aide des interfaces de nœud MEL.

Note que Maya peut être exécuté en mode « sans tête » où il charge une scène, exécute un script de MEL et existe, sans charger l'interface graphique. Ainsi, il n'y a aucun problème à l'utiliser dans les systèmes de construction automatisés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top