Home |
|
||||||
|
|||||||
Nous allons voir dans ce tutorial quelques shaders de base de RenderMan. Nous n'allons pas expliquer toute la théorie de l'éclairage, celle-ci est très bien expliquer dans le livre de Rémy Malgouyres : Algorithmes pour la synthèse d'images et l'animation 3D : Cours et exercices corrigés . Nous allons revoir le shader constant, le shader matte puis le shader metal et enfin le shader plastic.
Le shader constant Le shader constantVoici le code :
Ce qui est fait dans le shader constant, c'est simplement copier l'opacité de départ Os dans l'opacité finale Oi. Ensuite la couleur finale Ci est calculée en fonction de la couleur de départ Cs et de l'opacité finale. Ainsi, l'objet garde sa couleur et devient plus ou moins transparent grâce à l'opacité.
Le shader matteJusqu'à present le shader utilisé ne donnait pas une impression de 3D. Il faut donc tenir compte de l'éclairage et de l'angle d'incidence sur la surface. Cet angle est symbolisé par le vecteur I qui part de l'oeil de l'utilisateur (la caméra) jusqu'au point d'impact de la lumière. Ce vecteur est une variable globale. Un autre vecteur important est le vecteur N qui est la normale au point de la surface. La première chose à faire est de récupérer les normales qui pointent vers l'extérieur. Pour ce faire, voici le code à taper : normal Nf = faceforward(normalize (N),I);. Ce bout de code permet de récupérer la bonne normale. Il faut toujours normer les normales... Nous allons faire un shader qui ne donne que la couleur diffuse de l'objet:
Et voici le résultat: Pour l'instant le résultat n'est pas probant. Mais on remarque la fonction diffuse qui permet la conposante diffuse de la couleur de l'objet.
Il faut récupérer maintenant toutes les positions pour les points de la surface. En effet, la fonction diffuse ne dépend que de Nf. I n'est donc pas encore utilisée. Pour donner du relief à l'objet, il faut prendre en compte la composante ambiente. Nous allons aussi ajouter les coefficients Ka et Kd pour pondérer la composante ambiante et la composante diffuse.
Et voici le résultat: La première chose à remarquer, c'est le ; après la déclaration des paramètres. Ensuite il faut remarquer que les paramètres sont initialisés. Ainsi, si l'utilisateur ne donne pas de valeur aux paramètres, ils auront la valeur 1.
Le shader metal
Le shader metal va lui réfleter la partie spéculaire de la couleur de l'objet, c'est à dire le reflet.
Pour cela nous allons utiliser la fonction specular. Mais il nous faudra aussi calculer le vecteur de reflection.
Ce vecteur est en fait l'opposé du vecteur I. Il faudra aussi l'intensité du reflet ainsi que son étalement (roughness en anglais).
Pour trouver le vecteur V, voici comment faire : vector V normalize(-I);
Et voici ce que donne ce shader : Le 0.1 est en fait l'étalement du reflet. On remarque que sur cette image, il n'y a que le reflet qui est visible. Pour palier au problème de la non-visibilité du reflet, il faut ajouter la composante ambiente à la lumière. Voici donc le code final du shader metal :
Et voici une boule métalisée : Nous retrouvons bien l'aspect métaliique recherché.
Le shader plasticPour l'instant nous avons créé un shader qui travaille sur le difus et un sur le spéculaire. Mais, dans la vie de tous les jours, les objets possèdent toutes ses composantes. Nous allons donc finir ici ce tutorial en créant le shader plastic.
Et voici une boule en plastique : Un nouveau paramètre a fait son apparition : specularcolor. Ce paramètre va permettre de changer la couleur du reflet. Sa valeur par défaut est 1, c'est à dire blanc.
|
|||||||
|
|||||||
![]() |