Some minor rewording improvements/clarifications
Some minor changes are needed to improve the clarity of the wording (around the implementation of the coat details). I discovered these while using the spec myself to implement the Arnold version.
Needs a review. cc @jstone-lucasfilm @virtualzavie @peterkutz
This change looks great to me, though it needs to be proposed as a change to dev_1.2!
The formula we give for the fuzz layering can be written in a more simplified form (the algebra is trivial). This makes it a bit clearer why the MaterialX form of the layering works, i.e.:
<!-- Fuzz Layer -->
<sheen_bsdf name="fuzz_bsdf" type="BSDF">
<input name="weight" type="float" interfacename="fuzz_weight" />
<input name="color" type="color3" interfacename="fuzz_color" />
<input name="roughness" type="float" interfacename="fuzz_roughness" />
<input name="normal" type="vector3" interfacename="geometry_normal" />
<input name="mode" type="string" value="zeltner" />
</sheen_bsdf>
<layer name="fuzz_layer" type="BSDF">
<input name="top" type="BSDF" nodename="fuzz_bsdf" />
<input name="base" type="BSDF" nodename="coat_layer" />
</layer>
which does $\mathbf{layer}(\texttt{F} f_\mathrm{fuzz}, f_c)$ (i.e. just layer the fuzz BRDF scaled by the fuzz weight), which is what the formula in green is doing below (in albedo-scaling form). Intuitively, layering a partially present BRDF on a base, in albedo-scaling approximation is equivalent to just scaling the BRDF by the presence weight.
Whereas it's not (immediately) obvious that red formula does that as well.
Before https://github.com/AcademySoftwareFoundation/OpenPBR/pull/218/commits/30293bc7bfaa4d84fe94eed082da69c2d612ac15
After https://github.com/AcademySoftwareFoundation/OpenPBR/pull/218/commits/30293bc7bfaa4d84fe94eed082da69c2d612ac15
Though one must assume also that the MaterialX albedo-scaling ignores the fuzz color in the fuzz brdf albedo computation (which it does in the test render implementations), since the fuzz BRDF contains a color factor which is explicitly ignored in the albedo used in the layering formula given.
@jstone-lucasfilm can be merged?
Added a small clarification to the text to remind that the specular_weight needs to be appropriately clamped to prevent Fresnel > 1 in the darkening calculation:
@jstone-lucasfilm Can this be merged?