A CG nerd tale

Dorian Fevrier's blog

Linetests are published, Render queue is full. I say: Tonight, we leave before midnight...

samedi, 18 août 2018

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...

mardi, 14 août 2018

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...

dimanche, 25 juin 2017

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...

dimanche, 4 juin 2017

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...

mardi, 15 novembre 2016

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:

dimanche, 6 septembre 2015

Compiler alembic 1.5.8 sous Linux

abc_octopus_001_tn.png

Si vous avez déjà essayé de compiler alembic, vous avez sûrement été confronté à pas mal de soucis. Compiler alembic n'est en effet pas simple et les méthodes pour y arriver sont nombreuses suivant ce que vous souhaitez faire.

Dans ce billet, je vous propose d'expliquer ligne à ligne un script bash afin de voir les différentes étapes. Notez que c'est plus un partage d’expérience qu'un vrai tuto. Il y a de fortes chances que ce script ne fonctionne pas sans modifications de votre part.

Je préfère prévenir: Mieux vaut être habitué à tout ce qui touche à la compilation. :mechantCrash:

Lire la suite...

samedi, 8 juin 2013

Exporter des curves d'anim et nettoyez le fichier .ma

Python_logo_150.pngJe sais pas pour vous mais moi ça me fatigue un peu que, suite à l'export de courbes d'anim Maya, lors de l'import, Maya essaie de me charger tous les plugins qui étaient présents au moment de l'export... :ideenoire:

Je vous propose une petite suite d'expression régulière que j'utilise de temps à autres visant à nettoyer un fichier .ma de ces "requires" et autres "select" quand tout ce qui nous intéresse au fond ce sont des nodes "simples".

Je poste ce code principalement comme un aide mémoire auquel je me réfèrerai et qui pourrait vous servir. :sourit:

Lire la suite...

samedi, 16 mars 2013

Geometry voxelization using Maya Python API (English Translation)

voxel_vray_tn.pngYet another little script only aimed to use the Maya API. :sauteJoie:

The idea is to reproduce the voxel geometric effect you may have already seen.

Nothing too serious and it probably already exists and maybe faster. To be honest, I did not even look. The goal is again to use the API. :baffed:

Lire la suite...

Voxelisation polygonale via l'API Python Maya

voxel_vray_tn.pngEt encore un petit script prétexte à utilisation de l'API Maya. :sauteJoie:

L’idée est de reproduire l'effet de géométrie en voxel que vous avez peut être déjà observe.

Rien de bien méchant et ça existe surement déjà et en plus rapide. Pour tout vous dire, je n'ai même pas cherché. Le but est encore une fois d'utiliser l'API. :baffed:

Lire la suite...

vendredi, 8 février 2013

Déplacer récursivement un fichier vers un emplacement qui n'existe pas (encore)

Python_logo_150.pngC'est rien du tout mais à chaque fois que je dois déplacer un fichier vers un dossier qui n'existe pas je me retape cette fonction à la mano avec les désagrément que peut engendrer l'utilisation des os.mkdir et os.rename. :casseTeteMur:

Comme ce genre de fonction peut intéresser des gens je la met ici pour en faire profiter tout le monde (afin de participer activement et agrandir cette intelligence collective qu'est l'internet... Pourquoi je dis ça? Euh... Et bien en fait j'essais de grapiller quelques lignes sinon le bloc du code se place mal... :seSentCon: )

Lire la suite...

vendredi, 19 octobre 2012

Resolve network slowdowns due to Nuke, After Effects and others software like them (English Translation)

nuke_reseau_tn.pngThis is an english translation of a ticket I wrote (in french :franceHappy: ) a few days ago.

Nuke, After Effects and probably other softwares, can be very "greedy" in terms of disk accesses. So much so they can break network performances drastically if several stations are rendering.

In this ticket I will show you a quick explanation of the why and how a small Python class that can be used as a prototype to solve the problem.

Lire la suite...

dimanche, 14 octobre 2012

Résoudre les ralentissements réseaux dûs a Nuke, After Effect et autres logiciels du genre

nuke_reseau_tn.pngNuke, After Effect et surement d'autres, peuvent se révéler très "gourmand" en terme d’accès disque. A tel point qu'ils peuvent rapidement mettre des disques réseaux à genoux si plusieurs stations font des rendus.

Dans ce billet je vous propose une explication rapide du comment du pourquoi ainsi qu'une petite classe Python qui fait office de prototype pour solutionner le probleme.

Lire la suite...

mercredi, 4 avril 2012

Python: multiprocessing vs threading

threadingVSmultiprocess_tn.pngCe billet va tenter de montrer, principalement par l'exemple les différences entre le module threading et le module... multiprocessing! Je vous propose donc deux petits codes pour démarrer rapidement.

La plupart des TD Maya on déjà entendu parler du threading. Non pas pour savoir a quoi ça servait exactement mais parce que Maya a toujours eu du mal avec ce machin la. :gne:

Cela dit, ce billet est très général et n'aborde pas les problèmes de threading dans Maya. :cayMal: Juste les différences entre le module threading et multiprocessing.

Lire la suite...

mardi, 27 septembre 2011

Quickly retrieve vertex positions of a Maya mesh (English Translation)

recuperer_Position_Vertex_Rapidement_tn.pngIf you ever had to recover vertex positions of a mesh object, you probably crash yourself against the xform command and his legendary slowness. :baffed:

In this post, I purpose a piece of Python script using the Python Maya API that allows you to faster recover the list of all vertex positions of an object.

Primarily didactic, these codes may interest peoples who want to look a little more deeply how to use the API while having a concrete application. :laClasse:

Lire la suite...

dimanche, 31 juillet 2011

Project a mesh to another with Maya API (English Translation)

projection_mesh_api_tn.pngThis is the english translation of a tutorial I've done that will allow you to project a mesh to another.

This is something that can be useful but most is pretty "fun" to do (some would say everything is relative :seSentCon: ) and it's a good way to learn fundamentals of matrice operations having a both simple and concrete example.

Amateur of the API, this tutorial is for you!

Lire la suite...

- page 1 de 4