Define Chiang BCSDF normalization - #3018
Conversation
|
Thanks for another excellent analysis, @tdavidovicNV! I agree that the lobe sum without a global As in #3015 and #3017, my one structural request would be to omit the Implementation notes section from the specification text, since the MaterialX PBR Specification intentionally avoids target-specific implementation details, and your per-target analysis will remain permanently accessible in the description and discussion of this PR. One smaller editorial suggestion: since the specification is normative rather than change-relative, I'd propose rewording the clause "so there is no additional global factor of With respect to our GLSL implementation, I agree that the additional Otherwise, this looks like a solid improvement to me, and we should plan to merge it before our v1.39.6 release. |
|
Thanks, @jstone-lucasfilm. I’ve reworded the normalization statement in positive terms, and removed the target specific notes (will work on the rest). I also added a TODO at the GLSL M_PI_INV application to document the current divergence. I agree that removing the factor and updating the baseline images should be handled in a follow-up PR. |
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.