123456789101112131415161718192021222324252627 |
- import {
- ShaderNode, dotNV, vec2, vec4, mul, min
- } from '../../shadernode/ShaderNodeElements.js';
- // Analytical approximation of the DFG LUT, one half of the
- // split-sum approximation used in indirect specular lighting.
- // via 'environmentBRDF' from "Physically Based Shading on Mobile"
- // https://www.unrealengine.com/blog/physically-based-shading-on-mobile
- const DFGApprox = new ShaderNode( ( inputs ) => {
- const { roughness } = inputs;
- const c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );
- const c1 = vec4( 1, 0.0425, 1.04, - 0.04 );
- const r = roughness.mul( c0 ).add( c1 );
- const a004 = min( mul( r.x, r.x ), dotNV.mul( - 9.28 ).exp2() ).mul( r.x ).add( r.y );
- const fab = vec2( - 1.04, 1.04 ).mul( a004 ).add( r.zw );
- return fab;
- } );
- export default DFGApprox;
|