KHR_materials_volume_scatter (replaces #1928) #2453
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.
The extension in this PR defines volumetric scattering and serves as an replacement/alternative to #1928
Changes wrt. #1928
Naming
Choosing "KHR_materials_volume_scatter" over "KHR_materials_subsurface" clarifies that this extension addresses general volumetric scattering and that it functions only in combination with a real volume (by using KHR_materials_volume). The term "subsurface" scattering is often linked with dense scattering scenarios, such as wax or skin, which can be misleading - dense scattering is just one specific configuration of this extension (also see section on scattering + diffuse transmission).
Scatter albedo replaces scatter coefficient
In KHR_materials_subsurface #1928, scatter color and distance are used to specify the scattering coefficient directly. This PR proposes using multi-scatter albedo instead, aligning more closely with approaches in OpenPBR (subsurface) and Enterprise PBR. Using scatter albedo also better harmonizes with the definition and naming of attenuation parameters in KHR_materials_volume.
Adding scatter anisotropy
Discussion
There has already been some discussion in the PBR TSG on whether to use single-scatter albedo or multi-scatter albedo. Multi-scatter albedo, being a derived parameter, requires conversion to single-scatter albedo. The PR currently suggests the conversion method proposed by Kulla & Conty. What happens if potential future alternative conversions prove more effective? Comments suggested that it is possible to keep the normative part of the multi-scatter albedo abstract and declare the actual equation non-normative.
Currently, volume parameters are not allowed to be texturable. OpenPBR does permit this. As @proog128 notes, should we also decide to allow this at some point, for texturable scatter albedo, the conversion would need to be computed per pixel within the shader.