marzo 18, 2025

Subsurface Scattering (SSS) en Evergine

Introducción

Evergine ha integrado soporte para soluciones de subsurface scattering (SSS), una característica importante para lograr materiales fotorrealistas. Esto representará un avance significativo en la representación de materiales complejos como piel, cera, mármol y otras superficies translúcidas donde la luz penetra y se dispersa debajo de la superficie antes de salir de ella.

¿Qué es SSS?

Figura 1: Diferentes materiales translúcidos (piel, cera y hojas)

Subsurface scattering (SSS) es un mecanismo que explica cómo la luz interactúa con materiales translúcidos o semi-translúcidos. A diferencia de los shading model normales, que solo consideran la reflexión en la superficie, SSS tiene en cuenta cómo la luz entra en un material, rebota dentro de él y sale en diferentes puntos. Este efecto es fundamental para capturar el suave y difuso brillo característico de los objetos orgánicos y translúcidos, lo que les da un aspecto más realista.

Figura 2 Diferencias en el comportamiento de la luz entre superficie standard y con sss.

Implementación en tiempo real en Evergine

Actualmente, no es posible renderizar SSS físicamente preciso en tiempo real. Sin embargo, Evergine utiliza una solución optimizada de SSS que busca un equilibra entre rendimiento y realismo. Nos inspiramos en el trabajo desarrollado por Jorge Jiménez, como se explica en este artículo.

Para lograr esto, hemos creado un nuevo SSSEffect en Evergine y hemos dividido el renderizado de SSS en dos áreas diferentes:

Transmitancia (Translucidez)

Figura 3 Transmitancia de la piel, característica de la oreja.

La transmitancia es el fenómeno en el que la luz pasa a través de un objeto translúcido, comúnmente observado en áreas como las orejas y las fosas nasales.
Esto se implementa en el nuevo SSSEffect, utilizando el shadow map de la luz. Para cada píxel, calculamos la distancia entre el píxel renderizado y la profundidad del shadow map. Esto nos ayuda a saber qué tan gruesa es la superficie en ese punto, lo que nos permite calcular cuánta luz puede pasar a través de ella.

El siguiente diagrama explica estos conceptos:

Figura 4 Los puntos z1 y z2 son proyectados en el shadow map de la luz para calcular el grosor de la superficie en ambos puntos.

Para completar este efecto, establecemos un límite de distancia y usamos una función de gradiente para tintar la luz.

Diffuse Blur

Este efecto se basa en un Compute Shader eficiente (SSSBlur) que aplica un desenfoque difuso en Screen Space utilizando un perfil de difusión, resultando en un efecto colorido y realista. Es excelente para suavizar los detalles de la piel y simular la dispersión de la luz.

Para lograr esto, SSSEffect calcula la intensidad del efecto de desenfoque (basado en los parámetros del shader) y lo almacena en el canal B del attachment de  Distortion en el el GBufferPass. Luego, el DefaultPostprocessing Graph usa esta textura y aplica dos pasadas de SSSBlur (horizontal y vertical), utilizando la textura de normales, la profundidad y el Field of View de la cámara para producir el resultado final.

Figura 5 Resultado final con ambas técnicas de renderizado aplicadas.

Crear materiales SSS en tu proyecto

 

Agregar propiedades SSS a tus materiales es fácil siguiendo estas instrucciones (en Evergine Studio):

  • Abre un material o crea uno nuevo. Selecciónalo para abrir el Editor de Materiales.
  • Haz clic en el combo box de FX para abrir la lista de Efectos disponibles en tu proyecto.

  • Selecciona SSSEffect. Esto mantendrá los parámetros anteriores de un StandardEffect.
  • Personaliza tu material con los siguientes parámetros:
    • SSS Scatter: (0.045 por defecto) Define el «grosor» del efecto SSS, o la distancia máxima a la que la luz puede dispersarse a través de la superficie.
    • SSS Intensity: (0.1 por defecto) Controla la fuerza del efecto.
    • SSS Bias: (0.003 por defecto) Ajusta la distancia a encoger para calcular la transmitancia, ayudando a evitar artefactos (similar al depth bias en el shadow map).
    • SSS Translucency Color: (D05749FF  por defecto) El color del efecto de transmitancia.
    • SSS Translucency Texture: Una textura de color utilizada para ajustar el color de la translucidez en diferentes áreas de tu modelo.
    • SSS Scatter Texture: Aplica un factor de multiplicación al parámetro SSS Scatter, permitiendo variaciones en el grosor de la superficie.
  • El siguiente paso será agregar una entidad Postprocessing Graph a tu escena.
  • Selecciona la entidad de postprocessing graph. En la pestaña SSS, marca la casilla Enabled. Esto activará el diffuse blur del efecto SSS.
  • Ajusta sus parámetros:
    • Quality: Define la cantidad de blur samples por pasada. 3 opciones:
      • SSS_QUALITY_OFF
      • SSS_QUALITY_1
      • SSS_QUALITY_2
    • SSS Width Factor: (0.075 por defecto) El factor de corrección del parámetro SSS Scatter del material.

Una vez que hayas configurado tanto los parámetros del material como los del postprocessing graph, podrás lograr resultados impresionantes, como esta hermosa mano.

En resumen, la implementación de SSS es un paso más hacia nuestro objetivo de crear personajes y avatares realistas que puedan interactuar con el usuario y parecer cobrar vida. ¡Mantente atento a las próximas actualizaciones!

Antonio avila
Author
Antonio Ávila
Plain Concepts Research

¿Ya te vas?

Suscríbete a nuestra newsletter para estar al día de las últimas noticias, casos de éxito y mucho más. 

No mandamos spam y puedes darte de baja en cualquier momento.