Skip to content

Define layer pass-through semantics - #3017

Open
tdavidovicNV wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
tdavidovicNV:spec/fix-layer-pass-through
Open

Define layer pass-through semantics#3017
tdavidovicNV wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
tdavidovicNV:spec/fix-layer-pass-through

Conversation

@tdavidovicNV

Copy link
Copy Markdown
Contributor

While reviewing the layer equation added in #2964, I found that deriving base attenuation as 1 - E_top conflates two different outcomes: energy absorbed by the top layer and energy passed toward the base.

This is visible with a colored reflection-only dielectric. For untinted Fresnel albedo F = 0.04 and tint c = (1, 0.25, 0.05), the complete top albedo is:

E_top = c * F = (0.04, 0.01, 0.002)

The current specification therefore gives base attenuation (0.96, 0.99, 0.998). The existing GLSL and OSL testrender implementations instead use the untinted unreflected share (1 - F) = (0.96, 0.96, 0.96), treating the tint-removed energy as absorption rather than returning it to the base.

This PR introduces an explicit color-valued pass-through factor that may depend on both incident and outgoing directions:

$$P_{\mathrm{top}}(\omega_i, \omega_o) \in [0, 1]$$ $$f(\omega_i, \omega_o) = f_{\mathrm{top}}(\omega_i, \omega_o) + P_{\mathrm{top}}(\omega_i, \omega_o) f_{\mathrm{base}}(\omega_i, \omega_o)$$

This follows the two-leg construction in Weidlich and Wilkie 2007, section 3.2, where the lower-layer BRDF is attenuated by entry transmission, absorption over the incident and outgoing paths, and return transmission.

For nested layers, the pass-through factors multiply recursively. The PR also separates BSDF-over-BSDF composition from a BSDF bound to a VDF: a lossless transmissive interface has complete directional albedo near one, but that should not prevent transmitted light from entering the medium.

The current implementations are not changed:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant