Vous lisez
Mari : Manipuler les Shaders en Python

Qu’est-ce qu’un Shader dans Mari?

Les Shaders contrôlent la façon dont Mari affiche le modèle sur lequel vous êtes en train de travailler. Par défaut, Mari propose 4 types de Shaders permettant d’afficher votre travail selon les caractéristiques et filtres suivants:

  • logo-mari-ViewCurrentChannelCurrent Channel : Le résultat du Channel courant
  • logo-mari-ViewCurrentLayerAndBelow1Current Layer & Below : Le Layer courant et ceux en dessous
  • logo-mari-ViewCurrentLayer1Current Layer : Uniquement le Layer courant (peinture et jamais masque)
  • logo-mari-ViewCurrentPaintCurrent Paint Target : Le Layer courant, peinture ou masque

Vous pouvez également créer vos propres Shaders personnalisés en combinant diffuse et spéculaire par exemple. Puis mettre en place des Channels à l’intérieur et spécifier leurs modes d’apparition dans le Shader.
Ainsi, il est possible de créer un Shader prenant en compte les détails de plusieurs Channels.

Les Shaders n’affectent pas le contenu des Channels. Par exemple, si
vous avez un Shader avec des Channels à la fois diffus et spéculaires, les effets de tous les Channels sont affichés. Mais les Channels restent toujours séparées et contiennent des données différentes.

the-foundry-mari-interface-shaders-pannel

Trouver le Shader d’un objet

1
2
obj = mari.geo.current() # Objet courant
curShader = obj.currentShader()

Gérer les paramètres d’un Shader

Pour trouver la liste des paramètres:

1
2
obj = mari.geo.current() # Objet courant
print "\n".join(obj.currentShader().parameterNameList())

On obtient la liste suivante:

Ambient
AmbientOcclusion
Diffuse
Emissive
Environment
Specular
SpecularShininess
DisplacementBias
DisplacementRange
DisplacementScale
TessellationMax
BumpWeight

Pour récupérer la valeur des paramètres:

1
obj.currentShader().getParameter("NomDuParametre")

Et pour modifier la valeur:

1
obj.currentShader().setParameter("NomDuParametre", Valeur)

Gérer les inputs d’un Shader

Pour trouver la liste des inputs:

1
2
obj = mari.geo.current() # Objet courant
print '\n'.join(obj.currentShader().inputNameList())

On obtient la liste suivant:

DiffuseColor
Normal
EnvironmentColor
AmbientOcclusion
EmissiveColor
SpecularColor
SpecularShininess
Bump
Vector
Displacement

Pour récupérer la valeur des inputs:

1
2
inputList = obj.currentShader().inputList()
diffuseInput = inputList[0][1] # On récupère la valeur en se déplaçant dans le tableau

Et pour modifier la valeur:

1
2
chan = mari.geo.current().findChannel('ChannelName') # On récupère le Channel
obj.currentShader().setInput('Normal', chan) # On le met en entrée du input souhaité

Qu'avez-vous pensé de cet article ?
J'aime
0%
Merci
0%
Pratique
0%
Incomplet
0%
Rien de neuf
0%
A propos de l'auteur
Olivier Schmitt
Photographe professionnel, originaire d'Alsace (France), ancien Directeur Technique sur les films d'animation "Minions", "Moi, Moche et Méchant" et "Le Lorax".
Commentaires
Laisser une réponse

Laisser une réponse