Quellcode durchsuchen

Merge pull request #14069 from WestLangley/dev-instancing_lambert2

Lambert instancing example: replace ShaderMaterial with modified MeshLambertMaterial
Mr.doob vor 7 Jahren
Ursprung
Commit
cd97b90dcc
1 geänderte Dateien mit 115 neuen und 136 gelöschten Zeilen
  1. 115 136
      examples/webgl_buffergeometry_instancing_lambert.html

+ 115 - 136
examples/webgl_buffergeometry_instancing_lambert.html

@@ -56,153 +56,150 @@
 
 		if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 
-		THREE.CustomShaderLib = {
+		THREE.ShaderLib.customDepthRGBA = { // this is a cut-and-paste of the depth shader -- modified to accommodate instancing for this app
 
-			customDepthRGBA: { // this is a cut-and-paste of the depth shader -- modified to accommodate instancing for this app
+			uniforms: THREE.ShaderLib.depth.uniforms,
 
-				uniforms: THREE.ShaderLib.depth.uniforms,
+			vertexShader:
+				`
+				// instanced
+				#ifdef INSTANCED
 
-				vertexShader:
-					`
-					// instanced
-					#ifdef INSTANCED
+					attribute vec3 instanceOffset;
+					attribute float instanceScale;
 
-						attribute vec3 instanceOffset;
-						attribute float instanceScale;
+				#endif
 
-					#endif
+				#include <common>
+				#include <uv_pars_vertex>
+				#include <displacementmap_pars_vertex>
+				#include <morphtarget_pars_vertex>
+				#include <skinning_pars_vertex>
+				#include <logdepthbuf_pars_vertex>
+				#include <clipping_planes_pars_vertex>
 
-					#include <common>
-					#include <uv_pars_vertex>
-					#include <displacementmap_pars_vertex>
-					#include <morphtarget_pars_vertex>
-					#include <skinning_pars_vertex>
-					#include <logdepthbuf_pars_vertex>
-					#include <clipping_planes_pars_vertex>
+				void main() {
 
-					void main() {
+					#include <uv_vertex>
 
-						#include <uv_vertex>
+					#include <skinbase_vertex>
 
-						#include <skinbase_vertex>
+					#ifdef USE_DISPLACEMENTMAP
 
-						#ifdef USE_DISPLACEMENTMAP
+						#include <beginnormal_vertex>
+						#include <morphnormal_vertex>
+						#include <skinnormal_vertex>
 
-							#include <beginnormal_vertex>
-							#include <morphnormal_vertex>
-							#include <skinnormal_vertex>
+					#endif
 
-						#endif
+					#include <begin_vertex>
 
-						#include <begin_vertex>
+					// instanced
+					#ifdef INSTANCED
 
-						// instanced
-						#ifdef INSTANCED
+						transformed *= instanceScale;
+						transformed = transformed + instanceOffset;
 
-							transformed *= instanceScale;
-							transformed = transformed + instanceOffset;
+					#endif
 
-						#endif
+					#include <morphtarget_vertex>
+					#include <skinning_vertex>
+					#include <displacementmap_vertex>
+					#include <project_vertex>
+					#include <logdepthbuf_vertex>
+					#include <clipping_planes_vertex>
 
-						#include <morphtarget_vertex>
-						#include <skinning_vertex>
-						#include <displacementmap_vertex>
-						#include <project_vertex>
-						#include <logdepthbuf_vertex>
-						#include <clipping_planes_vertex>
+				}
+			`,
 
-					}
-				`,
+			fragmentShader: THREE.ShaderChunk.depth_frag
 
-				fragmentShader: THREE.ShaderChunk.depth_frag
+		};
 
-			},
+		THREE.ShaderLib.lambert = { // this is a cut-and-paste of the lambert shader -- modified to accommodate instancing for this app
 
-			lambert: { // this is a cut-and-paste of the lambert shader -- modified to accommodate instancing for this app
+			uniforms: THREE.ShaderLib.lambert.uniforms,
 
-				uniforms: THREE.ShaderLib.lambert.uniforms,
+			vertexShader:
+				`
+				#define LAMBERT
 
-				vertexShader:
-					`
-					#define LAMBERT
+				#ifdef INSTANCED
+					attribute vec3 instanceOffset;
+					attribute vec3 instanceColor;
+					attribute float instanceScale;
+				#endif
 
-					#ifdef INSTANCED
-						attribute vec3 instanceOffset;
-						attribute vec3 instanceColor;
-						attribute float instanceScale;
-					#endif
+				varying vec3 vLightFront;
 
-					varying vec3 vLightFront;
+				#ifdef DOUBLE_SIDED
 
-					#ifdef DOUBLE_SIDED
+					varying vec3 vLightBack;
 
-						varying vec3 vLightBack;
+				#endif
 
-					#endif
+				#include <common>
+				#include <uv_pars_vertex>
+				#include <uv2_pars_vertex>
+				#include <envmap_pars_vertex>
+				#include <bsdfs>
+				#include <lights_pars_begin>
+				#include <lights_pars_maps>
+				#include <color_pars_vertex>
+				#include <fog_pars_vertex>
+				#include <morphtarget_pars_vertex>
+				#include <skinning_pars_vertex>
+				#include <shadowmap_pars_vertex>
+				#include <logdepthbuf_pars_vertex>
+				#include <clipping_planes_pars_vertex>
 
-					#include <common>
-					#include <uv_pars_vertex>
-					#include <uv2_pars_vertex>
-					#include <envmap_pars_vertex>
-					#include <bsdfs>
-					#include <lights_pars_begin>
-					#include <lights_pars_maps>
-					#include <color_pars_vertex>
-					#include <fog_pars_vertex>
-					#include <morphtarget_pars_vertex>
-					#include <skinning_pars_vertex>
-					#include <shadowmap_pars_vertex>
-					#include <logdepthbuf_pars_vertex>
-					#include <clipping_planes_pars_vertex>
-
-					void main() {
-
-						#include <uv_vertex>
-						#include <uv2_vertex>
-						#include <color_vertex>
-
-						// vertex colors instanced
-						#ifdef INSTANCED
-							#ifdef USE_COLOR
-								vColor.xyz = instanceColor.xyz;
-							#endif
-						#endif
+				void main() {
 
-						#include <beginnormal_vertex>
-						#include <morphnormal_vertex>
-						#include <skinbase_vertex>
-						#include <skinnormal_vertex>
-						#include <defaultnormal_vertex>
+					#include <uv_vertex>
+					#include <uv2_vertex>
+					#include <color_vertex>
 
-						#include <begin_vertex>
-
-						// position instanced
-						#ifdef INSTANCED
-							transformed *= instanceScale;
-							transformed = transformed + instanceOffset;
+					// vertex colors instanced
+					#ifdef INSTANCED
+						#ifdef USE_COLOR
+							vColor.xyz = instanceColor.xyz;
 						#endif
+					#endif
+
+					#include <beginnormal_vertex>
+					#include <morphnormal_vertex>
+					#include <skinbase_vertex>
+					#include <skinnormal_vertex>
+					#include <defaultnormal_vertex>
+
+					#include <begin_vertex>
 
-						#include <morphtarget_vertex>
-						#include <skinning_vertex>
-						#include <project_vertex>
-						#include <logdepthbuf_vertex>
-						#include <clipping_planes_vertex>
+					// position instanced
+					#ifdef INSTANCED
+						transformed *= instanceScale;
+						transformed = transformed + instanceOffset;
+					#endif
 
-						#include <worldpos_vertex>
-						#include <envmap_vertex>
-						#include <lights_lambert_vertex>
-						#include <shadowmap_vertex>
-						#include <fog_vertex>
+					#include <morphtarget_vertex>
+					#include <skinning_vertex>
+					#include <project_vertex>
+					#include <logdepthbuf_vertex>
+					#include <clipping_planes_vertex>
 
-					}
-					`,
+					#include <worldpos_vertex>
+					#include <envmap_vertex>
+					#include <lights_lambert_vertex>
+					#include <shadowmap_vertex>
+					#include <fog_vertex>
 
-				fragmentShader: THREE.ShaderLib.lambert.fragmentShader
+				}
+				`,
 
-			}
+			fragmentShader: THREE.ShaderLib.lambert.fragmentShader
 
 		};
 
+
 		//
 
 		var mesh, renderer, scene, camera, controls;
@@ -303,48 +300,30 @@
 			var envMap = new THREE.TextureLoader().load( `textures/metal.jpg`, function ( texture ) {
 
 				texture.mapping = THREE.SphericalReflectionMapping;
+				texture.encoding = THREE.sRGBEncoding;
+				if ( mesh ) mesh.material.needsUpdate = true;
 
 			} );
 
-			var shader = THREE.CustomShaderLib[ 'lambert' ];
+			var material = new THREE.MeshLambertMaterial( {
 
-			var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
-
-			uniforms[ "diffuse" ].value.set( 0xffb54a );
-			uniforms[ "envMap" ].value = envMap;
-			uniforms[ "reflectivity" ].value = 1;
-
-			// defines - Since we are reusing the ShaderChunks, we must specify the required defines.
-			// The renderer does not set these defines for ShaderMaterial
-
-			var defines = {
-				'INSTANCED': "",
-				'USE_ENVMAP': "",
-				'ENVMAP_TYPE_SPHERE': "",
-				'ENVMAP_MODE_REFLECTION': "",
-				'ENVMAP_BLENDING_MULTIPLY': "",
-			};
-
-			var material = new THREE.ShaderMaterial( {
-
-				// Material and ShaderMaterial properties can be set here -- except opacity
-				// the Lambert-properties must be set in the uniforms or defines
-
-				defines: defines,
-				uniforms: uniforms,
-				vertexShader: shader.vertexShader,
-				fragmentShader: shader.fragmentShader,
+				color: 0xffb54a,
+				envMap: envMap,
+				combine: THREE.MultiplyOperation,
+				reflectivity: 0.8,
 
 				vertexColors: THREE.VertexColors,
-				lights: true,
 				fog: true
 
 			} );
 
+			material.defines = material.defines || {};
+			material.defines[ 'INSTANCED'] = "";
+
 
 			// custom depth material - required for instanced shadows
 
-			var shader = THREE.CustomShaderLib[ 'customDepthRGBA' ];
+			var shader = THREE.ShaderLib[ 'customDepthRGBA' ];
 
 			var uniforms = THREE.UniformsUtils.clone( shader.uniforms );