three
Version:
JavaScript 3D library
27 lines (20 loc) • 841 B
JavaScript
import { div } from '../../math/OperatorNode.js';
import { EPSILON } from '../../math/MathNode.js';
import { Fn, vec3 } from '../../tsl/TSLBase.js';
// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf
const V_GGX_SmithCorrelated_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } ) => {
const gv = dotNL.mul( vec3( alphaT.mul( dotTV ), alphaB.mul( dotBV ), dotNV ).length() );
const gl = dotNV.mul( vec3( alphaT.mul( dotTL ), alphaB.mul( dotBL ), dotNL ).length() );
return div( 0.5, gv.add( gl ).max( EPSILON ) );
}, {
alphaT: 'float',
alphaB: 'float',
dotTV: 'float',
dotBV: 'float',
dotTL: 'float',
dotBL: 'float',
dotNV: 'float',
dotNL: 'float',
return: 'float'
} );
export default V_GGX_SmithCorrelated_Anisotropic;