Skip to content

Add KHR_materials_scatter for discussion#2579

Open
MiiBond wants to merge 3 commits into
KhronosGroup:mainfrom
MiiBond:mbond/KHR_materials_scatter
Open

Add KHR_materials_scatter for discussion#2579
MiiBond wants to merge 3 commits into
KhronosGroup:mainfrom
MiiBond:mbond/KHR_materials_scatter

Conversation

@MiiBond

@MiiBond MiiBond commented May 11, 2026

Copy link
Copy Markdown
Contributor

Based on some discussions in the glTF PBR group this morning, I've had Claude throw together this proposed extension.

The purpose is to simplify our current approach to supporting diffuse transmission and scattering and to bring it more into line with material models like OpenPBR and Standard Surface which don't support both volumetric materials and diffusely-transmitting surfaces at the same time.

This is one extension that replaces both KHR_materials_volume_scatter and KHR_materials_diffuse_transmission:

  • When a volume is defined, it behaves like the currently proposed KHR_materials_volume_scatter.
  • When no volume exists (i.e. thin-walled), the surface becomes diffusely-transmitting and the scatter color is applied as a transmission tint. This is how both OpenPBR and Standard Surface behave.
  • A scatterStrength property is used to scale the affect of the extension and defaults to 0.0 (i.e. "off").

Some notes:

  • In OpenPBR, both the subsurface and transmission slabs enable surface transmission with their weight parameter. In this proposal, surface transmission is still handled only by the KHR_materials_transmission extension. That's probably okay because the OpenPBR slabs both implement the volume coefficients (including scattering) leading to somewhat redundant behaviour. In our glTF proposal, there is a single way to define coefficients, surface transmission, etc.
  • The current version of the doc makes quite a few mentions of the existing proposed extensions. If we were to move forward with this, we'd obviously remove those.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@emackey emackey added the PBR Physically Based Rendering label Jun 1, 2026
…nisotropy semantics

- Add scatterFactor (default 0) and scatterTexture (alpha channel) properties
  to control scattering weight; default-off follows glTF extension convention
- scatterTexture uses the alpha channel so it can share a texture with
  multiscatterColorTexture
- In thin-walled mode, scatterFactor lerps between specular BTDF and scatter
  BSDF, and lerps the scattered color between baseColor and multiscatterColor
- In volumetric mode, scatterFactor scales the effective multi-scatter albedo
- Correct scatterAnisotropy thin-walled semantics: the parameter controls the
  hemisphere split (forward fraction = (1+g)/2, backward = (1-g)/2), not a
  bias on a pure BTDF; rename scatter_btdf -> scatter_bsdf throughout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@emackey

emackey commented Jun 1, 2026

Copy link
Copy Markdown
Member

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

Labels

PBR Physically Based Rendering

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants