Cycles: Add dispersion to Principled BSDF

Dispersion is defined by two parameters:
Abbe Number and Dispersion Scale.

This corresponds to OpenPBR v1.1.1

Pull Request: https://projects.blender.org/blender/blender/pulls/162041

Note: dispersion is temporarily disabled when using MNEE (shadow caustics) on oneAPI, due to a compiler bug. Waiting for a fix from the oneAPI side.

![prism.png](/attachments/219c3966-b39d-4846-991b-976f84f83081)
Co-authored-by: Sebastian Herholz <sebastian.herholz@gmail.com>
This commit is contained in:
Weizhen Huang 2026-08-18 11:03:49 +02:00 • committed by Weizhen Huang
parent 7414467a07
commit f15daf81bf
33 changed files with 531 additions and 19 deletions

View file

@ -433,6 +433,9 @@ def main():
# principled_bsdf_thinfilm_metallic has some weird behavior in reflection of
# black surfaces. to be investigated
report.set_fail_percent(0.09)
# principled_bsdf_dispersion has some difference in the highlights
if gpu_vendor == "AMD":
report.set_fail_threshold(6.0 / 255.0)
elif test_dir_name.startswith('integrator'):
# Noise difference in transparent materials (mostly transparent_spatial_splits)
report.set_fail_threshold(8.0 / 255.0)

View file

@ -48,6 +48,8 @@ BLOCKLIST_HYDRA = [
"osl_camera_.*.blend",
# The result doesn't match storm-usd
"many_lights.blend",
# The result differs between platforms
"principled_bsdf_dispersion.blend",
]
BLOCKLIST_USD = [
@ -66,6 +68,8 @@ BLOCKLIST_USD = [
"principled_bsdf_thin_glass.blend",
# Custom OSL camera not supported.
"osl_camera_.*.blend",
# The result in incorrect
"principled_bsdf_dispersion.blend",
]
# Metal support in Storm is no as good as OpenGL, though this needs to be