浏览代码

better form for light attention function for physically correct lights.

Ben Houston 9 年之前
父节点
当前提交
15bd5be160
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      src/renderers/shaders/ShaderChunk/bsdfs.glsl

+ 3 - 2
src/renderers/shaders/ShaderChunk/bsdfs.glsl

@@ -14,8 +14,9 @@ float punctualLightIntensityToIrradianceFactor( const in float lightDistance, co
 			// http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf
 			// this is intended to be used on spot and point lights who are represented as luminous intensity
 			// but who must be converted to luminous irradiance for surface lighting calculation
-			return pow( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ), decayExponent ) /
-				max( pow( lightDistance, decayExponent ), 0.01 );
+			float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
+			float maxDistanceCutoffFactor = exp2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ) ;
+			return distanceFalloff * maxDistanceCutoffFactor;
 
 #else