TK_logo_smal_whitel.jpg

Maya Toolkit Help


Maya Toolkit Help (FR)

Current Toolkit version : 1.55 (08 / 03 / 2017)

Documentation version : 1.14 (12 / 03 / 2015)

French version => Jump to English version

Pré-requis

Plugins / Modules

Rigs (Nodes “Custom”)

Installation

Module Maya

SIBar

Description

Reglages et aide

Selection

Edition dans les “textBox” : le “TKParser”

Arbitrary attribute

Global/Local

Système de “Picking”

Rigging

Transform / Constrain

Transform

Constrain

Hierarchy

History

Colors

SIGroups

Description

Détails

Fichiers

Fonctionnement

Outfits

Description

Utilisation

Cas concret

Préparation des renderLayers

Enregitrement des outfits

Lexique

Pré-requis

Plugins / Modules

Le package d’outils Toonkit est préparé pour s’executer sur la version de Maya qui nous a été communiquée en début de production, nous possédons les versions suivantes :

        

        Les outils comportent des Nodes “Custom” écrits en C++ qui sont actuellement compilés pour Windows64bits et fonctionnent sous :

(La compilation de ces nodes est possible pour MacOS et Linux)

        

        Une partie des outils inclus (SynopTiK et le SpringManager) mélangent le python, le C# et le C++ et ne fonctionneront que sous Windows

        Pour que ces outils fonctionnent correctement, le Framework Microsoft .NET 4.0 doit être installé (Ce qui est normalement le cas par défaut depuis windows 7, à moins qu’ils aient été désinstallés explicitement)

        Ces outils communiquent avec Maya grâce à une approche client/serveur écrite en python, il ont besoin que deux ports tcp soient ouverts sur la machine (5001 et 5002 par défaut)

        Limitations importantes : Dans la version actuelle, les outils basés sur cette approche client/serveur (comme SynopTiK) ne fonctionnent que sur la première instance Maya lancée. Sur d’éventuelles instances supplémentaires de Maya, les outils peuvent toujours être lancés, mais ils vont agir sur la première instance, même si cette instance est close, ce qui est contre-intuitif.

        Pour utiliser ces outils de nouveau, seule la première instance de Maya lancée après la fermeture de l’ancienne sera connectée (Cette limitation est pénible à l’usage, nous en sommes conscients et travaillons activement à la disparition de cette limitation).

Rigs (Nodes “Custom”)

        Pour que les rigs soient pleinement fonctionnels, le module Toonkit (ou un package de plugin minimal) doit être connecté, car ils utilisent des Nodes Maya “Custom” :

        

        tkSoftIkNode : Evite le claquement des Iks à l’appoche de la position “tendue”.

tkSpringNode : Node de dynamiques temps-réel (sans simulation) avec collisions

tkSpreadDeformNode : Node qui transmet une deformation localement d’une shape à l’autre (utilisé pour le rig de guideCurve de “fur” par exemple).

        tkWheelNode: Node simulant une roue qui roule au sol en fonction de sa vélocité et de son orientation.

        radialBlendShape : Node evaluant les blendshapes avec une interpolation radiale (courbe au lieu de linéaire pour le blendShape node de base de Maya).

tkResPlaneNode : Node contraignant une tranformation dans un plan défini par trois points dans l’espace.

Il est a noter que même sans aucun plugin les rigs sont a 95% fonctionnels puisqu’ils sont construits en utilisant majoritairement les outils et deformers de base de Maya (à l’exception du node “radialBlendShape”). Les développements de Toonkit sont pensés pour optimiser le travail des animateurs mais ne sont pas requis pour manipuler le modèle.

Installation

Module Maya

Un module, dans Maya, est un dossier contenant un ensemble d’outils et/ou de ressources qui sont déclarés dans Maya via une une unique variable d’environnement, ce qui rend donc son installation très simple et souple. Pour plus d’information, consulter la documentation de Maya à ce sujet.        

        Comme pour tous les modules Maya, la variable d’environnement “MAYA_MODULE_PATH” doit réferencer le chemin complet vers le dossier contenant le fichier module (*.mod).

Vous pouvez copier le module où vous voulez, nous devons juste vous recommander d’utiliser un chemin local (non partagé), car le module contient des nodes Maya écrits en C++, qui seront “bloqués” par le système lors de leur utilisation. S’ils sont placés sur un réseau partagé, par exemple, il peut être compliqué de supprimer ou de mettre à jour ces plugins par la suite, car ils seront bloqués par plusieurs instances de Maya…

La façon la plus simple de déclarer cette variable d’environnement “MAYA_MODULE_PATH” est d’utiliser le fichier “Maya.env” de chaque utilisateur, placé dans le dossier : “Documents\Maya\2016” (pour Maya 2016 en considérant que l’installation a été faite avec les paramètres par défaut). Dans ce fichier “Maya.env”, vous pouvez dfonc ajouter la ligne :

MAYA_MODULE_PATH = PATH_TO_TOONKIT_MODULE

Par exemple, si le module Toonkit a été copié dans “Z:\Rnd\Toonkit_Module”, pour un utilisateur nommé “Artiste” avec Maya 2016x64 :

MAYA_MODULE_PATH = Z:\Rnd\Toonkit_Module\Maya2015

Vous pouvez ensuite lancer Maya. Pour être sûr que l’opération a fonctionné, vous pouvez vérifier que le menu “Toonkit” est visible :

 

Retour en haut de page


SIBar

Démo vidéo

Description

C’est une toolbar comportant plusieurs outils de gestion de scène et de rigging. Ces outils s’inspirent des workflows de Softimage et sont présentés de la même manière.

Elle est accessible par le menu Toonkit => Views => SIBar.

Par défaut elle est “dockée” à droite, avec la Channel Box et l’Attribute Editor, mais peut être rendue flottante ou “dockée” à gauche. Elle peut également être redimensionnée à volonté et affichera une barre de défilement verticale si besoin.

Reglages et aide

        Tout en haut, deux boutons sont alignés :.

Le bouton “Hide Selection tab” sert à masquer la zone “Selection” de la toolbar, et accessoirement de désactiver les événements liés à la sélection. Ceci permet de libérer Maya de procédures couteuses sur de grosses sélections (au delà de 1000 objets).

Le bouton  permet d’accéder à l’aide (ce document).

On distingue ensuite quatre parties : Selection, Global/Local, Rigging et Colors

Selection

Cette partie permet de visualiser et modifier divers informations sur les objets sélectionnés :

  • Le noms des objets (“Renamer”) avec la première “textBox” sous “Selection”.

  • Les cinématiques des objets dans les groupes “Translation”, “Rotation” et “Scaling”. Les boutons “Global” et “Local” , sous le groupe “Selection” permet d’éditer les cinématiques globales ou locales des objets.

  • N’importe quel attribut des objets avec le groupe “Arbitrary attribute”.

L’édition dans les “textBox” de cette partie utilise un système de “Parsing” qui offre beaucoup de possibilités, encore une fois inspiré de Softimage.

Il permet d’éditer des attributs de façon relativement fine, en réalisant des opérations mathématiques. Il est par exemple possible d’ajouter une certaine quantité à tous les attributs, les multiplier par une valeur, utiliser des variables...

Edition dans les “textBox” : le “TKParser”

        Au moment de l’édition de valeurs dans ces “textBox”, leur contenu est évalué comme une opération arithmétique pouvant contenir des opérateurs et des variables. Il est bien sur possible de les utiliser “simplement”, en rentrant juste une valeur.

Utiliser des operateurs et des variables permettra d’appliquer des valeurs différentes à chaque objet sélectionné.

        Opérations possibles

        Il est possible de faire évaluer au “TKParser” tout ce que python pourrait évaluer.

