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.
31 lines (30 loc) • 1.47 kB
JavaScript
//#region src/core/shaders/chunks/fragment/body/get-clearcoat-indirect-specular.ts
/**
* Get the clearcoat indirect radiance (specular) contribution as `clearcoatSpecularIndirect` (`vec3f`).
*
* @param parameters - Parameters used to create the shader chunk.
* @param parameters.extensionsUsed - {@link PBRFragmentShaderInputParams.extensionsUsed | extensionsUsed} to check if clearcoat is enabled.
* @param parameters.environmentMap - {@link extras/environmentMap/EnvironmentMap.EnvironmentMap | EnvironmentMap} to use for GGX Fresnel if any.
* @returns - String with the `clearcoatSpecularIndirect` (`vec3f`) value set.
*/
const getClearcoatIndirectSpecular = ({ extensionsUsed = [], environmentMap = null } = {}) => {
let clearcoatIndirect = "";
if (extensionsUsed.includes("KHR_materials_clearcoat")) {
if (environmentMap && environmentMap.lutTexture) clearcoatIndirect += `
let clearcoatFab: vec2f = DFGFromLUT(
clearcoatNormal,
viewDirection,
clearcoatRoughness,
${environmentMap.sampler.name},
${environmentMap.lutTexture.options.name},
);`;
else clearcoatIndirect += `
let clearcoatFab: vec2f = DFGApprox(clearcoatNormal, viewDirection, clearcoatRoughness);`;
clearcoatIndirect += `
let clearcoatBRDF: vec3f = clearcoatF0 * clearcoatFab.x + clearcoatF90 * clearcoatFab.y;
clearcoatSpecularIndirect += clearcoatRadiance * clearcoatBRDF;`;
}
return clearcoatIndirect;
};
//#endregion
export { getClearcoatIndirectSpecular };