REIndirectSpecular: "\n// Indirect Specular RenderEquations\nfn RE_IndirectSpecular(\n radiance: vec3f,\n irradiance: vec3f,\n normal: vec3f,\n diffuseColor: vec3f,\n specularFactor: f32,\n specularColorFactor: vec3f,\n viewDirection: vec3f,\n metallic: f32,\n roughness: f32,\n iBLGGXFresnel: IBLGGXFresnel,\n ptr_reflectedLight: ptr<function, ReflectedLight>\n) {\n let k_D: vec3f = diffuseColor * (1.0 - iBLGGXFresnel.FssEss + iBLGGXFresnel.FmsEms);\n\n // we just add radiance and irradiance to the indirect contributions using iBLGGXFresnel\n // we might need to adjust when implementing clearcoat, sheen or iridescence\n\n // we remove RECIPROCAL_PI multiplication since the LUT already ensures energy conservation\n let cosineWeightedIrradiance: vec3f = irradiance;\n // let cosineWeightedIrradiance: vec3f = irradiance * RECIPROCAL_PI; \n\n (*ptr_reflectedLight).indirectSpecular += iBLGGXFresnel.FssEss * radiance;\n (*ptr_reflectedLight).indirectSpecular += iBLGGXFresnel.FmsEms * cosineWeightedIrradiance;\n \n (*ptr_reflectedLight).indirectDiffuse += k_D * cosineWeightedIrradiance;\n}\n" = ...

WGSL functions to calculate the indirect specular and diffuse contributions of lights using multi-scattering.