Utiliser des conditions trouve surtout son sens avec les noms d’objets, par exemple pour vérifier qu’une sous-chaîne n’est pas déjà présente dans le nom, ex : “‘$V’ if ‘_Deform’ in ‘$V’ else ‘$V_Deform’

Cela est particulièrement utile dans le cas des noms d’objets, pour donner un incrément aux noms avec un “padding”, comme dans l’exemple ci-dessus.

Quelques exemples typiques de formatage :

        

Nota : En plus de toutes les fonctions internes de python les modules “os”, “math” et “random” peuvent être utilisés, en utilisant le nom complet du module, par exemple : “os.environ[“USER”]”, “math.fabs(10.01)” ou “random.random() * 10.0

Nota pour les développeurs : Le “TKParser” fait partie du module “tkMayaCore”, les fonctions de la librairie “tkMayaCore” peuvent donc aussi être utilisées, sans nom de module cette fois, par exemple : “getNearestMayaColor((255, 128,128,128))[0]” ou “getUniqueName(“$V”)

Les opérateurs

Les opérateurs réagissent différemment en fonction du type. Dans le cas des chaînes de caractères (ex: Nom), leur sens est différents de celui qu’il prend sur les valeurs numériques (ex: TranslationX). De plus, il est possible de poser un opérateur au début ou à la fin de la chaîne (sans opérande, par ex : “25+”), et cet opérateur sera alors évalué différemment. Le signe “-” est une exception, qui sera toujours considéré comme un signe négatif en début de chaîne et qui devra donc être apposé à la fin.

Les variables

Arbitrary attribute

        Ce groupe permet d’utiliser toutes les possibilités offertes par le “TKParser” sur n’importe quel attribut (tant que l’on connait son nom et son type). C’est aussi un endroit ou on peut simplement évaluer une expression sans l’appliquer sur aucun attribut (pour s’en servir comme une calculatrice).

Utilisation typique

Les réglages donnés ici correspondent à un “toggle visibility” : si l’objet est visible, il sera masqué, s’il est masqué, il sera affiché.

Pour changer la valeur d’un attribut, donner son nom dans la case du haut (ici “visibility”), son type dans la boite déroulante à droite (ici “bool”), et enfin la valeur à lui donner dans la case du bas (ici “not $V” donc l’inverse de la valeur courante).

Pour appliquer, cliquer sur .

        Presets

        Plusieurs attributs usuels et leurs types sont accessibles directement via la boite déroulante . Vous pouvez sélectionner un attribut depuis cette liste, il sera ainsi prêt à être modifié.

        Les Presets disponibles :

visibility : visibilité de l’objet

overrideEnabled: Activer l’”override display”

overrideVisibility : ”override” visibilité de l’objet

overrideColor : ”override” couleur de l’objet

target[0].targetOffsetTranslate(X, Y, Z) : Les “offsets” d’une contrainte.

        Utilisation en calculatrice

        La case du bas (Valeur) peut être utilisée pour évaluer simplement une valeur, en cliquant sur le bouton . Attention, même dans ce cas d’utilisation, le type est important.

 Clic =>

Global/Local

Cette zone comporte un simple réglage Global/Local. Ce réglage est utilisé par la zone “Selection”, afin de savoir si les cinématiques doivent être récupérées et modifiées en espace Global ou Local.

Il y a un second usage à cette option, qui est simplement de définir si on veut transformer l’objet en Local ou en Global via les manipulateurs dans la vue.

Local

Global

Système de “Picking”

        Tous les outils suivants (des groupes Rigging et Colors) utilisent le même mode d’interaction qui permet de pré-sélectionner les objets ou de les sélectionner “à la volée” après appel de la commande, un système de “Picking”.

        Par exemple, la commande “Reset All Transforms” de “Transform” nécessite au moins un objet.

        Si on est rentré en “Pick Session” par erreur, ou que l’on veut annuler l’action, il est possible d’utiliser un menu contextuel avec le clic milieu (Ce menu n’est disponible que pendant une “Pick Session”).

“End picking” : Termine la collecte d’objets via le picking et exécute la commande.

“Cancel picking” : Annule la “Pick session” (n’exécute pas la commande).

Rigging

        Cette zone comporte de nombreux outils, que l’on détaillera du haut vers le bas avec quatre sous-parties : Transform, Constrain, Hierarchy, History.

Transform / Constrain

Transform et Constrain sont présentés de la même manière :

En haut à gauche (ici ) une boite déroulante listant toutes les actions possibles.

En haut à droite le bouton  permettant de répéter la dernière action effectuée.

En bas à droite, le nom de la dernière action effectuée (“No command” quand aucune action n’a encore été faite).

Transform

Détaillons les commandes de “Transform” :

Reset All Transforms : Réinitialise toutes les transformations (S(1,1,1), R(0,0,0), T(0,0,0))

Reset Scale : Réinitialise le “scaling” (S(1,1,1))

Reset Rotation : Réinitialise la rotation (R(0,0,0))

Reset Translation : Réinitialise la translation (T(0,0,0))

Set Neutral Pose : Réinitialise toutes les transformations, en préservant les positions/rotation/scaling (un “group” parent est créé)

Remove Neutral Pose : Retire la “Neutral Pose” d’un objet (supprime le “group” parent)

Match All transforms : Aligne un objet sur un autre.

Match Scale : Fait correspondre le “scaling” d’objet avec celui un autre.

Match Rotation: Fait correspondre la rotation d’objet avec celle un autre.

Match Translation: Fait correspondre la translation d’objet avec celle un autre.

Constrain

        Comme son nom l’indique, cette zone permet de faire des contraintes. L’ordre des argument est : 1:Objet contraint, 2:Source de la contrainte.

La “checkbox” “Cns comp” du groupe Hierarchy sera alors utilisée pour indiquer qu’on veut créer la contrainte en “Maintain offet” (“Cns comp” cochée) ou sans “offset” (“Cns comp” décochée)

Détaillons les commandes de “Constrain” :

Position : Crée une contrainte en position (=Point)

Orientation : Crée une contrainte en orientation (=Orient)

Direction: Crée une contrainte de direction (=Aim)

Pose : Crée une contrainte de “pose” (=Parent)

Scaling: Crée une contrainte d’échelle (=Scale)

Remove all constraints : Retire toutes les contraintes sur cet objet (l’objet selectionné)

Select constrained : Sélectionne tous les objets “contraints” sur cet objet

Select constraining : Sélectionne tous les objets “contraignant” cet objet

Hierarchy

        Cette zone concerne des opérations qui traitent de la Hiérarchie (à l’exception de “Cns comp”, qui traite des contraintes et de leurs offsets).

Parent : Parente l’objet sous un autre

Cut: Dé-parente l’objet

Child comp : Active la compensation des enfants (déplacer le père n’a pas d’impact sur les enfants)

Cns comp : Active la compensation des contraintes à l’application et permet de “re-compenser” une contrainte existante (quand la checkbox passe cochée).

Note : Les fonctions de parentés (“Parent” et “Cut”) présentées ici respectent les “Neutral Pose” de l’objet s’il en possède (voir “Transform”). Ainsi la fonction peut être appelée directement sur l’objet, si une “Neutral Pose” existe, c’est ce “group” parent de “Neutral Pose” qui sera re-parenté.

History

        Ce groupe permet de supprimer l’historique des objets (typiquement les géométries).

Freeze: Supprime tout l’historique de l’objet (= “Delete by type : History”)

Freeze modeling : Supprime l’historique de l’objet à l’exception des “Deformers” (= “Delete by type : Non-Deformer History”)

Colors

        Ce groupe va donner une couleur “custom” à un objet. Ceci est fait sur la “Shape” de l’objet, en activant le “Override Display” et en réglant la couleur via l’attribut “overrideColor”.

Chaque bouton va appliquer la couleur choisie aux objets.

 Ce bouton permet de rétablir la couleur par défaut (désactive le “Override Display”)

