From b212785f1e35462853c7d455ae5a41f8ce71bf98 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 28 Jun 2024 14:05:49 -0700 Subject: [PATCH] Merge v1.1 development to main (#222) This changelist merges v1.1 development from dev_1.1 to main, in preparation for marking the release of OpenPBR v1.1. --- README.md | 6 ++++++ examples/open_pbr_default.mtlx | 8 ++++---- examples/open_pbr_velvet.mtlx | 2 +- index.html | 10 +++++----- parametrization.md.html | 4 ++-- reference/open_pbr_surface.mtlx | 15 ++++++--------- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index a915e942..c81cc8bc 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,12 @@ OpenPBR Surface is an open standard hosted by the [Academy Software Foundation]( * **[Reference implementation](reference/open_pbr_surface.mtlx)** – written in [MaterialX](https://materialx.org/) * **[BibTeX citation](openpbr.bib)** +### Resources + +* [MaterialX Web Viewer](https://academysoftwarefoundation.github.io/MaterialX/?file=Materials/Examples/OpenPbr/open_pbr_default.mtlx) - WebGL rasterization renderer using MaterialX [implementation](reference/open_pbr_surface.mtlx) of OpenPBR +* [OpenPBR-viewer](https://github.com/portsmouth/OpenPBR-viewer) - self-contained example implementation in a WebGL pathtracer (run [here](https://portsmouth.github.io/OpenPBR-viewer)) +* [#openpbr](https://academysoftwarefdn.slack.com/channels/openpbr) - public Slack channel for discussions, hosted by ASWF +
[![License: CC BY-SA 4.0](https://img.shields.io/badge/License-Apache%202.0-informational.svg)](LICENSE) diff --git a/examples/open_pbr_default.mtlx b/examples/open_pbr_default.mtlx index 85c53791..8125541a 100644 --- a/examples/open_pbr_default.mtlx +++ b/examples/open_pbr_default.mtlx @@ -20,7 +20,7 @@ - + @@ -35,9 +35,9 @@ - - - + + + diff --git a/examples/open_pbr_velvet.mtlx b/examples/open_pbr_velvet.mtlx index 25b72cc0..2b2da96c 100644 --- a/examples/open_pbr_velvet.mtlx +++ b/examples/open_pbr_velvet.mtlx @@ -8,6 +8,6 @@ - + diff --git a/index.html b/index.html index 04426758..c5d85792 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ **OpenPBR Surface** -
*Specification v1.0, 2024-06-04.     homepage *
+
*Specification v1.1, 2024-06-28.     homepage *

This document is a specification of a surface shading model intended as a standard for computer graphics: the OpenPBR Surface model. Designed as an über-shader, it aims to be capable of accurately modeling the vast majority of CG materials used in practical visual effects and feature animation productions. The model has been developed as a synthesis of the Autodesk Standard Surface and the Adobe Standard Material models. @@ -750,7 +750,7 @@ **`subsurface_weight`** | Weight | `float` | $ [0, 1] $ | | $ 0 $ | Mix weight between subsurface and diffuse slabs **`subsurface_color`** | Color | `color3` | $ [0, 1] $ | | $ (0.8, 0.8, 0.8) $ | The observed reflection color of $V^\infty_\mathrm{subsurface}$ **`subsurface_radius`** | Radius | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 1 $ | Length scale of MFP -**`subsurface_radius_scale`** | Radius scale | `vector3` | $ [0, 1]^3 $ | | $ (1.0, 0.5, 0.25) $ | RGB multiplier to **`subsurface_radius`**, giving the per-channel MFPs +**`subsurface_radius_scale`** | Radius scale | `color3` | $ [0, 1]^3 $ | | $ (1.0, 0.5, 0.25) $ | RGB multiplier to **`subsurface_radius`**, giving the per-channel MFPs **`subsurface_scatter_anisotropy`** | Anisotropy | `float` | $ [-1, 1] $ | | $ 0 $ | Anisotropy of the Henyey--Greenstein phase function of the interior medium $V^\infty_\mathrm{subsurface}$ ![](images/subsurface1.jpg width=99%) ![](images/subsurface2.jpg width=99%) ![](images/subsurface3.jpg width=99%) @@ -868,7 +868,7 @@ --------------------------|-----------|----------|:---------------:|:-------------:|:--------:|---------------------------------------------- **`thin_film_weight`** | Weight | `float` | $ [0, 1] $ | | $ 0 $ | Coverage weight of the thin film **`thin_film_thickness`** | Thickness | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 0.5 $ | Thickness of the film in micrometers ($\mathrm{\mu m}$) -**`thin_film_ior`** | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.5 $ | Refractive index of the film +**`thin_film_ior`** | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.4 $ | Refractive index of the film ![](images/thin_film_0nm.png width=99%) ![](images/thin_film_300nm.png width=99%) ![](images/thin_film_600nm.png width=99%)
@@ -1074,7 +1074,7 @@ The fuzz BRDF $f_\mathrm{fuzz}$ and VDF $V_\mathrm{fuzz}$ are assumed to be derived from an anisotropic microflake volume model with a fiber-like distribution. We recommend the specific model of [#Zeltner2022] (based on the earlier work of [#Heitz2015]), which has the following characteristics: -- The fuzz represents a homogeneous volumetric layer with a fiber-like SGGX microflake [#Heitz2015] phase function. This is approximated using a Linearly Transformed Cosines (LTC) model [#Heitz2016b] fitted to volumetric simulations. The microflake fibers are assumed to have a single-scattering albedo that effectively produces a reflection tinted with the **`fuzz_color`** after multiple scattering. +- The fuzz represents a homogeneous volumetric layer with a fiber-like SGGX microflake [#Heitz2015] phase function. This is approximated using a Linearly Transformed Cosines (LTC) model [#Heitz2016b] fitted to volumetric simulations. The microflake fibers are assumed to have a single-scattering albedo that effectively produces a reflection tinted with the **`fuzz_color`** after multiple scattering, allowing the fuzz to darken as well as lighten. - The volumetric fuzz layer is assumed to have a fixed unit optical thickness in all channels, and is purely scattering so no energy is absorbed. Thus any light not reflected after multiple scattering is assumed to transmit to the lower layers, and the transmittance is gray so the base is not tinted by the fuzz. The amount of this fixed thickness fuzz is controlled via the layer coverage weight **`fuzz_weight`**. The fuzz layer is also assumed to be index-matched with the adjacent slab above it, i.e. the fibers are embedded in the surrounding dielectric medium, thus there is no Fresnel reflection from the slab. - The **`fuzz_roughness`** parameter controls how fibre-like the microflake distribution of the layer is. At low roughness the microflakes are highly fibre-like (i.e. thin fibres oriented along the normal) producing a high-sheen fabric appearance, while at high roughness the microflakes are spherical producing a dusty appearance. @@ -1128,7 +1128,7 @@ * +-------------------------------------------------+ * ******************************************************* -The intensity of the EDF is controlled by a luminance and a color multiplier. The **`emission_luminance`** parameter controls the luminance the emissive layer would have when **`emission_color`** is set to (1, 1, 1) and in the absence of coat and fuzz. The **`emission_color`** acts as a multiplier, thus the resulting luminance may be less than the input parameter, or even zero if the color multiplier is set to (0, 0, 0). +The intensity of the EDF is controlled by a luminance and a color multiplier. The **`emission_luminance`** parameter controls the luminance the emissive layer would have when **`emission_color`** is set to (1, 1, 1) and in the absence of coat and fuzz. The **`emission_color`** acts as a multiplier, i.e. the HDR emission in the model color space is defined to have a color given by **`emission_color`** * **`emission_luminance`**, thus the resulting luminance may be less than the input parameter, or even zero if the **`emission_color`** is set to (0, 0, 0). Moreover, the overall material luminance may be further reduced in the presence of coat or fuzz, as they can absorb light coming from the emissive layer before it exits the surface. The emission from the top surface should in principle gain a directional dependence due to the combined effects of absorption, total internal reflection (TIR) and multiple bounces in the coat layer, and absorption in the fuzz layer. The combined effect should result mostly in darkening and saturation at grazing angles. diff --git a/parametrization.md.html b/parametrization.md.html index eb37cb0e..73515975 100644 --- a/parametrization.md.html +++ b/parametrization.md.html @@ -44,7 +44,7 @@ | `subsurface_weight` | Weight | `float` | $ [0, 1] $ | | $ 0 $ | | | `subsurface_color` | Color | `color3` | $ [0, 1] $ | | $ (0.8, 0.8, 0.8) $ | | | `subsurface_radius` | Radius | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 1 $ | length | -| `subsurface_radius_scale` | Radius scale | `vector3` | $ [0, 1]^3 $ | | $ (1.0, 0.5, 0.25) $ | | +| `subsurface_radius_scale` | Radius scale | `color3` | $ [0, 1]^3 $ | | $ (1.0, 0.5, 0.25) $ | | | `subsurface_scatter_anisotropy` | Anisotropy | `float` | $ [-1, 1] $ | | $ 0 $ | | | **Coat** | | `coat_weight` | Weight | `float` | $ [0, 1] $ | | $ 0 $ | | @@ -63,7 +63,7 @@ | **Thin-film** | | `thin_film_weight` | Weight | `float` | $ [0, 1] $ | | $ 0 $ | | | `thin_film_thickness` | Thickness | `float` | $ [0, \infty) $ | $ [0, 1] $ | $ 0.5 $ | $\mathrm{\mu m}$ | -| `thin_film_ior` | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.5 $ | | +| `thin_film_ior` | IOR | `float` | $ (0, \infty) $ | $ [1, 3] $ | $ 1.4 $ | | | **Geometry** | | `geometry_opacity` | Opacity | `float` | $ [0, 1] $ | | $ 1 $ | | | `geometry_thin_walled` | Thin walled | `boolean` | {false, true} | | false | | diff --git a/reference/open_pbr_surface.mtlx b/reference/open_pbr_surface.mtlx index d57a18a6..8186482c 100644 --- a/reference/open_pbr_surface.mtlx +++ b/reference/open_pbr_surface.mtlx @@ -3,7 +3,7 @@ - @@ -69,7 +69,7 @@ doc="Coverage weight of the thin-film. Use for materials such as multi-tone car paint or soap bubbles." /> - @@ -177,16 +177,13 @@ - - - - - + + - + @@ -558,12 +555,12 @@ - +