Grossièrement une instance c’est ça:

  • Une géométrie (Qu’on nomme "GEO" ici) mise en mémoire.
  • Un transform (ici "XFORM_01") qui pointe vers "GEO".
  • Un second transform ("XFORM_02") qui pointe aussi vers "GEO".
  • Un troisième… etc.

Ainsi, on ne stock la géométrie qu’une seule fois en mémoire, tout le reste étant des position+rotation+scale (un transform) qui y font référence.

C’est très pratique dans le cas, par exemple, d’une forêt ou l’arbre est la géométrie et les milliers de points, des instances.

La monté en charge

Jusqu’ici c’est plutôt pas mal. Sauf que vous allez voir que la collision de deux choix d'architecture ont littéralement claqué la porte a toute possibilité de monté en charge du système.

Le premier est dû a la manière dont Maya fonctionne: Tout est connexion.

Le second est dû à un problème d’expérience utilisateur: Comme il est tout à fait légitime pour un utilisateur de vouloir assigner un material différent à chaque instance, quand Maya créé une instance, cette dernière dispose de son propre slot de material. Ce qui nous donne ceci (voir le bonhomme énervé):

Comme vous pouvez le constater, la shape (en mauve car c'est une instance) possède autant de connexion au shading group qu'il y a d'instance:

shape.instObjGroup[0].initialShadingGroup.dagSetMembers[0]
shape.instObjGroup[1].initialShadingGroup.dagSetMembers[1]
…
shape.instObjGroup[999].initialShadingGroup.dagSetMembers[999]

L'objectif étant, encore une fois, pour Maya, de garder la possibilité d'assigner un material différent à chaque instance.

Ce choix, bien que légitime, porte un gros préjudice aux performances. Vers 1000 instances, il faut plus d’une seconde, quand vous sélectionnez un objet, pour afficher l’Attribut Editor. La plupart des interfaces se mettent à ramer, le delete all by history pédale, le temps de sauvegarde est énorme et je ne parle même pas de certaines opérations en script qui deviennent très lente (parent par exemple).

Il aurait été intéressant de pouvoir forcer un material unique par shape d’instance. Évitant ainsi des milliers de connexions qui, bien souvent, pointent vers le même material.

Des solutions?

Disons que ça dépend de ce que vous faites dans Maya. Si vous voulez faire du rendu, je suppose que ça dépend du moteur mais naïvement je dirais que c’est mort et que vous allez souvent devoir bricoler pour utiliser le système d’instance du-dis moteur. Ce dernier se chargeant d’interpréter le bricolage qu’il vous impose (ah le bon vieux locator avec une connexion message vers un groupe :hehe: ).

Si vous ne faites que de la manipulation de transform (des forets!), une solution consiste à briser toutes les connections de material de votre shape:

Vous vous retrouverez donc sans material (mesh transparent/vert):

Vous pouvez toujours passer en use default material:

Notez que lors de mes tests (Maya 2016), ceci ne marchait pas en Viewport 2.0. Il fallait repasser en Legacy Default Viewport. :aupoil:

Conclusion

Les instances dans Maya restent assez complexe à mettre en place. Le vrai problème vient du fait qu’on ne peut pas travailler avec des milliers d’objets (ce qui est quand même un comble).

:marioCours: