
Subsurface Scattering (SSS) dans Evergine
Introduction
Evergine intègre désormais la prise en charge du subsurface scattering (SSS), une fonctionnalité importante pour obtenir des matériaux photoréalistes. Il s’agit d’une avancée significative pour représenter des matériaux complexes comme la peau, la cire, le marbre et d’autres surfaces translucides, dans lesquelles la lumière pénètre et se diffuse sous la surface avant de ressortir.
Qu’est-ce que le SSS ?

Figure 1 Différents matériaux translucides (peau, cire et feuilles)
Le subsurface scattering (SSS), ou diffusion sous-surfacique, est un mécanisme qui explique la manière dont la lumière interagit avec les matériaux translucides ou semi-transparents. Contrairement aux modèles d’ombrage standard qui ne prennent en compte que la réflexion en surface, le SSS considère la façon dont la lumière pénètre dans un matériau, rebondit à l’intérieur et ressort en différents points. Cet effet est essentiel pour restituer la lueur douce et diffuse caractéristique des objets organiques et translucides, et les rendre plus réalistes.

Figure 2 Différences de comportement de la lumière entre une surface standard et une surface SSS.
Implémentation en temps réel dans Evergine
À l’heure actuelle, il n’est pas possible de rendre un SSS physiquement exact en temps réel. Evergine utilise toutefois une solution SSS optimisée qui équilibre performances et réalisme. Nous nous sommes inspirés de la solution créée par Jorge Jimenez, expliquée dans cet article.
Pour cela, nous avons créé un nouveau SSSEffect dans Evergine et avons divisé le rendu SSS en deux volets distincts :
Transmittance (translucidité)

Figure 3 Transmittance caractéristique de la peau au niveau de l’oreille.
La transmittance est le phénomène par lequel la lumière traverse un objet translucide, couramment observé au niveau des oreilles et des narines.
Elle est implémentée dans le nouveau SSSEffect, à l’aide de la shadow map de la lumière. Pour chaque pixel, nous calculons la distance entre le pixel rendu et la profondeur de la shadow map. Cela nous permet de connaître l’épaisseur de la surface en ce point et donc de calculer la quantité de lumière qui peut la traverser.
Le schéma suivant illustre ces concepts :

Figure 4 Les points z1 et z2 sont projetés dans la shadow map de la lumière, ce qui permet de calculer la profondeur des deux points.
Pour compléter cet effet, nous avons défini une distance limite et utilisé une fonction de dégradé pour teinter la lumière.
Flou diffus

Cet effet repose sur un compute shader (SSSBlur) efficace qui applique un flou diffus en espace écran à l’aide d’un profil de diffusion, produisant un effet coloré. Il excelle pour adoucir les détails de la peau et simuler la diffusion de la lumière.
Pour cela, le SSSEffect calcule l’intensité du flou (à partir des paramètres du shader) et la stocke dans l’attachment Distortion du GBufferPass, plus précisément dans le canal B. Ensuite, le DefaultPostprocessing Graph utilise cette texture et applique deux passes SSSBlur (horizontale et verticale), en utilisant la texture des normales, la profondeur et le champ de vision de la caméra pour produire le résultat final.

Figure 5 Résultat final avec les deux techniques de rendu appliquées.
Créer des matériaux SSS dans votre projet
Ajouter des propriétés SSS à vos matériaux est simple : il suffit de suivre ces instructions (dans Evergine Studio) :
- Ouvrez un matériau ou créez-en un nouveau. Sélectionnez-le pour lancer le Material Editor.
- Cliquez sur la liste déroulante FX pour ouvrir la liste des effets disponibles dans votre projet.

- Choisissez SSSEffect. Les paramètres précédents d’un StandardEffect seront conservés.
- Personnalisez votre matériau avec les paramètres suivants :
- SSS Scatter : (0.045 par défaut) définit la « largeur » de l’effet SSS, c’est-à-dire la distance maximale sur laquelle la lumière peut se diffuser à travers la surface.
- SSS Intensity : (0.1 par défaut) contrôle l’intensité de l’effet.
- SSS Bias : (0.003 par défaut) ajuste la distance de réduction pour le calcul de la transmittance, ce qui aide à éviter les artefacts (comme le depth bias en shadow mapping).
- SSS Translucency Color : (D05749FF par défaut) la couleur de l’effet de transmittance.
- SSS Translucency Texture : une texture de couleur utilisée pour ajuster la couleur de translucidité dans différentes zones de votre modèle.
- SSS Scatter Texture : applique un facteur multiplicateur au paramètre SSS Scatter, ce qui permet de faire varier l’épaisseur de la surface.
- L’étape suivante consiste à ajouter une entité Postprocessing Graph à votre scène.
- Sélectionnez l’entité Postprocessing Graph. Dans l’onglet SSS, cochez Enabled. Cela active le flou diffus SSS.
- Ajustez ses paramètres :
- Quality : définit le nombre d’échantillons de flou par passe. 3 options :
- SSS_QUALITY_OFF
- SSS_QUALITY_1
- SSS_QUALITY_2
- SSS Width Factor : (0.075 par défaut) le facteur de correction du paramètre SSS Scatter du matériau.
- Quality : définit le nombre d’échantillons de flou par passe. 3 options :
Une fois les paramètres du matériau et du post-traitement configurés, vous pouvez obtenir des résultats impressionnants, comme cette superbe main.

En résumé, l’implémentation du SSS est une nouvelle étape vers notre objectif : créer des personnages et des avatars réalistes, capables d’interagir avec l’utilisateur et de paraître vivants. Restez à l’écoute pour de prochaines nouveautés !

