Buckets:
| import { transformedNormalView } from '../../accessors/Normal.js'; | |
| import { positionViewDirection } from '../../accessors/Position.js'; | |
| import { sheen, sheenRoughness } from '../../core/PropertyNode.js'; | |
| import { Fn, float } from '../../tsl/TSLBase.js'; | |
| // https://github.com/google/filament/blob/master/shaders/src/brdf.fs | |
| const D_Charlie = /*@__PURE__*/ Fn( ( { roughness, dotNH } ) => { | |
| const alpha = roughness.pow2(); | |
| // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF" | |
| const invAlpha = float( 1.0 ).div( alpha ); | |
| const cos2h = dotNH.pow2(); | |
| const sin2h = cos2h.oneMinus().max( 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16 | |
| return float( 2.0 ).add( invAlpha ).mul( sin2h.pow( invAlpha.mul( 0.5 ) ) ).div( 2.0 * Math.PI ); | |
| } ).setLayout( { | |
| name: 'D_Charlie', | |
| type: 'float', | |
| inputs: [ | |
| { name: 'roughness', type: 'float' }, | |
| { name: 'dotNH', type: 'float' } | |
| ] | |
| } ); | |
| // https://github.com/google/filament/blob/master/shaders/src/brdf.fs | |
| const V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => { | |
| // Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886" | |
| return float( 1.0 ).div( float( 4.0 ).mul( dotNL.add( dotNV ).sub( dotNL.mul( dotNV ) ) ) ); | |
| } ).setLayout( { | |
| name: 'V_Neubelt', | |
| type: 'float', | |
| inputs: [ | |
| { name: 'dotNV', type: 'float' }, | |
| { name: 'dotNL', type: 'float' } | |
| ] | |
| } ); | |
| const BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => { | |
| const halfDir = lightDirection.add( positionViewDirection ).normalize(); | |
| const dotNL = transformedNormalView.dot( lightDirection ).clamp(); | |
| const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); | |
| const dotNH = transformedNormalView.dot( halfDir ).clamp(); | |
| const D = D_Charlie( { roughness: sheenRoughness, dotNH } ); | |
| const V = V_Neubelt( { dotNV, dotNL } ); | |
| return sheen.mul( D ).mul( V ); | |
| } ); | |
| export default BRDF_Sheen; | |
Xet Storage Details
- Size:
- 1.89 kB
- Xet hash:
- 0b2eff0d05b90ae97d84e3b9473d2a65a66799fdfc314229f36bbc377a78599d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.