A CG nerd tale

Dorian Fevrier's blog

Premières images de playplast avec des mauvais matériaux dans Maya : displayPref à la rescousse

Si vous faites des playblasts déportés, il y a de fortes chances que vous mettiez une machine dédiée qui ouvre une session graphique de Maya, ouvre (par exemple) votre scène d'animation, puis lance le playblast. Cela faisant, il est possible que les premières images de votre playblast n'aient pas tout les matériaux et textures (surfaces vertes), ce qui est assez gênant. :casseTeteMur:

Dans ce billet, je vous propose d'essayer de comprendre le problème et de regarder comment le résoudre. :hehe:

Lire la suite...

Gérer les chemins Linux/Windows sous Maya avec dirmap

Aujourd'hui je vais vous parler d'une commande que vous devez connaître si vous avez à gérer un pipeline Maya qui tourne sous Windows, Linux et autres.

Lire la suite...

La ferme de rendu (première partie) : Les jobs

L’exécution de tâches (jobs) sur des gestionnaires de tâche (job manger, render manager, farm manager) est courante dans énormément de secteurs liés à l’informatique. Que ce soit la compilation de code, l’exécution et le rapport de tests unitaires, le calcul financier, ça pullule. :popcorn:

Internet regorge d’informations et de bonnes pratiques liées à l’exécution et la gestion des tâches sur des fermes de calcul. Pourtant, beaucoup de ces informations sont trop génériques et passent à côté de certains problèmes de fond, propres à notre industrie. :triste:

Je voudrais, modestement et de façon totalement subjective, faire un retour d’expérience autour de l’organisation et la structure de la ferme de calcul. Notez que je n’affirme pas avoir LA bonne méthode pour gérer les fermes de la façon la plus efficace qui soit, mais j’aborde et commente différentes problématiques que j’ai pu rencontrer.

Lire la suite...

Récupérer le nom d’un attribut caché dans Maya

Il n’est pas rare, quand on script, de devoir récupérer le nom d’un attribut en vu de l’utiliser, plus tard, dans ses scripts. D’une manière générale, il suffit de modifier l’attribut, d’aller dans le Script Editor puis de trouver la ligne qui fait le setAttr sur l’attribut qui nous intéresse. :petrus:

Vous remarquerez toutefois que cette méthode ne fonctionne pas avec certains attributs. Il arrive, en effet, que la commande setAttr correspondante ne soit pas affichée dans le Script Editor. Je vous propose ici la méthode que j’utilise pour aller trouver les attributs « timides ». :sourit:

Lire la suite...

Le unités de mesure des logiciels

Un billet pour expliquer un truc assez bête mais qui fait perdre la tête à pas mal de gens tant il est obscur. Je vais parler de la notion d’unité de mesure dans les logiciels, ou pourquoi elle n’aurait peut-être jamais dû exister. :grenadelauncher:

En début de production on tente souvent de se mettre d’accord sur un référentiel de mesure. La grande question est : « Quelle distance fait 1 ? », C’est-à-dire, quand un objet se déplace de 1 dans mon logiciel, à combien cela correspond-il dans le monde réel ? :gne:

Lire la suite...

Exécuter du Python au démarrage de Guerilla

Un peu comme Maya et son userSetup.mel, Guerilla permet d’exécuter des scripts au démarrage, mais que du lua. Voici un petit truc rapide pour exécuter du Python :

Si vous allez dans le nœud Preferences, dans LocalSettings/Directories/User Plugins vous pouvez définir une liste de chemins (paths).

Sachez que tous les fichiers lua présents dans ces différents chemins seront exécutés au démarrage de Guerilla. Sachez aussi que le lua de Guerilla intègre une passerelle vers Python. Ainsi, si votre fichier lua contient :

require('python')
python.execute('import myModule; myModule.doit();')

Celui-ci exécutera le code Python :

import myModule
myModule.doit()

Vous savez maintenant comment exécuter du Python au démarrage de Guerilla ! :bravo:

Des boutons appelants la même fonction avec des arguments différents grâce à functools.partial()

Un des premiers trucs qu’on souhaite faire quand on commence à scripter dans Maya ce sont les boutons pour exécuter nos scripts chéris. :bravo:

Naturellement, vous êtes allé dans la documentation, section Technical Documentation, puis Python Commands, avez cherché « button » et êtes tombé là-dessus. Ensuite vous êtes allé en bas de la page, vous avez copié-collé l’exemple et avez commencez à modifier votre script. Félicitation, c’est exactement comme ça qu’il faut faire. :mayaProf:

Sauf que comme nous allons le voir, on bute vite sur un problème. Aujourd’hui je vous propose un tutoriel pour pouvoir utiliser une même fonction appelée avec différents arguments suivant les boutons.

Lire la suite...

L'instanciation implicite du format Alembic

