Blog de Frédéric Bonometti

ANIMATION, RIGS et SCRIPTS sur Softimage

Paramètre fourre-tout dans un CPS

Posted by Frédéric Bonometti on 28 décembre 2011

Voici une petite astuce simple et pratique pour stocker des données de manière souple dans une scène ou un model en python.

Il est très simple de créer un paramètre dans une propriété (CPS) et d’y stocker des données. Mais il peut arriver qu’on veuille stocker une liste de données (tableau) ou de paramètres facilement modulable.

Avec python, il suffit de créer un paramètre de type String et d’y stocker le contenu d’une variable quelqu’elle soit (list, tupple, dict, etc.) en la convertissant en String. Pour la récupérer, il suffit de l’évaluer avec eval().

Exemple:
Dans un CPS, on crée un paramètre de type String appelé “datas”.
Nous voulons y enregistrer la série de paramètres suivante:
- shot=’001′
- duration=125
- characters=(‘riri’, ‘fifi’, ‘loulou’)
Voici un exemple de code:

datas = {}
datas["shot"] = "001"
datas["duration"] = 125
datas["characters"] = ("riri", "fifi", "loulou")
cps.Parameters("datas").Value = str(datas)
# où cps = l'objet représentant la propriété

Et pour relire les données, c’est l’inverse:

datas = eval(cps.Parameters("datas").Value)
shot = datas["shot"]
duration = datas["duration"]
characters = datas["characters"]

C’est une idée simple mais qui peut simplifier la gestion des données dans une scène 3D en tout cas dans certains contextes.

Posted in SCRIPTS | Tagged: , , , , , | 1 Comment »

Utiliser les accents dans Softimage avec python

Posted by Frédéric Bonometti on 2 décembre 2011

Vous avez peut-être déjà voulu afficher dans Softimage via Python un message du type “Procédure non trouvée” ou encore écrire dans un bouton “Définir un accès” et vous vous êtes retrouvé avec “Procédure non trouvée” et “Définir un accès”. Voir même vous avez eu un message d’erreur pour avoir simplement écrit un commentaire avec un accent. Nous allons comprendre ici pourquoi les caractères avec accent peuvent être mal interprétés par Softimage et nous en déduirons comment les afficher en toute circonstance.

La clé de tout cela réside dans le fait que depuis quelques versions (sans doute depuis la V6 mais je ne suis pas très sûr), Softimage utilise pour coder ses chaînes de caractères le système “unicode”. C’est quoi ça ? Tout est expliqué sous ce lien dans Wikipédia.

Pour ce qui nous concerne, cela va dépendre de la version de Python utilisée:
- Version 2.x: l’unicode est reconnu mais n’est pas utilisé directement dans les chaines de caractères de type  “string”
- Version 3.x: l’unicode est le format utilisé pour les chaînes de caractère de type  “string”
En gros, vous aurez moins de problème avec Python 3.x mais vous n’êtes pas pour autant à l’abri de problèmes. Le mieux est d’abord de bien comprendre et on verra que ce n’est pas compliqué à corriger.

Avec Python 2.x

Par défaut, si vous tapez et lancez ce script:
Application.LogMessage(“pépé”)
Softimage affiche:
# INFO : pépé
Moralité, on sait que Sotimage n’aime pas les accents (en tout cas, pour l’instant…)

Retirons les accents pour un moment le temps de voir autre chose :
name = “null”
Application.LogMessage(name)
Application.LogMessage(type(name))

Softimage affiche:
# INFO : null
# INFO : <type ’str’>

Jusque là, rien d’étrange. Tout est normal.

Créons maintenant un null (appelé “null”) et tapons le script suivant
oNull = Application.dictionary.GetObject(“null”)    #oNull représente notre Null
Application.LogMessage(oNull.Name)
Application.LogMessage(type(oNull.Name))

Softimage affiche:
# INFO : null
# INFO : <type ‘unicode’>

Tiens, ça change ! Dans le premier exemple, nous avions une chaine de type “string” et dans l’autre, nous avons une chaine de type “unicode”.

Bien que les 2 exemples renvoie en apparence la même chose, ils ne renvoient pas la même chose puisque les types sont différents. Si on compare les 2, on devrait avoir une différence. Pourtant…

oNull = Application.dictionary.GetObject(“null”)
name = “null”
Application.LogMessage(oNull.Name == name)

Pourtant Softimage nous renvoie bien:
# Info : True

En fait, Python parle en 2 langages sans qu’on s’en rende compte et permet de comparer des type ’string’ avec des types ‘unicode’ sans problème, en tout cas tant qu’il n’y a pas de caractères spéciaux. Pourtant il m’est arrivé que la comparaison entre un nom d’objet et une chaine de caractère de type ’string’ ne me renvoie pas True alors que cela aurait dû être le cas puisqu’en apparence c’était le même texte. Sans doute était-ce parce que j’étais dans un contexte particuliers puisque dans PyQt mais ayant corrigé le problème depuis, je ne puis dire avec certitude que c’était à cause de cela. Quoiqu’il en soit, vous êtes prévenu…

Donc, si on veut être “clean” et parfaitement dans les règles, il vaut mieux convertir nos “strings” en “unicode” (puisque Softimage ne comprend que l’unicode). Et pour se faire, c’est très simple: il suffit d’ajouter  un ‘u’ devant toute chaine de caractère comme ceci :
name = u”null”
Application.LogMessage(name)
Application.LogMessage(type(name))

Softimage affiche :
# INFO : null
# INFO : <type ‘unicode’>

Et d’une pierre, deux coups, puisque ainsi on peut très bien écrire des accents:
Application.LogMessage(u”pépé”)
Softimage affiche:
# INFO : pépé

Avec Python 3.x

Et bien là, c’est beaucoup plus simple puisque nos chaines de caractères de type ’string’ sont déjà en unicode. Donc toujours avec notre Null si on écrit :
oNull = Application.dictionary.GetObject(“null”) #oNull représente notre Null
Application.LogMessage(oNull.Name)
Application.LogMessage(type(oNull.Name))

Softimage affiche:
# INFO : null
# INFO : <type ’str’>

Dans Python 3, le type ‘unicode’ n’existe plus et donc on n’a plus besoin de mettre ‘u’ devant une chaîne de caractères (ça devient même une erreur de syntaxe). De ce fait, on n’a plus à y penser :
Application.LogMessage(“pépé”)
Softimage affiche:
# INFO : pépé

Problème résolu ? pas tout à fait…

Si vous écrivez votre code dans un éditeur externe, vous pouvez quand même avoir des erreurs une fois exécuté dans Softimage. Pour cela, il faut vérifier avec quel encodeur le texte de votre script est codé.

Si vous utilisez comme moi Notepad++ (qui entre nous est très bon), vous avez un menu Encodage dans le menu supérieur. Si vous l’ouvrez, il vous indique l’encodage de votre texte.  Par défaut: ANSI . En principe, ça devrait fonctionné dans Softimage mais si vous encodez avec ISO 5589 – 1 par exemple qui est celui préconisé en France, là, ça va poser des problèmes puisque les caractères avec accent ne seront pas reconnu dans Softimage. Vous aurez beau convertir en unicode votre chaine , il ne saura même pas lire le code brut correctement (d’où des erreurs possibles même dans les commentaires).

Le mieux, et c’est mon conseil, est de choisir directement un encodage unicode. Ainsi vous serez tranquille et à l’abri de tout problème avec Softimage. Pour ce faire, vous pouvez choisir un encodeur de type UTF comme par exemple UTF-8.

Vous l’aurez certainement compris, la ligne d’encodage à indiquer en début de script de type :
# -*- coding: iso-8859-1 -*-
est maintenant vivement déconseillée puisque non comprise pas Softimage.

Posted in SCRIPTS | Tagged: , , , , | 2 Comments »

Rendez-vous Softimage live et gratuit

Posted by Frédéric Bonometti on 2 octobre 2011

Les rendez-vous gratuits Softimage continue toujours sur un rythme mensuel.

VidéoConférence

Venez rejoindre les soirées que j’organise sur le net en vidéo conférence au CAFE DE L’INFOGRAPHIE. On y parle Rig, développement d’outils, d’interfaces et pipelines dans Softimage (outils et techniques).

C’est gratuit et ouvert à tous: les débutants, les professionnels ou les simples curieux. Une simple inscription suffit qui vous permettra de recevoir par mail les paramètres de connexion. Le nombre de participants n’est pas limité donc pensez à vous inscrire à tout moment (une inscription suffit pour tous les rendez-vous).

