添加关照、全局等高线、修改图层问题
This commit is contained in:
		
							
								
								
									
										57
									
								
								static/sdk/three/jsm/nodes/functions/BSDF/BRDF_Sheen.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								static/sdk/three/jsm/nodes/functions/BSDF/BRDF_Sheen.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| import { transformedNormalView } from '../../accessors/NormalNode.js'; | ||||
| import { positionViewDirection } from '../../accessors/PositionNode.js'; | ||||
| import { sheen, sheenRoughness } from '../../core/PropertyNode.js'; | ||||
| import { tslFn, float } from '../../shadernode/ShaderNode.js'; | ||||
|  | ||||
| // https://github.com/google/filament/blob/master/shaders/src/brdf.fs | ||||
| const D_Charlie = tslFn( ( { 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 = tslFn( ( { 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 = tslFn( ( { 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; | ||||
		Reference in New Issue
	
	Block a user