| 12345678910111213141516171819202122 | import {	ShaderNode, div, max, sub, mul, saturate, pow, pow2, pow4, cond, greaterThan} from '../../shadernode/ShaderNodeBaseElements.js';const getDistanceAttenuation = new ShaderNode( ( inputs ) => {	const { lightDistance, cutoffDistance, decayExponent } = inputs;	// based upon Frostbite 3 Moving to Physically-based Rendering	// page 32, equation 26: E[window1]	// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf	const distanceFalloff = div( 1.0, max( pow( lightDistance, decayExponent ), 0.01 ) );	return cond(		greaterThan( cutoffDistance, 0 ),		mul( distanceFalloff, pow2( saturate( sub( 1.0, pow4( div( lightDistance, cutoffDistance ) ) ) ) ) ),		distanceFalloff	);} ); // validatedexport default getDistanceAttenuation;
 |