Sfoglia il codice sorgente

WebGPURenderer: Add MeshLambertNodeMaterial (#26448)

sunag 2 anni fa
parent
commit
cec0dba9a7

+ 24 - 0
examples/jsm/nodes/functions/LambertLightingModel.js

@@ -0,0 +1,24 @@
+import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
+import { lightingModel } from '../core/LightingModel.js';
+import { diffuseColor } from '../core/PropertyNode.js';
+import { transformedNormalView } from '../accessors/NormalNode.js';
+import { tslFn } from '../shadernode/ShaderNode.js';
+
+const RE_Direct_Lambert = tslFn( ( { lightDirection, lightColor, reflectedLight } ) => {
+
+	const dotNL = transformedNormalView.dot( lightDirection ).clamp();
+	const irradiance = dotNL.mul( lightColor );
+
+	reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );
+
+} );
+
+const RE_IndirectDiffuse_Lambert = tslFn( ( { irradiance, reflectedLight } ) => {
+
+	reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
+
+} );
+
+const lambertLightingModel = lightingModel( null, RE_Direct_Lambert, RE_IndirectDiffuse_Lambert );
+
+export default lambertLightingModel;

+ 1 - 0
examples/jsm/nodes/materials/Materials.js

@@ -4,6 +4,7 @@ export { default as NodeMaterial, addNodeMaterial, createNodeMaterialFromType }
 export { default as LineBasicNodeMaterial } from './LineBasicNodeMaterial.js';
 export { default as MeshNormalNodeMaterial } from './MeshNormalNodeMaterial.js';
 export { default as MeshBasicNodeMaterial } from './MeshBasicNodeMaterial.js';
+export { default as MeshLambertNodeMaterial } from './MeshLambertNodeMaterial.js';
 export { default as MeshPhongNodeMaterial } from './MeshPhongNodeMaterial.js';
 export { default as MeshStandardNodeMaterial } from './MeshStandardNodeMaterial.js';
 export { default as MeshPhysicalNodeMaterial } from './MeshPhysicalNodeMaterial.js';

+ 34 - 0
examples/jsm/nodes/materials/MeshLambertNodeMaterial.js

@@ -0,0 +1,34 @@
+import NodeMaterial, { addNodeMaterial } from './NodeMaterial.js';
+import lambertLightingModel from '../functions/LambertLightingModel.js';
+
+import { MeshLambertMaterial } from 'three';
+
+const defaultValues = new MeshLambertMaterial();
+
+class MeshLambertNodeMaterial extends NodeMaterial {
+
+	constructor( parameters ) {
+
+		super();
+
+		this.isMeshLambertNodeMaterial = true;
+
+		this.lights = true;
+
+		this.setDefaultValues( defaultValues );
+
+		this.setValues( parameters );
+
+	}
+
+	constructLightingModel( /*builder*/ ) {
+
+		return lambertLightingModel;
+
+	}
+
+}
+
+export default MeshLambertNodeMaterial;
+
+addNodeMaterial( MeshLambertNodeMaterial );