gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
44 lines (43 loc) • 1.95 kB
JavaScript
//#region src/core/shaders/chunks/fragment/body/get-IBL-indirect-irradiance.ts
/**
* Get the environment map indirect irradiance (diffuse).
* @param parameters - Parameters to use to apply PBR shading.
* @param parameters.extensionsUsed - {@link PBRFragmentShaderInputParams.extensionsUsed | extensionsUsed} to check if diffuse transmission is enabled.
* @param parameters.environmentMap - {@link extras/environmentMap/EnvironmentMap.EnvironmentMap | EnvironmentMap} to use for indirect irradiance if any.
* @returns - String with environment map indirect irradiance applied to `iblIrradiance` (`vec3f`).
*/
const getIBLIndirectIrradiance = ({ extensionsUsed = [], environmentMap = null }) => {
let iblIndirectDiffuse = "";
if (environmentMap) {
iblIndirectDiffuse += `
iblIrradiance += getIBLIndirectIrradiance(
normal,
${environmentMap.sampler.name},
${environmentMap.diffuseTexture.options.name},
envRotation,
envDiffuseIntensity,
) ;`;
if (extensionsUsed.includes("KHR_materials_diffuse_transmission")) {
iblIndirectDiffuse += `
var diffuseTransmissionIblIrradiance: vec3f = getIBLIndirectIrradiance(
-1.0 * normal,
${environmentMap.sampler.name},
${environmentMap.diffuseTexture.options.name},
envRotation,
envDiffuseIntensity,
);`;
if (extensionsUsed.includes("KHR_materials_volume")) iblIndirectDiffuse += `
diffuseTransmissionIblIrradiance *= volumeAttenuation(diffuseTransmissionThickness, attenuationColor, attenuationDistance);
`;
if (extensionsUsed.includes("KHR_materials_volume_scatter")) iblIndirectDiffuse += `
// diffuseTransmissionIblIrradiance *= 1.0 - singleVolumeScatter;
diffuseTransmissionIblIrradiance *= singleVolumeScatter;
`;
iblIndirectDiffuse += `
iblIrradiance = mix(iblIrradiance, diffuseTransmissionIblIrradiance, diffuseTransmission);`;
}
}
return iblIndirectDiffuse;
};
//#endregion
export { getIBLIndirectIrradiance };