
Subsurface Scattering (SSS) in Evergine
Einführung
Evergine unterstützt jetzt Subsurface Scattering (SSS), eine wichtige Funktion für fotorealistische Materialien. Das ist ein bedeutender Fortschritt bei der Darstellung komplexer Materialien wie Haut, Wachs, Marmor und anderer transluzenter Oberflächen, bei denen Licht unter die Oberfläche eindringt und dort gestreut wird, bevor es wieder austritt.
Was ist SSS?

Abbildung 1: Verschiedene transluzente Materialien (Haut, Wachs und Blätter)
Subsurface Scattering (SSS) beschreibt, wie Licht mit transluzenten oder halbtransparenten Materialien interagiert. Anders als Standard-Shading-Modelle, die nur die Reflexion an der Oberfläche berücksichtigen, bezieht SSS ein, wie Licht in ein Material eindringt, darin gestreut wird und an anderen Stellen wieder austritt. Dieser Effekt ist entscheidend, um das weiche, diffuse Leuchten organischer und transluzenter Objekte wiederzugeben und sie lebensechter wirken zu lassen.

Abbildung 2: Unterschiede im Lichtverhalten zwischen Standard- und SSS-Oberflächen.
Echtzeit-Implementierung in Evergine
Physikalisch exaktes SSS lässt sich derzeit nicht in Echtzeit rendern. Evergine verwendet jedoch eine optimierte SSS-Lösung, die Performance und Realismus in Einklang bringt. Als Vorbild diente uns die Lösung von Jorge Jimenez, die in diesem Artikel beschrieben wird.
Dazu haben wir in Evergine einen neuen SSSEffect erstellt und das SSS-Rendering in zwei Bereiche aufgeteilt:
Transmission (Transluzenz)

Abbildung 3: Charakteristische Transmission der Haut am Ohr.
Transmission bezeichnet das Phänomen, dass Licht ein transluzentes Objekt durchdringt – typischerweise sichtbar an Stellen wie Ohren und Nasenflügeln.
Dies ist im neuen SSSEffect mithilfe der Shadow Map der Lichtquelle umgesetzt. Für jedes Pixel berechnen wir den Abstand zwischen dem gerenderten Pixel und der Tiefe in der Shadow Map. So ermitteln wir, wie dick die Oberfläche an dieser Stelle ist, und können berechnen, wie viel Licht hindurchdringt.
Das folgende Diagramm veranschaulicht diese Konzepte:

Abbildung 4: Die Punkte z1 und z2 werden in die Shadow Map der Lichtquelle projiziert, sodass sich die Tiefe beider Punkte berechnen lässt.
Zur Vervollständigung dieses Effekts haben wir eine maximale Distanz festgelegt und eine Gradientenfunktion zur Einfärbung des Lichts verwendet.
Diffuse Blur

Dieser Effekt basiert auf einem effizienten Compute Shader (SSSBlur), der mithilfe eines Diffusionsprofils einen diffusen Weichzeichner im Screen Space anwendet und so einen farbigen Effekt erzeugt. Er eignet sich hervorragend, um Hautdetails weicher erscheinen zu lassen und die Lichtstreuung zu simulieren.
Dazu berechnet der SSSEffect die Stärke des Weichzeichnungseffekts (anhand der Shader-Parameter) und speichert sie im Distortion-Attachment des GBufferPass, und zwar im Kanal B. Anschließend verwendet der DefaultPostprocessing Graph diese Textur und wendet zwei SSSBlur-Durchgänge (horizontal und vertikal) an, wobei Normal-Textur, Tiefe und Sichtfeld der Kamera einfließen, um das Endergebnis zu erzeugen.

Abbildung 5: Endergebnis mit beiden angewandten Rendering-Techniken.
SSS-Materialien in Ihrem Projekt erstellen
Ihren Materialien SSS-Eigenschaften hinzuzufügen, ist ganz einfach. Folgen Sie diesen Anweisungen (in Evergine Studio):
- Öffnen Sie ein Material oder erstellen Sie ein neues. Wählen Sie es aus, um den Material Editor zu starten.
- Klicken Sie auf das Kombinationsfeld FX, um die Liste der in Ihrem Projekt verfügbaren Effects zu öffnen.

- Wählen Sie SSSEffect. Dabei bleiben die bisherigen Parameter eines StandardEffect erhalten.
- Passen Sie Ihr Material mit den folgenden Parametern an:
- SSS Scatter: (Standard: 0.045) Legt die „Breite“ des SSS-Effekts fest, also die maximale Distanz, über die sich Licht durch die Oberfläche streuen kann.
- SSS Intensity: (Standard: 0.1) Steuert die Stärke des Effekts.
- SSS Bias: (Standard: 0.003) Passt die Distanz an, um die bei der Berechnung der Transmission verkürzt wird, und hilft so, Artefakte zu vermeiden (ähnlich wie Depth Bias beim Shadow Mapping).
- SSS Translucency Color: (Standard: D05749FF) Die Farbe des Transmissionseffekts.
- SSS Translucency Texture: Eine Farbtextur, mit der sich die Transluzenzfarbe in verschiedenen Bereichen Ihres Modells anpassen lässt.
- SSS Scatter Texture: Wendet einen Multiplikationsfaktor auf den Parameter SSS Scatter an und ermöglicht so Variationen der Oberflächendicke.
- Im nächsten Schritt fügen Sie Ihrer Szene eine Postprocessing Graph-Entität hinzu.
- Wählen Sie die Postprocessing-Graph-Entität aus. Aktivieren Sie auf der Registerkarte SSS das Kontrollkästchen Enabled. Dadurch wird der diffuse SSS-Weichzeichner aktiviert.
- Passen Sie die Parameter an:
- Quality: Legt die Anzahl der Blur-Samples pro Durchgang fest. 3 Optionen:
- SSS_QUALITY_OFF
- SSS_QUALITY_1
- SSS_QUALITY_2
- SSS Width Factor: (Standard: 0.075) Korrekturfaktor für den Parameter SSS Scatter des Materials.
- Quality: Legt die Anzahl der Blur-Samples pro Durchgang fest. 3 Optionen:
Sobald Sie sowohl das Material als auch die Postprocessing-Parameter konfiguriert haben, erzielen Sie beeindruckende Ergebnisse wie diese schöne Hand.

Zusammenfassend ist die Implementierung von SSS ein weiterer Schritt auf dem Weg zu unserem Ziel, realistische Charaktere und Avatare zu erschaffen, die mit dem Benutzer interagieren und lebendig wirken. Bleiben Sie dran – weitere Neuerungen folgen!

