VIVARIUM

Produire un environnement virtuel qui paraisse vivant. Cela afin de procurer le même intéret, que l'on peut avoir à l'observation de paysages, d'aquarium, de vivarium...

Il se compose de créatures fantastiques d'aspect végétal et d'autres d'aspect plus animal. Certaines mélangent les deux et peuvent aussi contenir des représentations d'objets artificiels.

Réalisations précédentes.

-En 1999 j'ai réalisé un film d'animation mettant en scène un insecte (proche du cloporte) dans un environnement virtuel.

-Animation procédurale 3d temps réel de sorte d'insectes et d'arbres dans un environnement restreint: la surface d'une sphère.

Réalisation.

Fabriquer des créatures.

Modelage.

Modelage low-poly avec le logiciel Nendo:

Les images qui suivent montrent les différentes étapes, du croquis de départ au modèle lissé final, pour deux des acteurs.


L'animation.

La structure physique articulée.

Une fois la géométrie définie il faut l'animer. Pour cela un squelette (en vert sur l'image ci-dessous) est construit pour servir aux déformations de ce maillage. Mais cette animation est uniquement cinématique. On définit donc aussi un squelette dynamique (en bleu sur l'image ci-dessous: les cubes et les boules) auquel sera attaché le premier squelette. Il s'agit d'objets dynamiques (rigidBodies dans Maya) contraint entre eux par des liaisons rotules ou charnières (représentées en marron).

Les muscles.

Il reste à simuler les forces musculaires qui produiront les mouvements des créatures. Il faut pouvoir controler, en agissant uniquement par le moyen de forces, les orientations des parties du corps. Une méthode consiste mettre un ressort angulaire sur le solide (cf. van de Panne et Fiume, Sims,...). Cela consiste à exercer sur l'objet un couple de rappel proportionnel à un écart par rapport à une orientation neutre (de repos). En animant cette orientation neutre on contrôle celle de l'objet cible.

On calcule le couple du ressort en faisant le produit vectoriel de l'axe de l'objet et du vecteur définissant la position neutre. On contraint ainsi l'axe d'un objet. Mais celui-ci pouvant aussi tourner autour de son axe pour contraindre complétement l'objet on aligne deux axes sur deux positions neutres.


En rouge le mouvement devant découler du couple exercé.

Malheureusement Maya® ne met pas à disposition ce genre de chose.

Implémentation dans Maya®

L'hypershade de Maya® permet de créer graphiquement des "boites" (utilities) et de les connecter pour effectuer certains calculs (en particulier matriciels).

Le calcul se décompose comme cela:

J'ai écrit un script qui met automatiquement en place un ressort angulaire entre deux objets.

Le contrôle de l'animation.

a chaque parent de partie ductible du squelette est aparenté un objet sur lequel le ressort tend à s'aligner. Dans Maya® les objets les plus simples sont les locators. Ils n'ont aucune géométrie et n'alourdisse pas la scène. Je les utilise pour définir les orientations de repos des objets qui peuvent être commandé par la créature. J'anime ces objets avec des procédures en leur imprimant des mouvements périodiques qui peuvent faire se mouvoir la structure.


Dans le cas des deux quadripodes les pattes diagonalement opposées sont en phase et en opposition de phase avec les deux autres.

Pour maintenir un équilibre sur des squelettes instables je mets un ressort angulaire sur l'objet principal pour maintenir une certaine assiette et éviter ainsi les chutes. (techniques dite "de la main de Dieu")

Certaines parties souples sont animées comme le sont les végétaux(voir plus bas).

végétaux.

Les L-systèmes.Presentation

Les L-systèmes sont un moyen de simuler le développement parallèle d'un organisme multicellulaire. Ils ont étés inventés par Aristid Lindenmayer en 1968. Utilisés par P. Prusinkiewicz qui produit ainsi des images de plantes et de coquillages qui contribuèrent à leur utilisation en image de synthèse ou ils sont depuis beaucoup utilisés pour la modélisation surtout de végétaux ou de structures arborescentes.

Partie formelle

Un L-system c'est la donnée de:

a chaque étape (ou dérivation) on parcoure toute la chaîne de caractères en les remplaçant suivant les règles de réécriture. Un symbole sur lequel ne porte aucune règle reste inchangé.

Exemple:

On a un alphabet de deux mots, deux règles de réécriture et une chaîne de départ.

Alphabet: {F, a}

Axiome: a

règles:
a->FFA
F->FA

Aprés deux dérivations la chaîne de caractéres est devenue FAFAFFA

Il existe plusieurs types de L-system qui différent par le fait que les symboles peuvent détenir un ou plusieurs paramétres (on parle alors de L-system paramétriques et on écrit les symboles a(m, n,...)) ou par la façon dont sont composées les règles de réécritures. Ainsi elles peuvent contenir des conditions, des probabilités d'application...En réunissant tout cela une production peut s'écrire (cf. les travaux de Prusinkiewicz)

cd<pred>cg:cond->succ:prob

Pred pour prédécesseur est le symbole sur lequel porte la regle et qui sera remplacé.

Cd est le symbole ou le mot devant être situé à droite pour que la règle s'applique.

Cg est le symbole ou le mot devant être situé à gauche pour que la règle s'applique.

Cond est une condition portant sur les paramètres.

Succ est le mot qui va remplacer le prédécesseur.

Prob est la probabilité pour que cette règle s'applique. Cela introduit une dose d'aléatoire, ce qui rend la structure moins régulière.

Les contextes gauche et droit permettent de faire voyager des flux d'informations à travers la structure par une propagation de proche en proche:

Exemple:

avec une chaîne uaaaaa et les deux productions suivantes:

u>a -> au

u<a->rien

on a, au cours de dérivations successives:

uaaaaa -> auaaaa -> aauaaa -> aaauaa -> aaaaua -> aaaaau

On voit que le u se propage dans la chaîne

Une autre technique est utilisée pour créer des embranchements. Les caractères "[" et "]" sont utilisé pour signaler le début et la fin d'une branche.

Utilisation des L-systems

Après cette partie uniquement formelle de traitement de chaînes de caractères on peut interpréter le résultat pour construire une structure géométrique. Mais si l'on s'en sert pour modéliser des organismes virtuels la structure produite doit être plus que la simple spécification d'une géométrie Elle doit comprendre certaines propriétés physiques (aspect, rigidité, densité, articulations...) et permettre l'animation en mettant en place des procédures ou des comportements.

Un logiciel gratuit traitant les l-systems existe pour Maya®. C'est une adaptation de L-parser (logiciel lui aussi gratuit sous DOS). Malheureusement l'adaptation est trop fidèle et le programme, qui définit uniquement des géométries, ne permet d'animer qu'en faisant varier des constantes utilisées dans la création de l'objet. Il ne tire pas partie des possibilités de Maya® en particulier en animation dynamique et en matière de programmation.

Mon objectif étant de faire des organismes devant s'animer dynamiquement, il a fallut que j'écrive un script mel qui réponde à mes besoins. De plus je voulais pouvoir inclure des objets quelconques dans la géométrie et avoir un outils très souple.

Implémentation dans Maya.

Mon script est composé de deux grandes parties. Une fonction qui gère la partie formelle. Et une fonction d'interprétation qui génère les éléments de l'animation.

Gestion des caractères.

La partie dédiée à la gestion des caractères ne gère que des règles simples composées d'un prédécesseur d'un successeur et d'une probabilité. Elle produit une chaîne de caractères.


Interface du script permettant de génerer des végétaux.

Interprétation.

La fonction d'interprétation parcoure les caractères et exécute le bloc d'instruction qui lui est associé dans le programme. Ces instructions sont très importantes. Ce sont elles qui, à partir de la structure formelle de la chaîne de caractères, vont créer l'individu.

-La tortue: il s'agit d'un objet quelconques utilisé seulement pour conserver la matrice de transformation courante (position orientation échelle) et pouvoir la manipuler implicitement grâce aux fonctions de Maya® ( move, rotate, scale). Des fonctions permettent la gestion d'une pile pour sauvegarder des états de la tortue. Cela permet de rappeler ces états et créer ainsi des branches.

-La géométrie: Des fonctions permettent à la tortue de déposer lors de ses déplacements des objets. En utilisant des courbes on peut générer des géométries. Le nom de chaque courbe est stocké jusqu'au moment où la fonction "loft" de Maya® est appelée sur le groupe de courbe mémorisée. Cela produit une surface nurbs convertie ensuite en polygones.


Constructions des surfaces à partir de courbes.

On peut aussi dupliquer un objet quelconques à la position courante.Des courbes adaptées à leur surface permettent d'incorporer d'avantage les objets dans la géométrie arborescente produite.

a la fin tous les éléments devant êtres déformés sont regroupés dans un même objet polygonal.

Voici quelques tests

Animation.

Certains éléments sont pré animés: un objet possédant un squelette de cinématique inverse est préparé. Ensuite l'objet est dupliqué dans la structure et peut éventuellement être animé procéduralement par des expressions créées individuellement pour chaque duplicata.

En parallèle à la mise en place de la géométrie un squelette de cinématique est généré (en vert sur l'image ci-dessous). Il sert à la déformation et à l'articulation du modèle polygonal par skinning.

Une fois la géométrie groupée et assignée en tant qu'enveloppe pour le squelette, une fonction met en place les solveurs de cinématique inverse.

J'utilise ici la méthode qu'Olivier Junquet a utilisée pour l'animation des végétaux de son film d'animation "Sploshh" (et qu'il expose à l'adresse www.highend3d.com\Maya\tutorials\splotsh\tutorial.htm). Il utilise des solveurs de cinématiques inverse qui contrôlent le squelette à l'aide de splines. Chaque spline est transformée en objet dynamique appelé softBody dans Maya®. Cela consiste à convertir ses points de contrôle en particules dynamiques qui peuvent être animées à l'aide de champs de force. Pour maintenir les particules dans une certaine région de l'espace, un exemplaire de la courbe, parentés au squelette, attire la courbe dynamique point de contrôle par points de contrôle.

Une fonction automatise cette manipulation en plaçant entre les extrémités de chaque branche cette sorte de "solveur de cinématique inverse dynamique". Pour alléger les grosses structures un solveur toutes les quatre branche suffit en général. Ces objets dynamiques sont influencés par 3 champs. Un champ de gravité (gravityField) uniforme dirigé vers le bas. Un champ simulant un vent constant horizontal (airField). Un champ de turbulence pour introduire des variations dans le mouvement.

Cette technique a l'avantage d'être très ouverte. On peut associer n'importe quel bloc de commande à n'importe quel caractères ce qui procure à l'outil une grande puissance.

La mise en place de l'environnement, le regroupement.

Chaque élément, végétal ou créature est préparé dans un fichier scène séparé. Au fur et à mesure ils sont incorporés dans un fichier principal qui les regroupe tous.

On obtient une scène très volumineuse. Avec laquelle il est fastidieux de travailler. Un soin particulier doit accompagner la préparation de chaque ajout pour réduire au maximum les manipulations et les réglages à effectuer sur la scène principale. Il faut absolument placer dans la scène individuelle l'objet de manière à ne pas avoir à le bouger. Il faut aussi modéliser directement à l'échelle car les structures dynamiques et les squelettes cinématiques ne supportent pas une remise à l'échelle.

Ci-dessous une vue d'ensemble de l'environnement avec tous ses éléments.

WEBLIOGRAPHIE



-Sommaire-