Przeglądaj źródła

added support for indirect lighting on lambert shading

Tomasz Dysinski 6 lat temu
rodzic
commit
4756f671fd

+ 4 - 17
src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js

@@ -12,16 +12,11 @@ backGeometry.normal = -geometry.normal;
 backGeometry.viewDir = geometry.viewDir;
 
 vLightFront = vec3( 0.0 );
-
-#if defined (USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-	vAmbientLightFront = vec3( 0.0 );
-#endif
+vIndirectFront = vec3( 0.0 );
 
 #ifdef DOUBLE_SIDED
 	vLightBack = vec3( 0.0 );
-	#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-		vAmbientLightBack = vec3( 0.0 );
-	#endif
+	vIndirectBack = vec3( 0.0 );
 #endif
 
 IncidentLight directLight;
@@ -110,19 +105,11 @@ vec3 directLightColor_Diffuse;
 	#pragma unroll_loop
 	for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
 
-		#ifdef USE_SHADOWMAP
-			vAmbientLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
-		#else
-			vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
-		#endif
+		vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
 
 		#ifdef DOUBLE_SIDED
 
-			#ifdef USE_SHADOWMAP
-				vAmbientLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );
-			#else
-				vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );
-			#endif
+			vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );
 
 		#endif
 

+ 6 - 12
src/renderers/shaders/ShaderLib/meshlambert_frag.glsl.js

@@ -4,15 +4,11 @@ uniform vec3 emissive;
 uniform float opacity;
 
 varying vec3 vLightFront;
-#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-	varying vec3 vAmbientLightFront;
-#endif
+varying vec3 vIndirectFront;
 
 #ifdef DOUBLE_SIDED
 	varying vec3 vLightBack;
-	#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-		varying vec3 vAmbientLightBack;
-	#endif
+	varying vec3 vIndirectBack;
 #endif
 
 
@@ -56,16 +52,14 @@ void main() {
 	// accumulation
 	reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );
 
-	#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-		#ifdef DOUBLE_SIDED
+	#ifdef DOUBLE_SIDED
 
-			reflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vAmbientLightFront : vAmbientLightBack;
+		reflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;
 
-		#else
+	#else
 
-			reflectedLight.indirectDiffuse += vAmbientLightFront;
+		reflectedLight.indirectDiffuse += vIndirectFront;
 
-		#endif
 	#endif
 
 	#include <lightmap_fragment>

+ 2 - 7
src/renderers/shaders/ShaderLib/meshlambert_vert.glsl.js

@@ -2,15 +2,11 @@ export default /* glsl */`
 #define LAMBERT
 
 varying vec3 vLightFront;
-#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-	varying vec3 vAmbientLightFront;
-#endif
+varying vec3 vIndirectFront;
 
 #ifdef DOUBLE_SIDED
 	varying vec3 vLightBack;
-	#if defined(USE_SHADOWMAP) && NUM_HEMI_LIGHTS > 0
-		varying vec3 vAmbientLightBack;
-	#endif
+	varying vec3 vIndirectBack;
 #endif
 
 #include <common>
@@ -51,6 +47,5 @@ void main() {
 	#include <lights_lambert_vertex>
 	#include <shadowmap_vertex>
 	#include <fog_vertex>
-
 }
 `;