Prochain rendez-vous : consultez la page spéciale sur ce blog
(accès en haut de cette page)

RENSEIGNEMENTS ET INSCRIPTION SOUS CE LIEN

N’hésitez pas à me proposer à l’avance les questions que vous voulez aborder pendant les soirées.  Je vous invite aussi à intervenir vous-même sur un outil Softimage ou une technique, que ce soit sur un niveau débutant ou avancé, car je souhaite avant tout que ce rendez-vous soit un échange plutôt qu’une succession de mes interventions unilatérales. Donc un grand merci à tous ceux qui collaborent déjà ou prochainement à ces rendez-vous chacun à leur manière.

Pour répondre aux problèmes de décalages horaires et autres empêchements de pouvoir assister en direct aux rendez-vous, une solution de mise en ligne de ces rendez-vous est étudiée. En attendant des extraits sont visibles sur Vimeo. Voir les liens sur la page spéciale Cafe de l’Infographie de ce blog.

PS: Le site http://cgtalkcafe.com/ n’est pas toujours à jour. Mieux vaut se référer à la page de mon blog.

Posted in RIG, SCRIPTS | No Comments »

Set Neutral Pose or not ?

Posted by Frédéric Bonometti on 21 septembre 2011

Les paramètres de Neutral Pose (présents dans la fenêtre Local Transform d’un objet) permettent de mettre à zéro les transformations locales d’un objet en leur ajoutant des valeurs d’offset. Mais cela peut-il avoir des effets secondaires sur l’objet ?

La réponse est oui et non.
Oui parce que cela peut nuire aux manipulations de l’animateur et non parce que l’outil fonctionne très bien. Mais pour comprendre expliquons depuis le début.

Pour un animateur, il est très intéressant que les objets qu’il anime soient tous à zéro par défaut (coordonnées de scale à 1, coordonnées de rotation et position à 0). Et ce pour deux raisons principales :
- Cela donne un repère aux objets par rapport à leur position par défaut (on peut y revenir très facilement)
- Vu que les coordonnées animées (locales) dépendent de leur parent (à l’exception du scale), plus ils évoluent sur des coordonnées proche d’eux (surtout en rotation) mieux c’est.

Pour ce faire, il y a la vieille école qui consiste à ajouter un Null caché, parent de l’objet animé et aligné sur sa position par défaut.
L’autre méthode consiste à utiliser le Neutral Pose en faisant Set Neutral Pose dans le menu Transform quand l’objet est dans sa position par défaut.

En théorie, les 2 systèmes semblent équivalents. Au niveau des courbes d’animation, nous aurons la même chose et les 2 techniques sont très stables et fiables.

Pourtant une différence apparait à la manipulation qui peut rendre les animateurs rétifs à la solution Neutral Pose.

Pour comprendre, il faut manipuler:

- Créons 2 Nulls dont l’un sera le parent de l’autre et appelons-les respectivement “Parent” et “Enfant” pour bien les différencier.

- Décalons l’enfant en translation et en rotation par rapport à son parent (il aura donc des coordonnées locales non nulles en translation et en rotation)


- Décidons que cette nouvelle position de l’enfant sera sa position neutre. Faisons donc Transform > Set Neutral Pose sur l’Enfant. Ses coordonnées locales sont mises à zéro.
- A l’image 1, créons une clé en translation
- Allons un peu plus loin dans le temps, par exemple à l’image 50, mettons nous en mode Local (pour le manipulateur ou Gizmo) et déplaçons l’Enfant sur son seul axe X. Ajoutons des clés en translation

A ce stade, si vous regardez les courbes d’animation, seule la courbe de translation sur l’axe X présente une variation. Sur Y et Z, les courbes (si elles existent sont plates).

- Revenez à l’image 1 et tourner l’objet de manière à l’orienter différemment de sa position par défaut (les coordonnées en rotation doivent avoir des valeurs comprises entre 30 et 60° pour bien mettre en valeur le phénomène)
- Rejouez l’animation: c’est toujours la même chose.