Suite à la publication de mon post mortem sur Ballerina, certains d’entre vous semblaient intrigués par le paragraphe concernant l’instanciation implicite des fichiers Alembics.

Dans ce billet, je vous propose d’aller un peu plus loin avec une explication théorique, un peu de pratique et un peu de code (la recette du bonheur en somme :petrus: ).

Lire la suite...

Post mortem: Ballerina

Je viens enfin de finir le post mortem de mon travail sur le long-métrage Ballerina. Je vous préviens, c’est long.

En espérant que ça vous plaise. :popcorn:

Lire la suite...

Faire un override pour supprimer un shader dans Guerilla

Si vous assignez un shader (de volume par exemple) il peut être utile de pouvoir le désassigner, plus loin dans le rendergraph.

Il me semble que c’était possible en 1.3 mais que ce ne soit plus possible en 1.4. :reflexionIntense:

Je vous propose donc une petite méthode pour désassigner un shader. :sauteJoie:

Lire la suite...

Personnaliser ses AOV dans Guerilla

Ça fait un moment que je n’ai pas fais de tutoriel. En voici un tout petit principalement à destination des étudiants utilisant ou voulant (les biens inspirés :hehe: ) utiliser Guerilla pour leur projet de fin d’année.

L’idée étant de faire un tuto pour sortir un AOV personnalisé assignant une couleur suivant les objets. Nous allons ici utiliser de simples couleurs (rouge et bleu dans le cas d’un masque) mais sachez que vous pouvez remplacer cette couleur par une texture, de l’occlusion ou pleins d’autres choses.

En avant ! :enerve:

Lire la suite...

Construire un clavier mécanique pour le fun

Cela faisait un moment que je voulais construire un truc. En fait, quand je ne code pas, j’ai toujours envie de faire des trucs. En fait, quand je fais des trucs j’ai toujours envie de faire d’autres trucs. Je ne voyais rien qui puisse me motiver à aller jusqu’au bout. Puis l’idée d’un projet qui mélangeait électronique et bois passa : Un clavier mécanique fait maison. « Haha » me dis-je, « Faut vraiment rien avoir à faire de sa vie pour se lancer dans un truc aussi con ».

Je partais donc là-dessus avec entrain. :dentcasse:

Lire la suite...

Lister les channels d'un fichier OpenVDB avec Guerilla

Si vous utilisez Guerilla et que vous devez rendre des fichiers OpenVDB, vous devez connaitre les noms des channels afin de les utiliser dans vos shaders de volumétrique.

Il y a plusieurs façons d’introspecter un fichier OpenVDB (plugin Maya, ligne de commande officielle, etc.) mais toute ne sont pas forcement disponible sur votre machine.

Je vous propose une petite méthode qui s’appuie sur les informations que Guerilla donne quand il rend. :aupoil: )

Lire la suite...

Pourquoi les instances Maya sont si lourdes?

Comme vous le savez sûrement, Maya propose un moyen de faire des instances.

Comme vous vous en doutez peut-être, ce n’est pas si simple.

Et ce que vous ne savez peut-être pas c’est qu’en pratique (plus de 1000 instances) ça ne fonctionne pas des masses

Essayons de comprendre pourquoi. :redface:

Lire la suite...

Est-ce que glTexSubImage2D est asynchrone?

OpenGL_logo_tn150.png

Je traduis une réponse claire trouvée sur reddit:

Si le paramètre data de la fonction n’est pas un buffer object, alors glTextSubImage2D doit bloquer pendant que le pilote OpenGL copie les données dans la mémoire du GPU (à la manière d’un memcpy). C'est nécessaire car OpenGL n’a aucun moyen de vous forcer à conserver les données en mémoire en attendant que la fonction se termine.

Les buffer objects permettent un transfert asynchrone (à la discrétion du pilote), car le pilote peut les conserver jusqu’à ce que les données soient transférés.

Réponse claire et efficace! :hehe:

"FBXASC032" dans mes noms de noeuds Maya quand j'importe un FBX

mobu.png

Si vous importez un fichier FBX provenant de Motion Builder 2016 dans Maya 2016, il se peut que vous obteniez des noms bizarres. C'est simplement un espace les amis! :nannan:

Si votre objet se nomme "tree 1" dans Motion Builder, et que vous importez le FBX dans Maya, Maya nommera le nœud "treeFBXASC0321". Pour une raison étrange, Maya remplace l'espace par FBXASC032, l'espace étant le 32eme caractère ascii. :aupoil:

Motion Builder autorise l’écriture des espaces dans les noms des objets. En fait, il le fait même automatiquement quand deux objets portent le même nom :injures: . Je suppose que Maya devrait remplacer ça par un underscore ("tree_1"), ou au moins remonter un warning dans le log.

Soit vous résolvez le problème avant l'export du FBX, soit vous le faites dans Maya via une simple recherche et remplacement.

En espérant que ça en aide d'autres. :hehe:

- page 2 de 10 -