MAXScript et VrayProxy
Ce sera le premier tuto MAXScipt du blog! Rien de bien prétentieux, au contraire, juste une petite intro vous permettant de gagner du temps sans forcement « vraiment » apprendre MAXScript! La Manica Lunga Library, m’a donné pas mal de fil à retordre pour une raison simple, le nombre d’objets présent dans la scène. Du coup, je me suis servi de MAXScript pour automatiser les actions simples et récurrentes de la création de la scène. Un exemple simple, la gestion de l’affichage des VrayProxy.
Avant de commencer la scène, j’ai placer un certains nombre de livres à la main, forcement c’est devenu compliquer de les sélectionner pour ensuite les afficher en box étant donne que l’option « bounding box » n’est plus accessible… Comme vous ne le savez peut-être pas, je viens du Web, et la productivité se résume parfois à réduire le nombre de clics pour accomplir une tache. J’essayerai de vous présenter un autre outil « fait-maison » pour gagner du temps dans un autre billet mais pour le moment on va se concentrer sur la création d’un outil simple de gestion de l’affichage des VrayProxy.
1Mise en place
Avant de commencer à appréhender la bête, (je mets pas apprendre, j’ai pas franchement le sentiment d’être capable de vous apprendre MAXScript) voici deux petites notions de base. Le MAXScript Listener et le Macro Recorder doivent être actif afin d’enregistrer vos actions dans la scène et vous en donner les bouts de codes qui correspondent a vos actions. Faites le test, créer une box dans votre scène et votre MAXScript Listener vous donnera le code nécessaire pour refaire exactement la même action. La seconde chose à connaitre est l’utilisation du symbole « $ » (sans les guillemets) qui consiste à écrire » la sélection active ». Sachant cela en sélectionnant un objet de la scène, plutôt que d’utiliser son nom un simple « $ » suffira à dire que vous voulez travailler sur l’objet sélectionné. Petit raccourci bonus, Ctrl+D vous permet d’effacer le code inscrit dans la fenêtre.
2Observation
Maintenant que vous savez comment ça marche, attaquons la création de notre script! Je crée une teapot et l’exporte en VrayProxy. Une fois l’opération termine, lancez le MAXScript Listener avec le Macro Recorder actif. Vous trouverez ça dans le menu MAXScript. Selectionnez votre teapot et modifiez le Display mode de votre proxy. Vous remarquerez que le code change et donc que :
- bounding box = 0
- preview from file = 1
- preview from file (faces) = 3
- point = 2
3Tester le code
- $.display = 3
4Traduire en script
Maintenant que nous savons a quoi nous en tenir au niveau des valeurs correspondant a l’affichage souhaité, reste a créer un code capable de s’adapter et agir en fonction de l’etat d’affichage actuel du proxy. Evidemment il faut tout de même quelques notions de code pour cette partie mais l’ensemble reste assez simple a comprendre et l’aide de MaxScript étant un vrai bijou (on en reparlera plus bas) je crois que ce genre de fonction reste accessible a tous.
La première étape consiste a penser la manière la plus simple et efficace pour écrire notre bout de code. Le raisonnement est assez simple:
- Je n’utilise que deux modes d’affichage, bounding box et preview from file soit 0 et 1
- Comme on l’a vu dans la partie observation, le reste des options a une valeur en code plus élevés soit 2 et 3
Sachant cela, je n’ai pas besoin de détecter la valeur actuelle de l’objet pour le modifier de la bonne façon, puisque je peut me servir de la valeur display comme référence. Afin de couvrir tout le champ des possible, cela nous donne une logique du style « Si la valeur display de la sélection actuelle est plus grande ou égale a 1, elle devient 0, sinon elle devient 1″ En écrivant ceci en code, il sera en manière de réagir correctement si la sélection est en mode 0, 1, 2 et 3. Evidemment cela implique que le tous les VrayProxy soit déjà dans le même mode, mais pour un premier script (et pour mon workflow sur cette scène) c’est amplement suffisant. Revenons-en au code, je traduis la phrase exactement comme on l’a pensé plus haut :
- if $.display >= 1 then ($.display =0) else $.display = 1
Et voila! Une simple ligne de code qui change de manière simple et efficace toute la gestion de ma scène :) Vous vous en doutez, ce genre de petits bouts de code change vraiment la donne en terme de productivité! J’ai toujours préféré regarder un ordi travailler…
5Rendre le Script fonctionnel
C’est ici que les choses se complique. Pas tant que ça si vous avez déjà des notions en script, je pense particulièrement a l’AcionScript 3, mais il va falloir comprendre l’utilisation de « for ». C’est assez simple, le but est de dire en code: « Pour chaque objet dans la sélection, tu appliques ceci. » Ceci étant notre précédente ligne de code. Ainsi nous allons devoir transformer notre basique « $ » afin qu’il puisse marcher avec tout le monde, ce qui nous fait:
for i in selection do ( if i.display >= 1 then i.display = 0 else i.display = 1 )
6Enregistrer le script
La dernière étape n’est pas une obligation, c’est juste ma manière de sauvegarder/gérer mes scripts. Pour cela je le convertis en macro afin de pouvoir le gérer dans le panneau de configuration de 3dsMax. Ca a l’avantage de pouvoir ensuite se rajouter dans une toolbar ou un menu… ou vous voulez en fait
macroScript Disp_Proxy category:"Matt" buttonText:"Disp_Proxy" tooltip:"www.mattguetta.com"
(
for i in selection do
(
if i.display >= 1 then i.display = 0 else i.display = 1
)
)
Une fois le fichier créer, enregistrez-le dans votre dossier script. Faites un Run Script et vous pourrez ensuite le trouver dans le « Customise User Interface ».
7Se servir de l’aide de MAXScript
L’aide de MAXScript est franchement top, je voudrais juste souligner un point: l’installation en locale. Je vais pas vous refaire le topo mais pour ceux que ça intéresse je vous invite a lire: MAXScript Help for 3dsMax 2012


























