Define Chiang BCSDF normalization - #3018
Open
tdavidovicNV wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
While reviewing the Chiang hair equations added in #2964, I found an additional global
1/pifactor that is not present in the cited model. The longitudinal and azimuthal distributions already contain their normalization factors, including1/(2*pi)for the uniform high-order azimuthal lobe.Normalization argument
Consider a non-absorbing fiber (
T = 1) with unit lobe tints. The attenuation terms in the specification become:They account for all possible paths:
Consider the simplest case, with zero cuticle tilt, in a constant white environment. A non-absorbing material should return the same unit radiance in every direction: this is the usual white-furnace test. The attenuation terms above divide the incoming energy among the four scattering paths, and their weights add up to
1. The normalizedM_pandN_pdistributions only determine where each path's share of the energy is scattered.The familiar
1/pifactor is needed for a constant Lambertian BRDF because its projected hemisphere integral ispi. It is not needed for these already-normalized directional distributions. Applying it to the complete Chiang response reduces the white-furnace result from1to1/pi, losing about 68% of the energy.This is the normalization tested by the white-furnace result in Figure 5(e) of the original Chiang et al. paper.
Specification change
The specification already denotes a BCSDF by
f_c. Following equations 1 and 2 of the cited Chiang paper, this PR defines it directly as:The existing
f_cnotation is retained, and this change does not add a general BCSDF transport convention. Renderer APIs may account for the curve projection factor separately, but that does not introduce a global1/pi. The PR changes the specification only; the current implementations are not changed.Implementation notes
M_PI_INV.testrender): The MaterialX wrapper emitschiang_hair_bsdf, buttestrenderdoes not register this closure in its built-in or BSDL closure sets. The MaterialX OSL network profile skips the Chiang hair fixture, so this path has no normalization result to compare.1/pi.This follows the original Chiang et al. model, equations 1 and 2. PBRT v4 accounts for its renderer-facing measure separately and likewise has no global
1/pi.