17 lines
		
	
	
		
			549 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			17 lines
		
	
	
		
			549 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import { tslFn } from '../../shadernode/ShaderNode.js'; | ||
|  | 
 | ||
|  | const F_Schlick = tslFn( ( { f0, f90, dotVH } ) => { | ||
|  | 
 | ||
|  | 	// Original approximation by Christophe Schlick '94
 | ||
|  | 	// float fresnel = pow( 1.0 - dotVH, 5.0 );
 | ||
|  | 
 | ||
|  | 	// Optimized variant (presented by Epic at SIGGRAPH '13)
 | ||
|  | 	// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
 | ||
|  | 	const fresnel = dotVH.mul( - 5.55473 ).sub( 6.98316 ).mul( dotVH ).exp2(); | ||
|  | 
 | ||
|  | 	return f0.mul( fresnel.oneMinus() ).add( f90.mul( fresnel ) ); | ||
|  | 
 | ||
|  | } ); // validated
 | ||
|  | 
 | ||
|  | export default F_Schlick; |