UNPKG

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.

50 lines (48 loc) 1.53 kB
//#region src/core/shaders/chunks/fragment/body/get-multi-scattering.ts /** * Get the IBL GGX Fresnel from the environment map LUT Texture or DFG approximation, used for multi-scattering. * @param parameters - Parameters to use to apply PBR shading. * @param parameters.environmentMap - {@link extras/environmentMap/EnvironmentMap.EnvironmentMap | EnvironmentMap} to use for GGX Fresnel if any. * @returns - String with GGX Fresnel applied to `dielectricScattering` (`MultiScattering`) and `metallicScattering` (`MultiScattering`). */ const computeMultiScattering = ({ environmentMap = null }) => { let multiScattering = ""; if (environmentMap && environmentMap.lutTexture) multiScattering += ` let fab: vec2f = DFGFromLUT( normal, viewDirection, roughness, ${environmentMap.sampler.name}, ${environmentMap.lutTexture.options.name}, ); `; else multiScattering += ` let fab: vec2f = DFGApprox( normal, viewDirection, roughness, ); `; multiScattering += ` // Both indirect specular and indirect diffuse light accumulate here // Compute multiscattering separately for dielectric and metallic, then mix computeMultiscattering( fab, specularColor, specularF90, iridescence, iridescenceFresnelDielectric, &dielectricScattering ); computeMultiscattering( fab, diffuseColor, specularF90, iridescence, iridescenceFresnelMetallic, &metallicScattering );`; return multiScattering; }; //#endregion export { computeMultiScattering };