Creates a new Volume property for use on a Material.
Disables and removes the extension from the Document.
Indicates to the client whether it is OK to load the asset when this extension is not recognized. Optional extensions are generally preferred, if there is not a good reason to require a client to completely fail when an extension isn't known.
Lists all ExtensionProperty instances associated with, or created by, this extension. Includes only instances that are attached to the Document's graph; detached instances will be excluded.
Indicates to the client whether it is OK to load the asset when this extension is not recognized. Optional extensions are generally preferred, if there is not a good reason to require a client to completely fail when an extension isn't known.
Made by Don McCurdy. Documentation built with greendoc and published under Creative Commons Attribution 3.0.
KHR_materials_volume adds refraction, absorption, or scattering to a glTF PBR material already using transmission or translucency.
By default, a glTF 2.0 material describes the scattering properties of a surface enclosing an infinitely thin volume. The surface defined by the mesh represents a thin wall. The volume extension makes it possible to turn the surface into an interface between volumes. The mesh to which the material is attached defines the boundaries of an homogeneous medium and therefore must be manifold. Volumes provide effects like refraction, absorption and scattering. Scattering effects will require future (TBD) extensions.
The volume extension must be combined with KHRMaterialsTransmission or
KHR_materials_translucency
in order to define entry of light into the volume.Properties:
Example
The
KHRMaterialsVolume
class provides a single ExtensionProperty type,Volume
, which may be attached to any Material instance. For example:import { KHRMaterialsVolume, Volume } from '@gltf-transform/extensions'; // Create an Extension attached to the Document. const volumeExtension = document.createExtension(KHRMaterialsVolume); // Create a Volume property. const volume = volumeExtension.createVolume() .setThicknessFactor(1.0) .setThicknessTexture(texture) .setAttenuationDistance(1.0) .setAttenuationColorFactor([1, 0.5, 0.5]); // Attach the property to a Material. material.setExtension('KHR_materials_volume', volume);
A thickness texture is required in most realtime renderers, and can be baked in software such as Blender or Substance Painter. When
thicknessFactor = 0
, all volumetric effects are disabled.