Mais maintenant essayez d’afficher l’axe de translation correspondant aux courbes d’animation. Comme ici, l’objet ne bouge que sur l’axe X, l’axe X doit être aligné avec le sens de déplacement.
En fait, en mode Local, on a bien l’orientation de l’axe local de l’objet et en mode Parent, on voit bien l’orientation du parent. Mais le problème est que l’animateur qui voudrait manipuler une translation le long des axes correspondant aux courbes d’animation, il lui manque l’affichage de l’axe généré par l’offset du Neutral Pose.

Mode Local : l'axe X ne correspond pas au déplacement sur X

Mode Parent : l'axe X ne correspond pas au déplacement sur X

Ce n’est pas vraiment un défaut mais plus un manque puisqu’il suffirait de pouvoir manipuler la translation sur l’axe généré par l’offset du Neutral Pose pour que le problème soit résolu. Toutefois tous les animateurs ne souhaitent peut-être pas cette option et dans ce cas, la technique ne les gênera pas. Pour les autres, il sera conseillé d’ajouter un Null caché au dessus de chaque objet destiné à être animé et aligné avec celui-ci.

Posted in RIG | Tagged: , , , | No Comments »

Softimage – Logiciel collatéral ?

Posted by Frédéric Bonometti on 2 septembre 2011

La politique commerciale d’Autodesk présente Softimage comme un logiciel d’animation 3D et d’effets spéciaux bien adapté à la fabrication de jeu vidéo. Elle le propose comme un outil complémentaire à inclure dans un pipeline tournant autour de 3DSMax ou de Maya. Pourtant c’est oublier que Softimage propose lui-même parmi les meilleures solutions Pipeline du marché… Je reviens dans cet article sur quelques possibilités pour des productions de film 3D.

Pour commencer, il faut se souvenir des débuts de ce logiciel pour bien comprendre sa philosophie première…

Softimage 3D

Interface de Softimage|3D

Softimage a été créé en 1986 par Daniel Langlois qui voulait créer un logiciel 3D adapté aux artistes et à leur travail, chose qui n’existait pas jusque là. Les logiciels 3D étaient surtout faits par des informaticiens pour des informaticiens. La technologie primait sur l’ergonomie.  En 2001, avec la sortie de la version Softimage|XSI, le logiciel offre en plus une ergonomie destinée aux développeurs.

D’autre part, Softimage est le premier logiciel à avoir offert tous les processus de création dans le même outil (modélisation, animation, rendu) offrant ainsi une interactivité entre ces différentes étapes. Une révolution à l’époque que tout le monde aujourd’hui trouve “banale” mais qui reste une avancée majeure car elle permet une vraie interactivité entre toutes les étapes de la fabrication. Grâce à cela par exemple on peut corriger un modeling ou une animation pendant l’opération de rendu. Ca a l’air évident comme ça aujourd’hui mais ça n’existait pas avant. Cette interactivité sera élargie jusqu’au montage avec la suite Softimage|XSI / DS mais suite au rachat par Avid en 1998, je n’ai plus trop de nouvelles de DS (sans doute abandonnée, je n’en sais rien) et de ce fait, la chaîne de fabrication s’arrête actuellement un peu moins loin au compositing final (ce qui reste quand même peu commun). Cela signifie concrètement qu’il existe une réelle interaction entre toute les étapes de fabrication du début de la chaine 3D (modeling) jusqu’aux compositing final.

Compositer de Softimage

Mais Softimage ne permet pas que cela. Il permet de construire un pipeline sur mesure à l’aide d’outils performants qui en apparence ressemblent à des outils présents dans d’autres logiciels mais en apparence seulement.

