Principled BSDF (Disney)
Le Principled Shader de Disney fut créé sur l’envie de modéliser un grand nombre de matériaux physiquement réalistes à l’aide d’une seule fonction fortement paramétrisée. Pour faire cela, ils se sont donc basé sur les nombreux types de BSDF déjà disponibles et ont simplement composé ces dernières avec des paramètres définissant l’influence de chaque part sur le rendu final.La fonction ainsi obtenue prend la forme suivante :
$diff_{disney} = (1-\alpha_{met}) ((1-\alpha_{ss}) diffuse_{disney} + \alpha_{ss} \ast SS_{disney} + \alpha_{sheen} \ast sheen_{disney})$
$spec_{disney}(x, w_i, w_o) = \frac { D_{disney} \ast G \ast F_{shlick}} { 4 \cos(w_i \cdot n_x) \cos (w_o \cdot n_x)} + \alpha_{cc} \ast CC_{disney}$
Dans la suite nous utiliseront les symboles suivants :
$c_x$ | La couleur de la surface en x |
$\alpha_{specTint}$ | Paramètre controlant la teinte du speculaire en x |
$\alpha_{met}$ | Paramètre controlant l'aspet métalique de la surface en x |
$\alpha_{rou}$ | La rugosité de la surface en x |
$\alpha_{anisotropique}$ | Paramètre controlant le taux d'anisotropie en x |
$\alpha_{ss}$ | Paramètre controlant le taux SS en x |
$\alpha_{sheen}$ | Paramètre controlant le taux de sheen en x |
$\alpha_{sheenTint}$ | Paramètre controlant la couleur du speculaire en x |
$\alpha_{cc}$ | Paramètre controlant le taux de ClearCoat en x |
$\alpha_{ccGlow}$ | Paramètre controlant la brillance du ClearCoat en x |
$n_x$ | L'indice de réfraction de la surface en x |
On voit ainsi l’apparition de différentes fonctions qui vont venir définir les différentes parties du principled BSDF.
Terme diffus : Pour représenter la diffusion de ses matériaux, la BSDF utilise un modèle Lambertien auquelelle multiplie un Fresnel tel que présenté dans le cours SIGGRAPH de Burley en 2015
$diffuse_{disney} = \frac {c_x}{\pi} (1-\frac{1}{2} (1-(w_o \cdot n_x)^5)) (1-\frac{1}{2} (w_i \cdot n_x) ^5)$
Approximation du SubSurface Scattering : Afin d’obtenir un résultat toujours plus réaliste, le termediffus est mélangé avec une approximation d’un rendu modélisant la dispersion sous la surface de l’objet. Pource faire, l’équipe Disney s’est inspiré du modèle présenté par Hanrahan-Kruger
$F_{ss} = \text{lerp}((w_o \cdot n_x)^5, 1, (w_i \cdot h_x)^2 \alpha_x) \ast \text{lerp}((w_i \cdot n_x)^5, 1, (w_o \cdot h_x)^2 \alpha_x)$
$SS_{disney} = 1.25(F_{ss} \ast (\frac{1}{|w_o \cdot n_x| + |w_i \cdot n_x|} - \frac{1}{2}) + \frac{1}{2})$
Modélisation du Sheen : Le Sheen (ou brillance en français) sert à représenter l’effet de brillance qui peutêtre vu é angle rasant sur certains tissus. Cet ajout est donc modélisé comme une BSDF proche d’un Fresnel
$sheen_{disney} = \text{lerp}( \alpha_{sheenTint}, 1, kd_x) (1 - \cos(w_i \cdot h_x))^5$
Distribution des Normales : Le modèle de BSDF de Disney peut aussi représenter des modèles anisotro-piques. De ce fait un recalcul de D a été nécessaire afin de représenter ces surfaces
$aspect = \sqrt{1 - 0.9 \ast \alpha_{anisotropique}}$
$\alpha_{rou, x} = {\alpha_{rou}^2} \div {aspect}$ $\alpha_{rou, y} = {\alpha_{rou}^2} \cdot {aspect}$
$D_{disney} = \frac{1}{\pi} \frac{1}{\alpha_{rou, x} \alpha_{rou, y}} \frac{1}{ ((h_x \cdot \hat{x})^2 \div \alpha_{rou, x} + (h_x \cdot \hat{y})^2 \div \alpha_{rou, y} + (h_x \cdot n_x)^2)^2}$
Fresnel : Selon l’équipe Disney, l’approximation de Schlick est une méthode suffisamment précise pour obtenirles coefficients de Fresnel
$F_0 = (1-\alpha_{met}) \frac{\sqrt{n-1}}{\sqrt{n+1}} ((1-\alpha_{specTint}) + \alpha_{specTint}c_x) + \alpha_{met}c_x$
$F_{shlick}(F_0, \theta) = F_0 + (1-F_0)(1 - \cos \theta)^5$
Avec $F_0$ la réflexion spéculaire à incidence normale et $\theta$ l’angle entre le rayon et la micro-normale ($h_x$ dans le cas présent). Mais l’on remarquera que le modèle peut présenter des erreurs dans le cas de matériaux métalliques.
Addition d’un effet ClearCoat : L’effet ClearCoat définit par l’équipe Disney permet de modéliser unecouche de vernis par dessus la surface de l’objet. Cet effet est obtenu en ajoutant un lobe spéculaire a la BSDF avec une rugosité fixée $\alpha = 0.25$ et un IOR de $1.5$
$CC_{disney} = \frac{1}{4} G(w_i, w_o, h_x, n_x, \frac{1}{4}) \ast F_{shlick}(0.04, w_i \cdot h_x) \ast D_{GTR1}(h_x, n_x, \text{lerp}(\alpha_{ccgloss}, 0.1, 0.001)$
Contrairement aux autres BSDFs, nous choisissons une distribution GTR 1.0 car celle-ci permet des traînées proche de la réalité dans le cas d’une couche translucide :
$D_{GTR1}(h_x, n_x, \alpha) = \frac{\alpha^2-1} { \pi \log(\alpha^2)(1+(\alpha^2-1)(h_x \cdot n_x)^2}$