You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
19 lines
619 B
19 lines
619 B
2 years ago
|
import { ShaderNode, add, sub, mul, div, pow2 } from '../../shadernode/ShaderNodeBaseElements.js';
|
||
|
|
||
|
// Microfacet Models for Refraction through Rough Surfaces - equation (33)
|
||
|
// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
|
||
|
// alpha is "roughness squared" in Disney’s reparameterization
|
||
|
const D_GGX = new ShaderNode( ( inputs ) => {
|
||
|
|
||
|
const { alpha, dotNH } = inputs;
|
||
|
|
||
|
const a2 = pow2( alpha );
|
||
|
|
||
|
const denom = add( mul( pow2( dotNH ), sub( a2, 1.0 ) ), 1.0 ); // avoid alpha = 0 with dotNH = 1
|
||
|
|
||
|
return mul( 1 / Math.PI, div( a2, pow2( denom ) ) );
|
||
|
|
||
|
} ); // validated
|
||
|
|
||
|
export default D_GGX;
|