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:
- Current Channel : Le résultat du Channel courant
- Current Layer & Below : Le Layer courant et ceux en dessous
- Current Layer : Uniquement le Layer courant (peinture et jamais masque)
- Current 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.
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é |