Skip to content

Commit 87e3ecb

Browse files
Specular haze (#254)
* Specular tail proposal * typo * Make specular_tail_mix be in [0,1] range. Mention that the total roughness of the secondary lobe is clamped to [0,1]. * Update text with decided-upon names of parameters. Plus a clearer description of the details. --------- Signed-off-by: Jamie <jamie.portsmouth@autodesk.com> Co-authored-by: Adrien Herubel <AdrienHerubel@users.noreply.github.com>
1 parent 3a388ef commit 87e3ecb

2 files changed

Lines changed: 40 additions & 18 deletions

File tree

index.html

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,28 @@
428428
![Figure [anisotropy]: Textured **`geometry_tangent`**, with **`specular_roughness_anisotropy`** varying over 0 (default), 0.5, 0.9.](dummy)
429429
</div>
430430

431+
### Specular haze
432+
433+
It is also useful to provide a more configurable NDF which can support a "hazy gloss" look. This can easily be supported simply by having the BSDF be a blend between BSDFs with different roughnesses. This is provided for both the metallic and dielectric BSDFs of the [base substrate](index.html#model/basesubstrate) (but not the coat).
434+
435+
We provide this via the following parameters:
436+
437+
- **`specular_haze`**: Provides the $[0, 1]$ blend weight $w_\mathrm{haze}$ of a secondary specular NDF (which defaults to 0). The resulting base BSDF thus has the form $(1 - w_\mathrm{haze}) f_\mathrm{core} + w_\mathrm{haze} f_\mathrm{haze}$. For the [dielectric base](index.html#model/basesubstrate/dielectricbase), both core and haze BSDF lobes are given by $f_\mathrm{dielectric}$ except with a different roughness value for the haze. Similarly, for the [metallic base](index.html#model/basesubstrate/metal), both core and haze lobes are given by $f_\mathrm{metal}$ except with a different roughness value for the haze.
438+
439+
- **`specular_haze_spread`**: Specifies the extra roughness $\xi_h$ of the haze lobe, with $\xi_\mathrm{haze} \in [0, 1]$. This functions as the interpolation factor between the original core roughness $r_\mathrm{core}=$ **`specular_roughness`** and 1, i.e. the haze lobe has roughness given by $r_\mathrm{haze} = (1 - \xi_\mathrm{haze}) r_\mathrm{core} + \xi_\mathrm{haze} = \mathrm{lerp}(r_\mathrm{core}, 1, \xi_\mathrm{haze})$.
440+
441+
The anisotropy of the haze lobe is assumed to be identical to that of the core, i.e. the $\alpha_t, \alpha_b$ values for the haze lobe are determined by equation [openpbr-anisotropy-formula] with $r$ replaced by $r_\mathrm{haze}$, and $a$ equal to the **`specular_roughness_anisotropy`**.
442+
443+
Note that in a practical implementation, one may prefer to implement the haze via a stochastic choice between core and haze lobes within the microfacet model. Though formally equivalent, introducing an extra BSDF lobe for the haze which is evaluated and sampled independently may be less efficient.
444+
445+
431446
### Multiple Scattering
432447

433448
The single-scattering microfacet BRDF of equation [microfacet_brdf_ss] does not conserve energy, as it neglects to account for multiple scattering between the microfacets. An implementation should ideally account for this, via one of a number of schemes, otherwise the reflection from rough metals and dielectrics is dimmer and less saturated than it should be. A fully accurate approach is described in [#Heitz2016a], where the multiple bounces are explicitly modeled via Monte Carlo. Simpler approximate models are presented in [#Kulla2017] (which functions by adding compensation lobes to account for the missing energy), and [#Turquin2019] (which scales the albedo of the lobe to maintain energy preservation at the expense of reciprocity).
434449

450+
Note that the multiple scattering compensation is assumed to apply to both the primary and secondary specular lobes, which are then blended. Thus energy conservation of the blend is ensured, if each individual lobe conserves energy.
451+
452+
435453
### Retroreflectivity
436454

437455
It is useful to be able to model *retroreflective* materials in which the light is predominantly scattered backwards towards its source, which are familiar in safety applications such as road markings, signs, vehicles and clothing items. Such materials are typically designed to be retroreflective via a substructure of elements which preferentially scatter light backwards. Various models have been proposed, but we adopt here the empirically-based approach of [#Belcour2014], in which the standard conductor microfacet BRDF is made retroreflective via a simple modification, which produces a visually plausible retroreflective effect.
@@ -443,8 +461,7 @@
443461
\begin{equation}
444462
f_\mathrm{conductor} \rightarrow (1 - w_\mathrm{retro}) f_\mathrm{conductor} + w_\mathrm{retro}f_\mathrm{retroreflective}
445463
\end{equation}
446-
This is applied in both the metallic BRDF $f_\mathrm{conductor}$ and dielectric BSDF $f_\mathrm{dielectric}$. Howevever, in the dielectric case we require that the view vector reflection is applied in the BRDF *only*, leaving the BTDF unchanged, since this produces a more physically plausible look with undisturbed refraction, while remaining energy conserving and reciprocal [#Portsmouth2025],.
447-
464+
This is applied in both the metallic BRDF $f_\mathrm{conductor}$ and dielectric BSDF $f_\mathrm{dielectric}$. Howevever, in the dielectric case we require that the view vector reflection is applied in the BRDF *only*, leaving the BTDF unchanged, since this produces a more physically plausible look with undisturbed refraction, while remaining energy conserving and reciprocal [#Portsmouth2025].
448465

449466

450467
Base Substrate
@@ -505,7 +522,7 @@
505522
### Metallic Base
506523

507524
Metals are completely opaque and have a characteristic and familiar form of specularity due to the Fresnel factor for conductors differing from that for dielectrics.
508-
The metallic base is thus represented as a separate bulk slab which consists of an opaque GGX microfacet conductor BRDF $f_\mathrm{conductor}$, whose NDF is parametrized by **`specular_roughness`** and **`specular_roughness_anisotropy`** (overloading the same parameters used for the dielectric BSDF $f_\mathrm{dielectric}$, as noted in the [Microfacet model](index.html#model/microfacetmodel) section):
525+
The metallic base is thus represented as a separate bulk slab which consists of an opaque GGX microfacet conductor BRDF $f_\mathrm{conductor}$, whose NDF is parametrized by **`specular_roughness`** and **`specular_roughness_anisotropy`**, as well as **`specular_haze`** and **`specular_haze_spread`** (overloading the same parameters used for the dielectric BSDF $f_\mathrm{dielectric}$, as noted in the [Microfacet model](index.html#model/microfacetmodel) section):
509526
\begin{equation}
510527
S_\mathrm{metal} = \mathrm{Slab}(f_\mathrm{conductor}) \ .
511528
\end{equation}
@@ -555,8 +572,9 @@
555572
**`specular_color`** | Color | `color3` | $ [0, 1]^3 $ | | $ (1, 1, 1) $ | Tint color of metallic Fresnel reflection albedo at near-grazing incidence (i.e. around silhouettes)
556573
**`specular_roughness`** | Roughness | `float` | $ [0, 1] $ | | $ 0.3 $ | Roughness of NDF of BRDF $f_\mathrm{conductor}$
557574
**`specular_roughness_anisotropy`** | Anisotropy | `float` | $ [0, 1] $ | | $ 0 $ | Anisotropy of NDF of BRDF $f_\mathrm{conductor}$
558-
**`specular_retroreflectivity`** | Retroreflectivity | `float` | $ [0, 1] $ | | $ 0 $ | Retroreflectivity of BRDF $f_\mathrm{conductor}$
559-
575+
**`specular_haze`** | Haze | `float` | $ [0, 1] $ | | $ 0.0 $ | Mix weight of metallic haze lobe
576+
**`specular_haze_spread`** | Haze Spread | `float` | $ [0, 1] $ | | $ 0.3 $ | Extra roughness of metallic haze lobe
577+
**`specular_retroreflectivity`** | Retroreflectivity | `float` | $ [0, 1] $ | | $ 0 $ | Retroreflectivity of BRDF $f_\mathrm{conductor}$
560578

561579
![](images/metal_with_default_edge_tint.png width=90% align=right) ![](images/metal_with_correct_edge_tint.png width=90% align=left)
562580
<div class="shifted-caption">
@@ -566,9 +584,9 @@
566584

567585
### Dielectric Base
568586

569-
Both the opaque and translucent dielectric-base share the same dielectric interface BSDF $f_\mathrm{dielectric}$. This section details the parametrization of the dielectric BSDF, which defines the upper interface of the [Translucent](index.html#model/basesubstrate/translucentbase), [Glossy-diffuse](index.html#model/basesubstrate/glossy-diffuse) and [Subsurface](index.html#model/basesubstrate/subsurface) base slabs. The base dielectric BSDF (and the [Metal](index.html#model/basesubstrate/metallicbase) BRDF) are informally termed the "specular" lobe, since they provide the primary specular reflection (while the coat provides a secondary specular lobe, see the Coat section).
587+
Both the opaque and translucent dielectric-base share the same dielectric interface BSDF $f_\mathrm{dielectric}$. This section details the parametrization of the dielectric BSDF, which defines the upper interface of the [Translucent](index.html#model/basesubstrate/translucentbase), [Glossy-diffuse](index.html#model/basesubstrate/glossy-diffuse) and [Subsurface](index.html#model/basesubstrate/subsurface) base slabs. The base dielectric BSDF (and the [metal](index.html#model/basesubstrate/metallicbase) BRDF) are informally termed the "specular" lobe, since they provide the primary specular reflection (while the coat provides a secondary specular lobe, see the Coat section).
570588

571-
- The specular lobe shape is controlled by the roughness properties of the surface, parametrized by **`specular_roughness`** and **`specular_roughness_anisotropy`** (see the section on the [Microfacet model](index.html#model/microfacetmodel) NDF).
589+
- The specular lobe shape is controlled by the roughness properties of the surface, parametrized by **`specular_roughness`** and **`specular_roughness_anisotropy`**, as well as **`specular_haze`** and **`specular_haze_spread`** (see the section on the [Microfacet model](index.html#model/microfacetmodel) NDF).
572590

573591
- The **`specular_ior`** parameter controls the index of refraction (IOR) of the base dielectric.
574592

@@ -619,13 +637,15 @@
619637
As noted, a further tint factor of **`specular_color`** is applied to the entire macroscopic dielectric BRDF (for both entering and exiting rays), while the BTDF is unaffected by this tint.
620638

621639

622-
Specular params | Label | Type | Range | Norm | Default | Description
623-
------------------------------------|-------------------|----------|:---------------:|:----------:|:-------------:|----------------------------------------------
624-
**`specular_weight`** | Weight | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 1 $ | Modulates the dielectric reflectivity at normal incidence
625-
**`specular_color`** | Color | `color3` | $ [0, 1]^3 $ | | $ (1, 1, 1) $ | Tints the dielectric BRDF
626-
**`specular_roughness`** | Roughness | `float` | $ [0, 1] $ | | $ 0.3 $ | Roughness of NDF of dielectric BSDF $f_\mathrm{dielectric}$
627-
**`specular_roughness_anisotropy`** | Anisotropy | `float` | $ [0, 1] $ | | $ 0 $ | Anisotropy of NDF of dielectric BSDF $f_\mathrm{dielectric}$
628-
**`specular_ior`** | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.5 $ | Refractive index of $V_\mathrm{dielectric}$
640+
Specular params | Label | Type | Range | Norm | Default | Description
641+
------------------------------------|------------|----------|:---------------:|:----------:|:-------------:|----------------------------------------------
642+
**`specular_weight`** | Weight | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 1 $ | Modulates the dielectric reflectivity at normal incidence
643+
**`specular_color`** | Color | `color3` | $ [0, 1]^3 $ | | $ (1, 1, 1) $ | Tints the dielectric BRDF
644+
**`specular_roughness`** | Roughness | `float` | $ [0, 1] $ | | $ 0.3 $ | Roughness of NDF of dielectric BSDF $f_\mathrm{dielectric}$
645+
**`specular_roughness_anisotropy`** | Anisotropy | `float` | $ [0, 1] $ | | $ 0 $ | Anisotropy of NDF of dielectric BSDF $f_\mathrm{dielectric}$
646+
**`specular_haze`** | Haze | `float` | $ [0, 1] $ | | $ 0.0 $ | Mix weight of dielectric haze lobe
647+
**`specular_haze_spread`** | Haze Spread| `float` | $ [0, 1] $ | | $ 0.3 $ | Extra roughness of dielectric haze lobe
648+
**`specular_ior`** | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.5 $ | Refractive index of $V_\mathrm{dielectric}$
629649
**`specular_retroreflectivity`** | Retroreflectivity | `float` | $ [0, 1] $ | | $ 0 $ | Retroreflectivity of BRDF $f_\mathrm{dielectric}$
630650

631651

@@ -637,7 +657,7 @@
637657

638658
### Dielectric Base: Glossy-diffuse
639659

640-
The glossy-diffuse slab represents the base dielectric (parametrized as described in the Dielectric base section), embedding a semi-infinite bulk of extremely dense scattering material. The BRDF of the slab is the combination of a "glossy" specular lobe provided by immediate reflection from the dielectric interface, and a diffuse lobe provided by scattering off the embedded substrate. This models for example the reflection from shiny, totally opaque surfaces such as dense plastic, rock, and concrete.
660+
The glossy-diffuse slab represents the base dielectric (parametrized as described in the Dielectric Base section), embedding a semi-infinite bulk of extremely dense scattering material. The BRDF of the slab is the combination of a "glossy" specular lobe provided by immediate reflection from the dielectric interface, and a diffuse lobe provided by scattering off the embedded substrate. This models for example the reflection from shiny, totally opaque surfaces such as dense plastic, rock, and concrete.
641661

642662
We choose to model this concretely as a layer of dielectric "gloss" on top of an (index-matched) opaque slab with a
643663
diffuse BRDF:
@@ -653,7 +673,7 @@
653673
* +-------------------------------------------------+ *
654674
*******************************************************
655675

656-
where $S_\textrm{gloss}$ is a thin slab of dielectric with the rough dielectric microfacet BRDF as parametrized in the Dielectric base section, and the same internal medium as the base dielectric except with zero extinction due to infinitesimal layer thickness:
676+
where $S_\textrm{gloss}$ is a thin slab of dielectric with the rough dielectric microfacet BRDF as parametrized in the Dielectric Base section, and the same internal medium as the base dielectric except with zero extinction due to infinitesimal layer thickness:
657677
\begin{eqnarray}
658678
S_\textrm{gloss} = \mathrm{Slab}(f_\mathrm{dielectric}, V_\mathrm{dielectric}) \ .
659679
\end{eqnarray}
@@ -768,7 +788,7 @@
768788
S_\mathrm{subsurface} = \mathrm{Slab}(f_\mathrm{dielectric}, V^\infty_\mathrm{subsurface}) \ .
769789
\end{equation}
770790

771-
As in the cases of the [glossy-diffuse](index.html#model/basesubstrate/glossy-diffuse) slab and the [translucent-base](index.html#model/basesubstrate/translucentbase), the subsurface is bounded by a dielectric interface with BSDF $f_\mathrm{dielectric}$, which generates the primary specular reflection lobe parametrized via the "specular" parameters as described in the Dielectric base section. Combined with this is the reflection generated by light which is transmitted through the dielectric interface into the underlying embedded subsurface medium, where it scatters around and eventually transmits back out. In this case the subsurface medium $V^\infty_\mathrm{subsurface}$ is given a parametrization which is particularly convenient for controlling the volumetric effect of dense subsurface scattering:
791+
As in the cases of the [glossy-diffuse](index.html#model/basesubstrate/glossy-diffuse) slab and the [translucent-base](index.html#model/basesubstrate/translucentbase), the subsurface is bounded by a dielectric interface with BSDF $f_\mathrm{dielectric}$, which generates the primary specular reflection lobe parametrized via the "specular" parameters as described in the Dielectric Base section. Combined with this is the reflection generated by light which is transmitted through the dielectric interface into the underlying embedded subsurface medium, where it scatters around and eventually transmits back out. In this case the subsurface medium $V^\infty_\mathrm{subsurface}$ is given a parametrization which is particularly convenient for controlling the volumetric effect of dense subsurface scattering:
772792

773793
- **`subsurface_radius`** * **`subsurface_radius_scale`**: the _mean free path_ (MFP) per RGB channel, $\mathbf{r}$, i.e. the average distance that a ray of light travels through the medium before being absorbed or scattered. This thus controls the apparent density of the medium. In the limit of zero MFP, the medium tends towards infinite density, and approaches the look of an opaque diffuse surface. Being a length, **`subsurface_radius`** can be any value greater than or equal to zero. For convenience, we make the soft range $[0, 1]$, thus covering common cases such as skin where the MFP is lower than the scene length units. The **`subsurface_radius_scale`** controls the color channel dependence of the MFP, and thus this color is visible in the light transmitted through thinner regions of the subsurface volume.
774794
- **`subsurface_color`**: the observed RGB reflection albedo color taking into account all orders of multiple scattering, $\mathbf{C}$ (where the sense in which this parametrizes the observed color is discussed in detail below).
@@ -828,7 +848,7 @@
828848

829849
For cases where the substrate medium is translucent, i.e. transmits and refracts a significant quantity of light, we provide a separate parametrization of the underlying medium more appropriate for this use case than the subsurface model, where the **`transmission_weight`** mix weight selects this model rather than the opaque mix of glossy-diffuse and subsurface. This is a more traditional volumetric parametrization specifying the properties of a homogeneous medium interior to the object, with or without absorption and scattering, which is useful for modeling materials ranging from clear or colored absorbing-only glass and liquids to translucent materials with visually significant scattering such as honey, fruit juice, murky water, opalescent glass, or milky glass.
830850

831-
As for the dielectric slabs defined in the Glossy-diffuse section and Subsurface section, the top interface is described by a rough GGX microfacet BSDF $f_\mathrm{dielectric}$ whose "specular" parameters are described in the Dielectric base section. The bulk of the dielectric, $V^\infty_\mathrm{dielectric}$ is a volumetric medium supporting absorption and scattering:
851+
As for the dielectric slabs defined in the Glossy-diffuse section and Subsurface section, the top interface is described by a rough GGX microfacet BSDF $f_\mathrm{dielectric}$ whose "specular" parameters are described in the Dielectric Base section. The bulk of the dielectric, $V^\infty_\mathrm{dielectric}$ is a volumetric medium supporting absorption and scattering:
832852
\begin{equation}
833853
S_\textrm{translucent-base} = \mathrm{Slab}(f_\mathrm{dielectric}, V^\infty_\mathrm{dielectric}) \ .
834854
\end{equation}

parametrization.md.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
| `specular_color` | Color | `color3` | $ [0, 1]^3 $ | | $ (1, 1, 1) $ | |
3232
| `specular_roughness` | Roughness | `float` | $ [0, 1] $ | | $ 0.3 $ | |
3333
| `specular_roughness_anisotropy` | Anisotropy | `float` | $ [0, 1] $ | | $ 0 $ | |
34+
| `specular_haze` | Haze | `float` | $ [0, 1] $ | | $ 0.0 $ | |
35+
| `specular_haze_spread` | Haze Spread | `float` | $ [0, 1] $ | | $ 0.3 $ | |
3436
| `specular_ior` | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.5 $ | |
3537
| `specular_retroreflectivity` | Retroreflectivity | `float` | $ [0, 1] $ | | $ 0 $ | |
3638
| **Transmission** |

0 commit comments

Comments
 (0)