Sub Surface Scattering (ou SSS)

Introduction

 

MAYA

Assigner un shader SSS à un objet

Régler le SSS

Le mot de la fin

 

XSI

Assigner un shader SSS à un objet

Régler le SSS

Le mot de la fin

 

Introduction

Premièrement, qu'est-ce que le subsurface scatering? C'est un peu compliqué à expliquer. Imaginez une bougie. La cire près de la flamme est éclairée de "l'intérieur." grâce à la répercussion de la lumière de la bougie à l'intérieure de la cire.

Ou, prenez votre main, mettez la près d'une lampe. Votre peau n'étant pas complétement opaque, les pourtours de votre main apparaitront rouge.

(je me suis cramé la main pour vous faire cet exemple, je vous suggère de dire "oooooh" et de ne pas faire de critiques sur mes ongles rongés et sales. Merci)

 

Pourquoi alors ne pas simplement utiliser le paramètre transluscence des matériaux, puisqu'il sert à ça également? Parce que ceux-ci ne sont pas volumique. A comprendre, la lumière ne se diffusera pas selon le volume mais uniformement. La transluscence est très utile pour des murs en papier style japonais, ou alors gérée avec des maps complexe. Quoi qu'il en soit, la transluscence appliquée tel quel fait des trucs assez dégueulasse.

Le SSS permet aussi de faire apparaitre plusieurs niveaux de "peau". La peau, les veines, la chaire, tout ce qu'on ne vois que sous un certain éclairage.

De plus, le SSS est "relativement" rapide.

(je m'excuse par ailleur si je fais pleins de comparaisons maya/xsi dans la partie XSI du tuto, c'est plus fort que moi)

 

MAYA

Assigner une shader de SubSurface Scattering

 

Pour ce tutorial, nous allons prendre un personnage tout simple:

 

Il a pour l'instant un simple lambert de couleur chaire appliquée pour le peau.

 

ce qui est bien, mais pas top. Nous allons donc lui assigner un shader de SSS