Imaginez qu’on puisse faire le rendu avant l’animation, que l’on puisse animer un personnage alors que ses textures ne sont pas commencées ou encore de faire un rig en même temps que les textures sur deux postes différents sans que cela ne pose aucun problème. Cela est déjà une réalité dans bon nombre de pipelines. Mais à quoi cela peut-il bien servir? Et bien cela amène de la souplesse à la production et un confort certain à la direction de production qui peut mieux planifier les différents postes en allégeant les périodes de surcharges sur des périodes plus vides sans tenir compte des contraintes liées aux autres postes. Par exemple, dans un pipeline classique, les riggers doivent attendre que le modèle soit texturé pour pouvoir commencer à travailler. Pour peu que le département textures soit à la bourre, cela peut retarder directement l’animation et mettre en péril la date de livraison du produit. Si par contre, on enlève cette contrainte, les riggers peuvent commencer leur travail sans attendre les textures et être prêt plus tôt. Après tout, l’animation n’a pas besoin des textures ou si peu. Il y a donc moins de risque de retard sur la production.
Un autre exemple avec les lighters. En principe, ils doivent attendre les scènes d’animation pour pouvoir travailler l’éclairage mais celles-ci peuvent tarder (surtout en début et fin de production). Leur donner la possibilité de travailler sur un plan avant de recevoir les animations peut les avancer dans leur planning et prévenir les périodes de surcharge. Quand les animations seront prêtes, ils leur suffiront de lancer une commande pour calculer les images sans avoir à ouvrir la scène préparée auparavant. Le travail sera ainsi mieux réparti et donc plus efficace.

On voit déjà ici l’intérêt d’un bon pipeline bien puissant tel que peut le proposer Softimage. Reconnaissons tout de même que ce genre de pipeline est aujourd’hui très commun dans de nombreux studios quelques soient les logiciels utilisés.
Mais cela ne s’arrête pas là. Au sein d’un même département, le pipeline peut faire gagner énormément de temps. Pour ne parler que de l’animation que je connais bien voici quelques exemples de possibilités parmi d’autres dont j’utilise certains au quotidien depuis déjà plusieurs années:

- On peut supprimer un ou plusieurs modèles d’une scène déjà animée par un simple clic de souris sans avoir à l’ouvrir dans l’interface (et même sans ouvrir Softimage). Un gain de temps énorme quand on sait que certaines scènes très lourdes peuvent mettre plusieurs minutes à s’ouvrir. Il en va de même pour en ajouter mais bien sûr, dans ce cas, s’il faut les animer, il faudra bien ouvrir la scène un jour ou l’autre (quoique si c’est une animation de déplacement de personnage ou de véhicule, ce ne serait pas forcément une nécessité car on peut très bien positionner des éléments dans une scène et leur attribuer des animations ou des règles particulières depuis l’extérieur de Softimage)

Chargement + Affichage décor HD (4,7 millions de triangles): 8 sec !

- Dans le même esprit et aussi facilement, on peut très bien changer un décor complet dans une scène déjà animée sans avoir à ouvrir la scène 3D (par exemple passer d’un décor jour à nuit ou d’un décor été à hiver). Encore du temps non perdu.

- Si une scène est très lourde avec de nombreux personnages, on peut l’ouvrir directement en ne chargeant qu’un seul personnage. On peut ensuite l’animer, le décharger de la scène sans pour autant perdre son animation, en charger un autre sans avoir à quitter la scène. Mais on peut tout aussi bien sauver la scène et la rouvrir en choisissant de charger un autre personnage. Gros avantage, la scène reste toujours très légère même si en elle-même elle est très lourde avec de nombreux personnages et pourquoi pas un décor gigantesque. Là aussi du temps gagné à ne pas attendre l’ouverture d’une scène (Ca permet aussi de travailler sur des machines non puissantes).

- Inversement on peut animer une même scène à plusieurs et en même temps. Par exemple, deux animateurs sont en charge d’un personnage chacun qui interagissent ensemble dans le même plan. Chaque animateur peut travailler son personnage attribué dans sa scène avec celui de l’autre animateur présent comme référence. L’animation du personnage animé par l’autre sera automatiquement mise à jour au fur et à mesure de l’avancement du travail sans que l’un ou l’autre n’ait à importer ou exporter quoique ce soit. Ils ne devront même pas quitter leur scène, la mise à jour pouvant se faire à tout moment. Ici on ne gagne pas en temps de travail mais en confort et organisation de travail.

- Vous pouvez animer des plans dans des décors gigantesques (donc très très lourds) sans jamais à avoir à charger une seule fois le décor en entier. Même pas la première fois, car on peut s’arranger si on est habile de faire connaître à Softimage quels éléments de décor il doit charger et ceux qui ne sont pas nécessaires.

Dans les autres départements, des aménagements judicieux peuvent être organisés. Par exemple en rendu dans le studio où je travaille, les aménagements pris permettent à un seul lighter d’éclairer, de corriger et de gérer le calcul d’environ 2 minutes de film par jour sans perdre en qualité de travail.
En textures, grâce à l’intégration dans Softimage de Unfold3D (développé par Rémi Arquier), on réalise un dépliage d’UV d’un personnage en 2 minutes montre en main contre 2 jours auparavant avec une qualité accrue.