Retour en haut de page


SIGroups

Description

C’est un package qui permet d’utiliser les Sets comme des groupes de Softimage, pour contrôler la visibilité et la sélectabilité (mode Template de Maya) des objets du Set. On appellera ces Sets particuliers des ”SIGroups”

Utilisation

Démo vidéo

(Accès client nécessaire)

        Le principe de base est de créer des “objectSets” qui ont des paramètres particuliers : “visibility” et “selectability”. Il existe alors une commande “Refresh overrides” qui va appliquer les attributs de visibilité et de “sélectabilité” (mode “Template”) aux objets dans ces groupes.

On crée ces groupes via le menu “Toonkit => Groups => Create Group”.

Les attributs “visibility” et “selectability” peuvent alors être trouvés dans la “Channel Box” ou l’ “Attribute Editor”. Par défaut ils ont la valeur “No effect”, ce qui très logiquement indiquent qu’ils n‘ont aucun effet...Visibility va donner les possibilité “Hide” et “Show”, et “Selectabilité”, de la même manière, va donner les possibilités “Do not allow” et “Allow”.

Dans ce mode d’utilisation “brute”, il faut appeller la commande “Refresh overrides” manuellement après chaque modification de “visibility” et “selectability”, cette commande est disponible dans le menu “Toonkit => Groups => Refresh overrides”.

Il y a également un attribut plus “avancé” (“tkSetPriority”), qui permet de résoudre les potentiels conflits entre Groupes. Si plusieurs groupes ont des valeurs d’attributs contradictoires pour un même objet, celui qui a la priorité la plus haute va prendre le dessus (quand un groupe est créé, il prend automatiquement la priorité la plus élevée).

Comme ce n’est pas très pratique en l’état, il existe un “Attribute Editor Template” (AETemplate*) pour les “objectSet”s, qui va permettre d’automatiser ce processus. Pour l’activer (la première fois) il faut aller dans “l’Attribute Editor” : “Show => Set Current View => SIGroupsView” (avec un “objectSet” de sélectionné).

La vue qui s’affiche alors est beaucoup plus adaptée. Ella va rester la vue par défaut pour les “objectSet”s tant qu’on ne l’aura pas changée (“Show => Set Current View => Default”).

Elle va notamment appeller automatiquement le “Refresh overrides” après chaque modification, et présente plusieurs bouton pour accéler la gestion des groupes (Ajouter au groupe, retirer du groupe, supprimer un groupe…).

Pour utiliser ces boutons, l’idéal est de sélectionner d’abord les objets, puis le(s) groupe(s) en dernier (de cette manière l’”Attribute Editor” va afficher la vue “SIGroupsView”, donc les boutons des groupes).

Détails

Fichiers

Chemin

Type

Description

$WG*/scripts/tkSIGroups.py

module python

Librairie statique contenant les commandes appellées par le menu et l’AETemplate*

$WG*/templates/AEobjectSetTemplate.xml

AETemplate*

Définition d’un AETemplate* pour tous les objets de type “objectSet” qui permet d’appeller la methode de rafraichissement (tkSIGroups.refreshOverrides) après modification des propriétés d’un Set.

Fonctionnement

Les Sets particuliers utilisés dans ce système sont des objectSet “de base”, mais comportent des attributs custom. On appellera ces Sets particuliers des ”SIGroups”. Un objectSet sera considéré comme ”SIGroup” si il comporte l’attribut “tkSetPriority”, les autres attributs devront alors exister pour un bon fonctionnement.

Ces attributs “custom” sont :

Nom

Type

Exposé

Description

tkSetPriority

int

Non

Degré de priorité utilisé quand les influences de groupes sont contradictoires (le plus grand est le mieux)

tkSetVisibilityOldValue

int

Non

Ancienne valeur de ”visibility” (inutilisé)

tkSetSelectabilityOldValue

int

Non

Ancienne valeur de ”selectability” (inutilisé)