Je lui ai fait un éclairage 3 points basique. Pour le tutos sur le SSS, pour bien voir comment ça se passe, il est important de lui placer une lampe derrière (la counter light de l'éclairage 3 points), c'est elle qui vous permetra vraiment de voir comment ça se passe.

 

Ce qui suit marche pour la version 7.0. Dans la version 8 il y a une option pour obtenir un SSS extrememnt basique mais vraiment facilement. Cependant, si vous voulez un "vrai" SSS, la méthode suivante reste celle à appliquer.

 

Je vous conseille de bien vous accrocher pour cette partie, parce que le SSS ne s'applique pas simplement. Il faut faire une suite de manipulation un peu olé olé sans lesquelles votre shader ne marchera pas.

Avant de commencer vérifiez que mental ray est bien loadé. Car oui, le SSS ne s'utilise qu'avec mental ray.

 

Dans l'hypershade, choisissez vos mental ray nodes et créez un miss_fast_skin_maya

 

Cela vous ouvre votre attribut editor (ou double cliquez sur votre nouvel icône dans l'hypershade) et là, cliquez sur l'assignement de map dans l'onglet lightmap.

 

Cela va vous créer automatiquement un node, le mentalrayTexture qui devrait s'ouvrir tout aussi automatiquement (ou sinon accédez-y à la main.)

 

Cochez la case "Writable", rentrez une taille. Il est recommandé de mettre en Width une résolution égale à deux fois la résolution de votre rendu final (si vous êtes en 640*480, par exemple, allors rentrez 640*2, soit 1280). En height, j'ai lu qu'il n'étais pas nécessaire de rentrer une résolution plus haut que votre réso de rendu (en l'occurence 480, soit une rézo de 1280*480), j'ai aussi lu que votre image finale devais être en square (donc, ici, 1280*1280)... Maya marchant la pluspart du temsp mieux avec des images square, j'ai une préférence pour la 2nd version. Dans la mesure ou je n'ai pas remarqué de différence flagrante, je vous laisse juge.

Il est important de mettre le File Size Depth en 32 bits. Sinon ça ne marche pas. Ne me demandez pas pourquoi alors on a le choix, je n'en sais rien.

Dans l'image name, nottez le chemin désiré pour l'endroit ou cette image sera écrite. Par exemple \SSSS

(notez qu'après avoir fait un rendu et si vos lumières et vos objets ne changent pas ni de place ni d'intensité, pour pourrez décocher le writable, cela évitera à la map de se recalculer à chaque frame.)

 

 

Ce n'est pas fini.

 

Retournez dans votre hypershade, cliquez sur votre misss_fast_skin_maya, affichez ses outputs en cliquant sur l'icone de la double flèche puis cliquez sur votre misss_fast_skin_mayaSG

 

Dans l'attribut editor, cela vous ouvre une nouvelle fenêtre

Ouvrez l'onglet "mental ray" et cliquez sur l'assignement à la case Light Map Shader

Cela vous ouvre le menu de Create Render Node

dans l'onglet "Lights Maps" assignez un miss_fast_lmap_maya

 

On y est presque (quand je vous disais qu'assigner un SSS n'est pas une partie de plaisir):

Revenez dans votre hypershade. Vous devriez avoir quelque chose comme ça:

si ce n'est pas le cas et que votre miss_fast_lmap_maya n'apparait pas, allez simplement le chercher dans l'onglet "Utilities". Mais normalement il y est.

Une dernière chose à faire et on sera bon.

cliquez sur votre miss_fast_lmap_maya

et avec le bouton central de votre souris, faites un glissé/déposé de votre mentalrayTexture dans le Lightmap de l'onglet Lightmap Write de votre miss_fast_lmap_maya

 

Assignez votre shader à votre objet. faites un rendu pour voir:

 

Félicitation! Votre shader est enfin appliqué!

 

 

Réglage du SSS

Lightmap

Algorithm Control.

Diffuse Layer

Subsurface Scattering Layer

Specularity

Bump

Lightmap

S'il y a pleins de petits points comme sur mon image augmentez vos samples dans l'onglet lightmap (restez en multiple de 4: 32, 64, 128, etc.)

 

 

 

Algorithm Control.

 

Cette tête est nettement trop translucide. Nous voulons obtenir quelque chose de plus opaque. Le nez, par exemple, ne devrait pas être aussi rouge. Comme le SSS est un shader volumique, il réagit en fonction de la taille de votre objet dans la scene. En l'occurence, l'objet est trop petit. Vous avez deux possibilité: agrandir l'objet pour atteindre ce que vous voulez (ce qui est une méthode un peu barbare et qui va vous causer pas mal de problème), ou aller jouer avec le scale conversion dans l'onglet Algorithm Control.

Le falloff corespond à la dureté des transitions entre les couche. A 1, la transition est très douce, à 10 elle est extrêmement nette.

Le screen composite compose les couches en utilisant des calques en mode "screen" (l'équivalent du "screen" de photoshop), à moins d'avoir un réel besoin de rapidité (si vous mixez le sss à du hdri par exemple) il vaux mieux le laisser cocher.

Testez tout ça jusqu'à avoir quelque chose qui vous convienne plus ou moins

L'idéal étant de récupérer quand même vos ombres tout en gardant des parties (genre les oreilles) un peu rouge rose.

Pour ma part, je suis raisonablement content avec un scale conversion de 17 et un falloff de 2.

Il est impossible de donner une valeur exacte qui irait partout puisque ça dépend de son objet, de sa taille, de la transluscence qu'il a etc.

Vous remarquerez aussi au passage que de bien régler son scale conversion permet d'effacer défintivement les "petits points" parasite qu'il restait sur le shader.

 

 

 

Diffuse Layer

 

Attaquons nous maintenant au paramètre diffuse.

Le diffuse, comme son nom l'indique, difuse une couleur dans tout le shader, de façon uniforme. Trop le booster peux complétement cramer votre shader, mais cela permet deux choses importantes:

La première, donner une légère contre-teinte. Par défaut, elle est réglèe sur un bleu pâle. C'est, normalement la complémentaire de votre scatter color, mais vous pouvez décider de mettre ce que vous voulez. Je vous déconseille fortement de mettre quelque chose de trop présent à l'écran, cela doit être une simple impression.

Il y a une autre école qui dis de carrement câbler votre image de skin dedans, mais à mon avis c'est se priver de la puissance du sss.

La seconde chose importante que permet la diffuse, est d'éclaircir (ou de foncer) votre shader de façon globale grâce au paramètre Diffuse Weight

Personelement, j'ai mis la couleur un ton légérement plus clair et le Diffuse Wieght à 0,350

L'Overall color permet également de prendre le pas sur la couleur générale du shader. Si vous le mettez noir, tout votre shader sera noir. S'il reste blanc, alors ça sera au SSS de faire tout le boulot.

 

 

 

Subsurface Scattering Layer

 

Passons enfin au coeur de la bête, le subsurface scattering layer

Qu'est-ce que nous avons là? Trois couleurs et plusieurs paramètres.

Tout d'abord, qu'est-ce que cela représente?

La première, l'Epidermal Scatter, correspond à la peau en surface. Si vous cablez une map de couleur là dedans, c'est là que vous mettrez les grans de beauté, les taches de rousseur, la peau de manière générale comme on entend le terme "peau"

Pour une définition plus précise, je vous renvoie à la wikipedia:

En anatomie, l'épiderme est la couche superficielle de la peau dont la surface est formée de cellules mortes kératinisées, qui se desquament. L’épiderme (étymologiquement formé en grec des mots epi, sur et derma, peau) désigne le tissu de nature épithéliale qui recouvre le derme, partie profonde de la peau, qui est un tissu de nature conjonctive.

La seconde, appelée ici Subdermal Scatter correspond donc au Derme.

La wikipedia nous dit ceci:

Le derme est irrigué par le sang (système sanguin en candélabre), le derme prend en charge la nutrition de l'épiderme par diffusion. Ses fibres protéiques font de lui une véritable assise pour l'épiderme dont le vieillissement est à l'origine de l'apparition des rides et autres signes du vieillissement cutané.

Nous allons donc représenter ici les veines, veinules et la couleur générale de ce que ça peux représenter. (ne vous contentez pas de dessiner les veines, attribuez aussi une couleur générale).

La troisième, le back scatter représenterait plus la chair, le gras, tout ce qui est sous la peau. Le vif du sujet! Ce qui n'apparait que quand une lumière très forte (ou une vilaine coupure, mais ça c'est une autre histoire) éclaire la chose.

 

 

Interessons nous au paramètre "Weight"

Il défini combien cette couche affectera le shader. Si vous mettez l'Epidermal Scatter Weight à 1, par exemple, alors l'épiderme aura une très grand importance (à fortiori, s'il est à 1, il n'y a que lui qui sera visible)

 

Le Scatter Radius correspond, en unité de scène à combien de profondeur ce "scatter" agira. En gros, plus il est élevé, plus sa couche est profonde.

Pour le Back Scatter Depth, ce paramètre correspond à quelle distance la "chaire" commence. Normalement, elle devrait être de la même valeur que le Subdermal Scatter Radius.

 

Faites vos réglages. Pour que ça soit plus facilement repérable, vous pouvez, par exemple, mettre des couleurs super funky et bien différentes à vos couches afin de bien les repérer et de voir exactement où et quand elles agissent.

Après quelques réglages, je suis assez satisfait de mon résultat:

 

Notez que je n'ai câblé aucune map ou autre, et que pour obtenir un SSS qui impresionne vraiment, c'est quand même assez important de câbler des trucs. (mais bon, sur ce genre de personnage...)

 

 

Specularity

 

 

Les paramètres de speculaire pour le SSS sont également très poussés..

Le overall weight multiplie tout vos weight de speculaire par ce chiffre. La pluspart du temps, on le laisse donc à 1 et on utilise les valeurs normales.

L'Edge Factor corespond à la dispersion de votre speculaire. Plus il est grand plus la speculaire sera tranchée. A 1, elle toute douce et déborde un peu. Cette valeure influe sur la première ET la seconde speculaire.

La couleur des speculaire.. ben.. c'est sa couleur...pas besoin d'en dire plus.

Le weight devrait corespondre au weight de la couche Epidermical pour le Primary specular, et à la couche Subdermical pour la Secondary. Mais, encore une fois, libre à vous de faire vos propres réglages si besoin est.

Le paramètre Edge Weight agit en tant que multiplicateur pour la couleur de spéculaire mais seulement pour les faces qui se trouvent perpendiculaires à la caméra (les "angles").

Le Shininess est l'équivalent du paramètre Eccentricity sur un blinn, sauf qu'il fonctionne à l'envers. A 1, la speculaire s'étend beaucoup, à 100 elle est très dure et pointue.

Les paramètres de reflets fonctionnent pareil.

Il nous reste une chose à voir:

 

 

Bump

 

Pour une raison on ne peux plus obscure, le bumpmap ne se connecte pas tout seul sur un shader SSS. Il faut le faire à l'ancienne: à la main.

Dans l'hypershade, dans le menu "Create Maya Nodes" dans la section "general Utilities" cliquez sur Bump 2d

Dans la bump value, cablez ce que vous voulez (une image, une fractacle, etc.)

câblez ensuite votre node de bump (par un drag&drop avec le bouton du milieu depuis l'hypershade) dans le bump shader de votre SSS

 

Votre bump fonctionne maintenant exactement comme un bump normal.

Notez juste que vu la complexité du shader, le bump rallonge considérablement les temps de calculs

Attention cependant, si vous décablez le bump après coup, il se peux que ça bug (à vrai dire, ça bug à chaque fois chez moi). Je vous conseil donc de faire une sauvegarde de sécurité avant de câbler le bestiau.

 

 

Le mot de la fin

 

 

Pour me faire un petit plaisir, j'ai fait trois rendus. Lambert>Blinn>SSS

et le classique "lumière qui passe derrière"

 

 

Je pense avoir fait le tour.

Ce shader est très puissant, assez léger au calcul mais très long à paramétrer.

 

 

 

Comme toujours, si vous avez des question, astuces, remarques, n'hésitez pas à me contacter.

Pour écrire ce tuto, je me suis inspiré de nombreux tutoriaux sur le net. Je conseille particulièrement les tutoriaux de

Jared Martin

Modulok

et le tuto vidéo gratuit des Gnomons

 

Fred

frederic.naville@infomaniak.ch

 

 

 

XSI

Assigner un shader SSS à un objet

 

Une fois encore XSI se montre de loin plus simple que pour maya. Cette simplicité implique, en retour, un moins grand nombre de réglage possible, mais dans 99,99% des cas, je dois dire que c'est nettement suffisant.

(et je m'étrangle un peu pour dire ça, étant plutôt pro-maya...)

Pour ce tuto, nous allons prendre une simple sphère avec un éclairage sommaire, dont une backlight, afin de faire ressortir les propriétés du SSS

 

 

Ouvrez le materiel editor (view, rendering/texturing>materiel editor)

Créez un nouveau materiel (create material), assignez le à votre objet (glisser déposé avec le bouton central sur votre objet)

Créez ensuite un node de fast surface scattering shader (nodes>Illumination>Fast Skin Shader

Câblez ensuite votre SSS_Fast_Skin dans votre material (glissé/déposé de la petite pastille violette de votre SSS dans votre material, et choisissez la seule option possible)

Testez votre rendu. Et voilà, c'est câblé. (oui oui oui, c'est plus facile que Maya. Et étonnement, ça marche tout aussi bien....)

 

 

 

 

Régler le SSS

 

Etant un materiel mental ray, les paramètres sont sensiblements les même dans maya et dans XSI. Si vous connaissez l'un, vous connaissez l'autre.

Diffuse

Scatter

Common Scatter control

Specular

 

Diffuse

 

Attaquons nous maintenant au paramètre diffuse.

Le diffuse, comme son nom l'indique, difuse une couleur dans tout le shader, de façon uniforme. Trop le booster peux complétement cramer votre shader, mais cela permet deux choses importantes:

La première, donner une légère contre-teinte. Par défaut, elle est réglèe sur un bleu pâle. C'est, normalement la complémentaire de votre scatter color, mais vous pouvez décider de mettre ce que vous voulez. Je vous déconseille fortement de mettre quelque chose de trop présent à l'écran, cela doit être une simple impression.

Il y a une autre école qui dis de carrément câbler votre image de skin dedans, mais à mon avis c'est se priver de la puissance du sss.

La seconde chose importante que permet la diffuse, est d'éclaircir (ou de foncer) votre shader de façon globale grâce au paramètre Diffuse Weight

Personnellement, j'ai mis la couleur un ton légérement plus clair et le Diffuse Wieght à 0,350

L'Overall color permet également de prendre le pas sur la couleur générale du shader. Si vous le mettez noir, tout votre shader sera noir. S'il reste blanc, alors ça sera au SSS de faire tout le boulot.

t

 

 

 

Scatter

 

Passons enfin au coeur de la bête, le subsurface scattering layer

Qu'est-ce que nous avons là? Trois couleurs et plusieurs paramètres.

Tout d'abord, qu'est-ce que cela représente?

La première, l'Epidermal Scatter, correspond à la peau en surface. Si vous cablez une map de couleur là dedans, c'est là que vous mettrez les grains de beauté, les taches de rousseur, la peau de manière générale comme on entend le terme "peau"

Pour une définition plus précise, je vous renvoie à la wikipedia:

En anatomie, l'épiderme est la couche superficielle de la peau dont la surface est formée de cellules mortes kératinisées, qui se desquament. L’épiderme (étymologiquement formé en grec des mots epi, sur et derma, peau) désigne le tissu de nature épithéliale qui recouvre le derme, partie profonde de la peau, qui est un tissu de nature conjonctive.

La seconde, appelée ici Subdermal Scatter correspond donc au Derme.

La wikipedia nous dit ceci:

Le derme est irrigué par le sang (système sanguin en candélabre), le derme prend en charge la nutrition de l'épiderme par diffusion. Ses fibres protéiques font de lui une véritable assise pour l'épiderme dont le vieillissement est à l'origine de l'apparition des rides et autres signes du vieillissement cutané.

Nous allons donc représenter ici les veines, veinules et la couleur générale de ce que ça peux représenter. (ne vous contentez pas de dessiner les veines, attribuez aussi une couleur générale).

La troisième, le back scatter représenterais plus la chair, le gras, tout ce qui est sous la peau. Le vif du sujet! Ce qui n'apparait que quand une lumière très forte (ou une vilaine coupure, mais ça c'est une autre histoire) éclaire la chose.

 

 

Interessons nous au paramètre "Weight"

Il défini combien cette couche affectera le shader. Si vous mettez l'Epidermal Scatter Weight à 1, par exemple, alors l'épiderme aura une très grand importance (à fortiori, s'il est à 1, il n'y a que lui qui sera visible)

 

Le Scatter Radius correspond, en unité de scène à combien de profondeur ce "scatter" agira. En gros, plus il est élevé, plus sa couche est profonde.

Pour le Back Scatter Depth, ce paramètre correspond à quelle distance la "chaire" commence. Normalement, elle devrait être de la même valeur que le Subdermal Scatter Radius.

 

Faites vos réglages. Pour que ça soit plus facilement repérable, vous pouvez, par exemple, mettre des couleurs super funky et bien différentes à vos couches afin de bien les repérer et de voir exactement où et quand elles agissent.

Après quelques réglages, je suis assez satisfait de mon résultat:

f

 

Notez que je n'ai câblé aucune map ou autre, et que pour obtenir un SSS qui impresionne vraiment, c'est quand même assez important de câbler des trucs. (mais bon, sur ce genre de personnage...)

 

Common Scatter Controls

Le lightmap samples correspond au nombre de points lancé par votre lightmap. Concretement , si vous voyez apparaitr des "points" sur votre objet, c'est que ce paramètre est trop bas.

 

Le falloff corespond à la dureté des transition entre les couche. A 1, la transition est très douce, à 10 elle est extrmement nette.

Le Bias coorespond à la transluscence globale de votre shader. Plus le bias est élevé plus votre objet est opaque. A l'inverse plus sa valeure est basse, plus il diffusera la lumière.

Pourquoi alors peut ont avoir des valeurs négatives? Le 0 correspond à un SSS correctement réglé pour de la chaire SI l'objet à exactement la bonne taille en unité de scène. Comme ce shader est un shader volumique et qu'il réagit différement si l'objet est gros ou non, le bias permetra d'affiner les réglages déjà obtenu grâce au radius de chaque couche. Personellement, je fonctionne à l'inverse: je gère d'abord le bias et ensuite j'affine avec les radius.

 

 

Specular

 

 

Les paramètres de speculaire pour le SSS sont également très poussés..

Le weight multiplie tout vos weight de speculaire par ce chiffre. La plupart du temps, on le laisse donc à 1 et on utilise les valeurs normales.

L'Edge Factor corespond à la disperssion de votre speculaire. Plus il est grand plus la speculaire sera tranchée. A 1, elle toute douce et déborde un peu. Cette valeure influe sur la première ET la seconde speculaire.

La couleur des speculaire.. ben.. c'est sa couleur...pas besoin d'en dire plus.

Le weight devrais corespondre au weight de la couche Epidermical pour le Primary specular, et à la couche Subdermical pour la Secondary. Mais, encore une fois, libre à vous de faire vos propres réglages si besoin est.

Le paramètre Edge Weight agit en tant que multiplicateur pour la couleur de spéculaire mais seulement pour les faces qui se trouvent perpendiculaires à la caméra (les "angles").

Le Shinyness est l'équivalent du paramètre Eccentricity sur un blinn, sauf qu'il fonctionne à l'envers. A 1, la speculaire s'étend beaucoup, à 100 elle est très dure et pointue.

Les paramaètres de reflets fonctionnent pareil.

 

 

Pour mettre du bump, faites le comme vous faites d'habitudes.

 

 

Le mot de la fin

 

 

Pour me faire un petit plaisir, j'ai fait trois rendus. Lambert>Blinn>SSS

e

et le classique "lumière qui passe derrière"

r

 

 

Je pense avoir fait le tour.

Ce shader est très puissant, assez léger au calcul mais très long à paramétrer.

 

 

 

Comme toujours, si vous avez des question, astuces, remarques, n'hésitez pas à me contacter.

Pour écrire ce tuto, je me suis inspiré de nombreux tutoriaux sur le net. Je conseille particulièrement les tutoriaux de

Jared Martin

Modulok

et le tuto vidéo gratuit des Gnomons

 

Fred

frederic.naville@infomaniak.ch