Mais ce qui fait plus encore la force d’un pipeline sous Softimage est sa faculté à modifier, à corriger sans avoir à tout refaire :

Pile de construction hiérarchisée par étape pour une meilleure interactivité

Imaginez que vous avez rendu 100 plans contenant un personnage au nez crochu. Malheureusement pour vous, vous devez modifier le nez et le rendre plus droit. Vous pouvez modifier le maillage de votre  personnage sans avoir à intervenir sur le rigging (enveloppes et shapes inclus), les textures, les scènes d’animation, les scènes de rendu, etc. Vous n’avez donc pas à rouvrir les scènes de production, à les corriger une par une. Vous n’avez seulement qu’à relancer vos processus de calcul et c’est tout. Et si vous avez bien préparé votre pipeline, vous pourriez n’avoir qu’à recalculer seulement que le nez, les compositions des images finales pouvant se mettre à jour automatiquement.
Et que dire de GATOR ? Un simple petit bouton perdu dans le menu des propriétés (il est pourtant à sa place) et qui ne pète pas de mine au premier abord ! GATOR ou comment corriger un maillage sans contrainte et sans refaire tout le travail de rigging ou de textures en seulement 3 clics (j’ai compté) ! Que de temps gagné !

Sans doute pouvons nous faire toutes ces choses d’en d’autres logiciels ? avec la même efficacité ? la même fiabilité?  Ce n’est pas à moi de le dire n’étant pas spécialiste de ceux-là. Je ne dénigre pas non plus 3DSMax ou Maya. Mais ce que je souhaite c’est que Softimage garde l’image de ce qu’il est vraiment et non l’image qu’on veut lui donner pour des raisons purement commerciales, notamment en Europe.

Sans compter que Softimage permet une maintenance complète de tous ces processus et c’est un facteur incontournable dans une production car tôt ou tard des problèmes inattendus surgissent, qu’ils soient dus à une mauvaise manipulation, un bug, une exception, ou autres, il faut pouvoir les identifier, les corriger, les contourner, les débloquer. Et là, je mets en avant entre autres le système des Deltas qui rend le système de référencement accessible, transparent, entièrement contrôlable et qui de ce fait offre bien plus de possibilités que tout autre système de référencement (je suis sûr que même les développeurs de Softimage n’avaient pas imaginés toutes les possibilités pratiques qu’amenait une telle architecture de développement).

Le vrai Pollux sur Softimage !

Même le vrai Pollux s'était mis à Softimage !

Bien sûr, il faut savoir utiliser un logiciel de cette trempe et malheureusement les formations ont tendance à suivre la politique d’Autodesk en retirant progressivement Softimage de leur programme (commerce oblige) et encore s’il y avait des formations digne de ce nom… Que faire? De mon côté, je vais essayer de continuer à proposer le rendez-vous gratuit et mensuel sur le net (voir page spéciale dans ce blog) et très probablement une série de tutoriels en français d’ici 1 an.

Pour conclure, je dirai qu’il est plus juste de dire que Softimage ne propose pas vraiment de solutions Pipelines mais plutôt des outils permettant de créer de nombreuses possibilités de Pipelines. Ainsi vous pouvez produire de manière classique ou de manière très évoluée à votre convenance en fonction de vos besoins et de vos moyens. C’est à vous de choisir et non au logiciel. Un bon pipeline, c’est du temps gagné ou en tout cas non perdu et donc des économies. Dernier argument : son prix . La licence Softimage coute 500$ de moins que celle de Maya ou 3DSMax, chose non négligeable quand on a un parc de 20 ou 50 machines. Les économies peuvent être de 10000$, 25000$ voire plus. Ajoutée aux économies faites via un bon pipeline, qui peut dire que Softimage est un outil collatéral ?

Posted in DIVERS | Tagged: , , , | 3 Comments »

 
Network :
ico_magazine
Magazine
ico_boutique
Boutique
ico_cgjobs
Portail Emploi
ico_upload
Hébergement d'images
ico_blog
Blogs
progiss
Progiss
ico_social
Social