diff --git a/documents/Specification/MaterialX.PBRSpec.md b/documents/Specification/MaterialX.PBRSpec.md index 606b63c42c..f9ad782dc1 100644 --- a/documents/Specification/MaterialX.PBRSpec.md +++ b/documents/Specification/MaterialX.PBRSpec.md @@ -2005,15 +2005,15 @@ surfaceshader open_pbr_surface( // Coat facing reflectance (F0), reused by the coat-darkening and emission terms below. float coat_F0 = ior_to_f0(coat_ior); - // Thin-walled subsurface: a translucent reflection/transmission pair scaled by the subsurface - // color, with 'subsurface_scatter_anisotropy' shifting weight from reflection toward - // transmission, blended in equal measure. + // Thin-walled subsurface: diffuse reflection and transmission lobes that share the subsurface + // color as their albedo, with 'subsurface_scatter_anisotropy' shifting weight from reflection + // toward transmission. The two weights sum to one, so the total albedo is the subsurface color. color3 ss_color = max(subsurface_color, 0.0); BSDF ss_reflection = oren_nayar_diffuse_bsdf(color = ss_color, roughness = base_diffuse_roughness, - normal = geometry_normal) * (subsurface_color * (1.0 - subsurface_scatter_anisotropy)); - BSDF ss_transmission = translucent_bsdf(color = ss_color, normal = geometry_normal) - * (subsurface_color * (1.0 + subsurface_scatter_anisotropy)); - BSDF subsurface_thin_walled = mix(ss_reflection, ss_transmission, 0.5); + normal = geometry_normal); + BSDF ss_transmission = translucent_bsdf(color = ss_color, normal = geometry_normal); + BSDF subsurface_thin_walled = mix(ss_transmission, ss_reflection, + 0.5 * (1.0 + subsurface_scatter_anisotropy)); // Closed (non-thin-walled) subsurface: volumetric scattering over the scaled radius. BSDF subsurface_volume = subsurface_bsdf(color = ss_color, diff --git a/libraries/bxdf/open_pbr_surface.mtlx b/libraries/bxdf/open_pbr_surface.mtlx index f1a757470b..72828f25a3 100644 --- a/libraries/bxdf/open_pbr_surface.mtlx +++ b/libraries/bxdf/open_pbr_surface.mtlx @@ -142,38 +142,22 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - + + + diff --git a/resources/Materials/TestSuite/pbrlib/surfaceshader/open_pbr_thin_walled_subsurface.mtlx b/resources/Materials/TestSuite/pbrlib/surfaceshader/open_pbr_thin_walled_subsurface.mtlx new file mode 100644 index 0000000000..759f205a5d --- /dev/null +++ b/resources/Materials/TestSuite/pbrlib/surfaceshader/open_pbr_thin_walled_subsurface.mtlx @@ -0,0 +1,12 @@ + + + + + + + + + + + +