Browse Source

get skin, tone mapping and terrain examples working with new BSDF and light structures.

Ben Houston 9 years ago
parent
commit
3c9e00fe0d

+ 18 - 43
examples/js/ShaderSkin.js

@@ -200,7 +200,7 @@ THREE.ShaderSkin = {
 
 					"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {",
 
-						"vec3 dirVector = directionalLight[ i ].direction;",
+						"vec3 dirVector = directionalLights[ i ].direction;",
 
 						"float dirDiffuseWeightFull = max( dot( normal, dirVector ), 0.0 );",
 						"float dirDiffuseWeightHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );",
@@ -208,8 +208,8 @@ THREE.ShaderSkin = {
 
 						"float dirSpecularWeight = KS_Skin_Specular( normal, dirVector, viewerDirection, uRoughness, uSpecularBrightness );",
 
-						"totalDiffuseLight += directionalLight[ i ].color * dirDiffuseWeight;",
-						"totalSpecularLight += directionalLight[ i ].color * ( dirSpecularWeight * specularStrength );",
+						"totalDiffuseLight += directionalLights[ i ].color * dirDiffuseWeight;",
+						"totalSpecularLight += directionalLights[ i ].color * ( dirSpecularWeight * specularStrength );",
 
 					"}",
 
@@ -369,19 +369,10 @@ THREE.ShaderSkin = {
 
 			"uniform vec3 ambientLightColor;",
 
-			"#if MAX_DIR_LIGHTS > 0",
-				"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];",
-				"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];",
-			"#endif",
-
-			"#if MAX_POINT_LIGHTS > 0",
-				"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];",
-				"varying vec4 vPointLight[ MAX_POINT_LIGHTS ];",
-			"#endif",
-
 			"varying vec3 vViewPosition;",
 
 			THREE.ShaderChunk[ "common" ],
+			THREE.ShaderChunk[ "lights" ],
 			THREE.ShaderChunk[ "fog_pars_fragment" ],
 
 			"float fresnelReflectance( vec3 H, vec3 V, float F0 ) {",
@@ -464,11 +455,12 @@ THREE.ShaderSkin = {
 
 					"for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {",
 
-						"vec3 pointVector = normalize( vPointLight[ i ].xyz );",
-						"float attenuation = vPointLight[ i ].w;",
-
+						"vec3 pointVector = normalize( pointLights[ i ].direction );",
+				
 						"float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );",
 
+						"float attenuation = calcLightAttenuation( length( lVector ), pointLights[ i ].distance, pointLights[ i ].decay );",
+				
 						"totalDiffuseLight += pointLightColor[ i ] * ( pointDiffuseWeight * attenuation );",
 
 						"if ( passID == 1 ) {",
@@ -489,17 +481,18 @@ THREE.ShaderSkin = {
 
 					"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {",
 
-						"vec3 dirVector = directionalLightDirection[ i ];",
+						"vec3 dirVector = directionalLights[ i ].direction;",
 
 						"float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );",
 
-						"totalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;",
+					
+						"totalDiffuseLight += directionalLights[ i ].color * dirDiffuseWeight;",
 
 						"if ( passID == 1 ) {",
 
 							"float dirSpecularWeight = KS_Skin_Specular( normal, dirVector, viewerDirection, uRoughness, uSpecularBrightness );",
 
-							"totalSpecularLight += directionalLightColor[ i ] * mSpecular.xyz * dirSpecularWeight;",
+							"totalSpecularLight += directionalLights[ i ].color * mSpecular.xyz * dirSpecularWeight;",
 
 						"}",
 
@@ -580,19 +573,10 @@ THREE.ShaderSkin = {
 			"varying vec3 vNormal;",
 			"varying vec2 vUv;",
 
-			"#if MAX_POINT_LIGHTS > 0",
-
-				"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDistance[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDecay[ MAX_POINT_LIGHTS ];",
-
-				"varying vec4 vPointLight[ MAX_POINT_LIGHTS ];",
-
-			"#endif",
-
 			"varying vec3 vViewPosition;",
 
 			THREE.ShaderChunk[ "common" ],
+			THREE.ShaderChunk[ "lights" ],
 
 			"void main() {",
 
@@ -612,9 +596,9 @@ THREE.ShaderSkin = {
 
 					"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {",
 
-						"vec3 lVector = pointLightPosition[ i ] - vViewPosition;",
+						"vec3 lVector = pointLights[ i ].position - vViewPosition;",
 
-						"float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[i] );",
+						"float attenuation = calcLightAttenuation( length( lVector ), pointLights[ i ].distance, pointLights[ i ].decay );",
 
 						"lVector = normalize( lVector );",
 
@@ -648,19 +632,10 @@ THREE.ShaderSkin = {
 			"varying vec3 vNormal;",
 			"varying vec2 vUv;",
 
-			"#if MAX_POINT_LIGHTS > 0",
-
-				"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDistance[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDecay[ MAX_POINT_LIGHTS ];",
-
-				"varying vec4 vPointLight[ MAX_POINT_LIGHTS ];",
-
-			"#endif",
-
 			"varying vec3 vViewPosition;",
 
 			THREE.ShaderChunk[ "common" ],
+			THREE.ShaderChunk[ "lights" ],
 
 			"void main() {",
 
@@ -680,9 +655,9 @@ THREE.ShaderSkin = {
 
 					"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {",
 
-						"vec3 lVector = pointLightPosition[ i ] - vViewPosition;",
+						"vec3 lVector = pointLights[ i ].position - vViewPosition;",
 
-						"float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[i] );",
+						"float attenuation = calcLightAttenuation( length( lVector ), pointLights[ i ].distance, pointLights[ i ].decay );",
 
 						"lVector = normalize( lVector );",
 

+ 11 - 33
examples/js/ShaderTerrain.js

@@ -86,33 +86,11 @@ THREE.ShaderTerrain = {
 
 			"uniform vec3 ambientLightColor;",
 
-			"#if MAX_DIR_LIGHTS > 0",
-
-				"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];",
-				"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];",
-
-			"#endif",
-
-			"#if MAX_HEMI_LIGHTS > 0",
-
-				"uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];",
-				"uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];",
-				"uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];",
-
-			"#endif",
-
-			"#if MAX_POINT_LIGHTS > 0",
-
-				"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];",
-				"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDistance[ MAX_POINT_LIGHTS ];",
-				"uniform float pointLightDecay[ MAX_POINT_LIGHTS ];",
-
-			"#endif",
-
 			"varying vec3 vViewPosition;",
 
 			THREE.ShaderChunk[ "common" ],
+			THREE.ShaderChunk[ "bsdfs" ],
+			THREE.ShaderChunk[ "lights" ],
 			THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
 			THREE.ShaderChunk[ "fog_pars_fragment" ],
 
@@ -168,9 +146,9 @@ THREE.ShaderTerrain = {
 
 					"for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {",
 
-						"vec3 lVector = pointLightPosition[ i ] + vViewPosition.xyz;",
+						"vec3 lVector = pointLights[ i ].position + vViewPosition.xyz;",
 
-						"float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[i] );",
+						"float attenuation = calcLightAttenuation( length( lVector ), pointLights[ i ].distance, pointLights[ i ].decay );",
 
 						"lVector = normalize( lVector );",
 
@@ -181,8 +159,8 @@ THREE.ShaderTerrain = {
 
 						"float pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );",
 
-						"totalDiffuseLight += attenuation * pointLightColor[ i ] * pointDiffuseWeight;",
-						"totalSpecularLight += attenuation * pointLightColor[ i ] * specular * pointSpecularWeight * pointDiffuseWeight;",
+						"totalDiffuseLight += attenuation * pointLights[ i ].color * pointDiffuseWeight;",
+						"totalSpecularLight += attenuation * pointLights[ i ].color * specular * pointSpecularWeight * pointDiffuseWeight;",
 
 					"}",
 
@@ -197,7 +175,7 @@ THREE.ShaderTerrain = {
 
 					"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {",
 
-						"vec3 dirVector = directionalLightDirection[ i ];",
+						"vec3 dirVector = directionalLights[ i ].direction;",
 						"vec3 dirHalfVector = normalize( dirVector + viewPosition );",
 
 						"float dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );",
@@ -205,8 +183,8 @@ THREE.ShaderTerrain = {
 
 						"float dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );",
 
-						"totalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;",
-						"totalSpecularLight += directionalLightColor[ i ] * specular * dirSpecularWeight * dirDiffuseWeight;",
+						"totalDiffuseLight += directionalLights[ i ].color * dirDiffuseWeight;",
+						"totalSpecularLight += directionalLights[ i ].color * specular * dirSpecularWeight * dirDiffuseWeight;",
 
 					"}",
 
@@ -228,7 +206,7 @@ THREE.ShaderTerrain = {
 						"float dotProduct = dot( normal, lVector );",
 						"float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;",
 
-						"totalDiffuseLight += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );",
+						"totalDiffuseLight += mix( hemisphereLights[ i ].groundColor, hemisphereLights[ i ].skyColor, hemiDiffuseWeight );",
 
 						// specular (sky light)
 
@@ -246,7 +224,7 @@ THREE.ShaderTerrain = {
 						"float hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;",
 						"hemiSpecularWeight += specularTex.r * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );",
 
-						"totalSpecularLight += specular * mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight ) * hemiSpecularWeight * hemiDiffuseWeight;",
+						"totalSpecularLight += specular * mix( hemisphereLights[ i ].groundColor, hemisphereLights[ i ].skyColor, hemiDiffuseWeight ) * hemiSpecularWeight * hemiDiffuseWeight;",
 
 					"}",
 

+ 6 - 3
examples/webgl_shaders_tonemapping.html

@@ -37,7 +37,7 @@
 			<div class="label" style="position: absolute;left: 80%;bottom: 5%;">Adaptive Tone Mapping</div>
 		</div>
 
-		<script src="../build/three.js"></script>
+		<script src="../build/three.min.js"></script>
 
 		<script src="js/Detector.js"></script>
 		<script src="js/libs/dat.gui.min.js"></script>
@@ -158,6 +158,9 @@
 
 					fragmentShader: [
 
+						THREE.ShaderChunk[ "common" ],
+						THREE.ShaderChunk[ "bsdfs" ],
+						THREE.ShaderChunk[ "lights" ],
 						THREE.ShaderChunk[ "lights_phong_pars_fragment" ],
 
 						"void main() {",
@@ -169,12 +172,12 @@
 
 								"for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {",
 
-									"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );",
+									"vec4 lDirection = viewMatrix * vec4( directionalLights[i].direction, 0.0 );",
 									"vec3 dirVector = normalize( lDirection.xyz );",
 									"float dotProduct = dot( viewPosition, dirVector );",
 									"dotProduct = 1.0 * max( dotProduct, 0.0 ) + (1.0 - max( -dot( normal, dirVector ), 0.0 ));",
 									"dotProduct *= dotProduct;",
-									"dirDiffuse += max( 0.5 * dotProduct, 0.0 ) * directionalLightColor[ i ];",
+									"dirDiffuse += max( 0.5 * dotProduct, 0.0 ) * directionalLights[i].color;",
 								"}",
 							"#endif",
 

+ 0 - 18
src/renderers/shaders/ShaderChunk/bsdfs.glsl

@@ -1,23 +1,5 @@
 //#define ENERGY_PRESERVING_MONOCHROME
 
-
-struct IncidentLight {
- 	vec3 color;
- 	vec3 direction;
-};
-
-struct ReflectedLight {
- 	vec3 specular;
- 	vec3 diffuse;
-};
-
-struct GeometricContext {
-	vec3 position;
-	vec3 normal;
-	vec3 viewDir;
-};
-
-
 void BRDF_Lambert( const in IncidentLight incidentLight, const in GeometricContext geometryContext, const in vec3 diffuseColor, inout ReflectedLight reflectedLight ) {
 
 	float lambertianReflectance = saturate( dot( geometryContext.normal, incidentLight.direction ) );

+ 18 - 0
src/renderers/shaders/ShaderChunk/common.glsl

@@ -10,6 +10,24 @@
 
 float average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }
 
+
+struct IncidentLight {
+ 	vec3 color;
+ 	vec3 direction;
+};
+
+struct ReflectedLight {
+ 	vec3 specular;
+ 	vec3 diffuse;
+};
+
+struct GeometricContext {
+	vec3 position;
+	vec3 normal;
+	vec3 viewDir;
+};
+
+
 vec3 transformDirection( in vec3 normal, in mat4 matrix ) {
 
 	return normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );

+ 16 - 18
src/renderers/shaders/ShaderChunk/lights.glsl

@@ -22,10 +22,10 @@ float calcLightAttenuation( float lightDistance, float cutoffDistance, float dec
 
 	uniform DirectionalLight directionalLights[ MAX_DIR_LIGHTS ];
 
-	void getDirIncidentLight( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight incidentLight ) { 
+	void getDirectionalDirectLight( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) { 
 	
-		incidentLight.color = directionalLight.color;
-		incidentLight.direction = directionalLight.direction; 
+		directLight.color = directionalLight.color;
+		directLight.direction = directionalLight.direction; 
 
 	}
 
@@ -43,15 +43,15 @@ float calcLightAttenuation( float lightDistance, float cutoffDistance, float dec
 
 	uniform PointLight pointLights[ MAX_POINT_LIGHTS ];
 
-	void getPointIncidentLight( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight incidentLight ) { 
+	void getPointDirectLight( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) { 
 	
 		vec3 lightPosition = pointLight.position; 
 	
 		vec3 lVector = lightPosition - geometry.position; 
-		incidentLight.direction = normalize( lVector ); 
+		directLight.direction = normalize( lVector ); 
 	
-		incidentLight.color = pointLight.color; 
-		incidentLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay ); 
+		directLight.color = pointLight.color; 
+		directLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay ); 
 	
 	}
 
@@ -72,18 +72,18 @@ float calcLightAttenuation( float lightDistance, float cutoffDistance, float dec
 
 	uniform SpotLight spotLights[ MAX_SPOT_LIGHTS ];
 
-	void getSpotIncidentLight( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight incidentLight ) {
+	void getSpotDirectLight( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {
 	
 		vec3 lightPosition = spotLight.position;
 	
 		vec3 lVector = lightPosition - geometry.position;
-		incidentLight.direction = normalize( lVector );
+		directLight.direction = normalize( lVector );
 	
-		float spotEffect = dot( spotLight.direction, incidentLight.direction );
+		float spotEffect = dot( spotLight.direction, directLight.direction );
 		spotEffect = saturate( pow( saturate( spotEffect ), spotLight.exponent ) );
 	
-		incidentLight.color = spotLight.color;
-		incidentLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) );
+		directLight.color = spotLight.color;
+		directLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) );
 
 	}
 
@@ -100,15 +100,13 @@ float calcLightAttenuation( float lightDistance, float cutoffDistance, float dec
 
 	uniform HemisphereLight hemisphereLights[ MAX_HEMI_LIGHTS ];
 
-	void getHemisphereIncidentLight( const in HemisphereLight hemiLight, const in GeometricContext geometry, out IncidentLight incidentLight ) { 
+	void getHemisphereIndirectLight( const in HemisphereLight hemiLight, const in GeometricContext geometry, out IncidentLight indirectLight ) { 
 	
 		float dotNL = dot( geometry.normal, hemiLight.direction );
-
 		float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
-
-		incidentLight.color = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
-
-		incidentLight.direction = geometry.normal;
+		
+		indirectLight.color = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
+		indirectLight.direction = geometry.normal;
 
 	}
 

+ 21 - 15
src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl

@@ -1,7 +1,5 @@
 vec3 diffuse = vec3( 1.0 );
 
-IncidentLight incidentLight;
-
 GeometricContext geometry = GeometricContext( mvPosition.xyz, normalize( transformedNormal ), normalize( -mvPosition.xyz ) );
 GeometricContext backGeometry = GeometricContext( geometry.position, -geometry.normal, geometry.viewDir );
 
@@ -12,13 +10,15 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
 
-		getPointIncidentLight( pointLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
+
+		getPointDirectLight( pointLights[ i ], geometry, directLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, frontReflectedLight );
+		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
 		#ifdef DOUBLE_SIDED
 
-			BRDF_Lambert( incidentLight, backGeometry, diffuse, backReflectedLight );
+			BRDF_Lambert( directLight, backGeometry, diffuse, backReflectedLight );
 
 		#endif
 
@@ -30,13 +30,15 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
 
-		getSpotIncidentLight( spotLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
+
+		getSpotDirectLight( spotLights[ i ], geometry, directLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, frontReflectedLight );
+		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
 		#ifdef DOUBLE_SIDED
 
-			BRDF_Lambert( incidentLight, backGeometry, diffuse, backReflectedLight );
+			BRDF_Lambert( directLight, backGeometry, diffuse, backReflectedLight );
 
 		#endif
 
@@ -48,13 +50,15 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
 
-		getDirIncidentLight( directionalLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, frontReflectedLight );
+		getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
+
+		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
 		#ifdef DOUBLE_SIDED
 
-			BRDF_Lambert( incidentLight, backGeometry, diffuse, backReflectedLight );
+			BRDF_Lambert( directLight, backGeometry, diffuse, backReflectedLight );
 
 		#endif
 
@@ -66,15 +70,17 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
 
-		getHemisphereLightIndirect( hemisphereLights[ i ], geometry, incidentLight );
+		IncidentLight indirectLight;
+
+		getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, frontReflectedLight );
+		BRDF_Lambert( indirectLight, geometry, diffuse, frontReflectedLight );
 
 		#ifdef DOUBLE_SIDED
 	
-			getHemisphereIncidentLight( hemisphereLights[ i ], backGeometry, incidentLight );
+			getHemisphereIndirectLight( hemisphereLights[ i ], backGeometry, indirectLight );
 
-			BRDF_Lambert( incidentLight, backGeometry, diffuse, backReflectedLight );
+			BRDF_Lambert( indirectLight, backGeometry, diffuse, backReflectedLight );
 
 		#endif
 

+ 23 - 17
src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl

@@ -16,8 +16,6 @@ vec3 diffuse = diffuseColor.rgb;
 
 #endif
 
-IncidentLight incidentLight;
-
 GeometricContext geometry = GeometricContext( -vViewPosition, normal, normalize(vViewPosition ) );
 
 ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
@@ -27,12 +25,14 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
 
-		getPointIncidentLight( pointLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
+
+		getPointDirectLight( pointLights[ i ], geometry, directLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, directReflectedLight );
-		//BRDF_OrenNayar( incidentLight, geometry, diffuse, 0.5, directReflectedLight );
+		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
+		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
 
-		BRDF_BlinnPhong( incidentLight, geometry, specular, shininess, directReflectedLight );
+		BRDF_BlinnPhong( directLight, geometry, specular, shininess, directReflectedLight );
 
 	}
 
@@ -42,12 +42,14 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
 
-		getSpotIncidentLight( spotLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
+
+		getSpotDirectLight( spotLights[ i ], geometry, directLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, directReflectedLight );
-		//BRDF_OrenNayar( incidentLight, geometry, diffuse, 0.5, directReflectedLight );
+		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
+		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
 
-		BRDF_BlinnPhong( incidentLight, geometry, specular, shininess, directReflectedLight );
+		BRDF_BlinnPhong( directLight, geometry, specular, shininess, directReflectedLight );
 
 	}
 
@@ -57,12 +59,14 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
 
-		getDirIncidentLight( directionalLights[ i ], geometry, incidentLight );
+		IncidentLight directLight;
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, directReflectedLight );
-		//BRDF_OrenNayar( incidentLight, geometry, diffuse, 0.5, directReflectedLight );
+		getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
 
-		BRDF_BlinnPhong( incidentLight, geometry, specular, shininess, directReflectedLight );
+		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
+		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
+
+		BRDF_BlinnPhong( directLight, geometry, specular, shininess, directReflectedLight );
 
 	}
 
@@ -72,10 +76,12 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
 
-		getHemisphereIncidentLight( hemisphereLights[ i ], geometry, incidentLight );
+		IncidentLight indirectLight;
+
+		getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
 
-		BRDF_Lambert( incidentLight, geometry, diffuse, indirectReflectedLight );
-		//BRDF_OrenNayar( incidentLight, geometry, diffuse, 0.5, indirectReflectedLight );
+		BRDF_Lambert( indirectLight, geometry, diffuse, indirectReflectedLight );
+		//BRDF_OrenNayar( indirectLight, geometry, diffuse, 0.5, indirectReflectedLight );
 
 	}