visibility

enum

Oui

Visibilité à appliquer aux objets du groupe

selectability

enum

Oui

Selectabilité (Template) à appliquer aux objets du groupe

Retour en haut de page


Outfits

Description

C’est une méthode et un outil adapté à la gestion de différentes “tenues” (=outfits) pour les assets d’une production.

Le concept général est de regrouper tous les éléments nécessaires à la fabrication d’un asset et de ces variations dans le même fichier, et de travailler sur ce fichier “matrice” pour les étapes de pré-production de l’asset (modeling/rigging/shading).

L’outil va gérer la visibilité de chaque objet, ainsi que le materiau qui lui est appliqué, pour générer des sortes de “Presets”.

Utilisation

        L’utilisation de l’outil repose sur une préparation préliminaire de la géométrie de l’asset, avec des renderLayers.

Les layers vont définir quels géométries sont visibles pour telle ou telle variation, et quelles textures portent les géométries dans le contexte de la tenue.

        Ces renderLayers doivent être nommés de façon particulière :

        L’outil va ensuite utiliser ces layers pour enregistrer les tenues et leurs particularités. A ce stade, les layers peuvent être supprimés. L’outil permet ensuite de passer d’une tenue à l’autre, et enfin de “nettoyer” une variation des géométries et shaders qui ne lui sont pas nécessaires, pour générer l’asset de cette variation en particulier.

Cas concret

        Dans cet exemple nous allons créer deux variations pour un personnage : “Default” et “Brun”. Nous commençons donc par préparer les renderLayers.

Préparation des renderLayers

        En selectionnant toutes les géométries, nous allons créer la première variation “Default” (dans ce cas toutes les géométries sont utiles à la variation “Default”, mais il serait tout à fait possible d’exclure certaines géométries de cette tenue si certaines étaient spécifiques à “Brun”).

Création du renderLayer “layer_Default”

A ce stade la variation “Default” est terminée. En excluant certaines géométries (les bottes, les lunettes, la ceinture), nous allons créer le second renderLayer pour la variaton “Brun”.

        

Création du renderLayer “layer_Brun”

Pour ce Layer nous allons créer quelques overrides de materiaux. Avec le nouveau layer “layer_Brun” d’activé, nous changeons le shader des cheveux et de la chemise.

Ceci fait, notre variation “Brun” est prête.

L’asset “matrice” est donc terminé. Enregistrons maintenant les outfits dans l’outil.

Enregitrement des outfits

En sélectionnant le “topNode” de l’asset, il faut lancer l’outil via le menu “Toonkit => Scene => Outfits manager”.

Pour enregistrer les tenues, on utilise le bouton “Store outfits”. L’outil va alors lire les renderLayers et enregistrer les réglages des tenues dans un groupe portant le nom du “topNode” suivi de “_tkOutfits”.

Dans l’interface, une liste déroulante est appararue, listant les tenues disponibles. La valeur par défaut “Debug”, permet d’afficher toutes les géométries et les shaders “par défaut” des géométries.

Les autres valeurs (les tenues), affichent alors ce qui a été défini par les renderLayers, qui peuvent être retirés.

La variation “Default”

La variation “Brun”

Enfin, nous allons nettoyer la variation “Brun” des géométries et shaders qui lui sont inutile. Attention, cette opération va supprimer des élements et retirer le groupe “_tkOutfits”, il n’est donc pas possible de revenir en arrière. Si on doit “exporter” plusieurs variatons, il faut donc avoir préalablement sauver l’asset avec ses outits enregistrés pour pouvoir facilement le réouvrir pour “exporter” différentes variations.

Préparons donc la variation “Brun”. Pour ce faire il faut sélectionner “Brun” dans la liste déroulante, puis faire “Clean current”.

Il en résulte une variation réduite au nécessaire, avec le groupe “_tkOutfits” retiré, cet asset peut être exporté en tant que variation “Brun”.

Lexique

Retour en haut de page


 /