[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58931] trunk/blender/intern/cycles/render /light.cpp: Fix #36380: cycles render error with sun lamp that has object scale 0, 0, 0.

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Aug 5 16:22:08 CEST 2013


Revision: 58931
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58931
Author:   blendix
Date:     2013-08-05 14:22:07 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
Fix #36380: cycles render error with sun lamp that has object scale 0,0,0.

Modified Paths:
--------------
    trunk/blender/intern/cycles/render/light.cpp

Modified: trunk/blender/intern/cycles/render/light.cpp
===================================================================
--- trunk/blender/intern/cycles/render/light.cpp	2013-08-05 12:49:15 UTC (rev 58930)
+++ trunk/blender/intern/cycles/render/light.cpp	2013-08-05 14:22:07 UTC (rev 58931)
@@ -517,7 +517,6 @@
 	for(size_t i = 0; i < scene->lights.size(); i++) {
 		Light *light = scene->lights[i];
 		float3 co = light->co;
-		float3 dir = normalize(light->dir);
 		int shader_id = scene->shader_manager->get_shader_id(scene->lights[i]->shader);
 		float samples = __int_as_float(light->samples);
 
@@ -559,6 +558,10 @@
 			float cosangle = cosf(angle);
 			float area = M_PI_F*radius*radius;
 			float invarea = (area > 0.0f)? 1.0f/area: 1.0f;
+			float3 dir = light->dir;
+			
+			if(len(dir) > 0.0f)
+				dir = normalize(dir);
 
 			if(light->use_mis && area > 0.0f)
 				shader_id |= SHADER_USE_MIS;
@@ -597,6 +600,10 @@
 			float3 axisv = light->axisv*(light->sizev*light->size);
 			float area = len(axisu)*len(axisv);
 			float invarea = (area > 0.0f)? 1.0f/area: 1.0f;
+			float3 dir = light->dir;
+			
+			if(len(dir) > 0.0f)
+				dir = normalize(dir);
 
 			if(light->use_mis && area > 0.0f)
 				shader_id |= SHADER_USE_MIS;
@@ -613,6 +620,10 @@
 			float invarea = (radius > 0.0f)? 1.0f/(M_PI_F*radius*radius): 1.0f;
 			float spot_angle = cosf(light->spot_angle*0.5f);
 			float spot_smooth = (1.0f - spot_angle)*light->spot_smooth;
+			float3 dir = light->dir;
+			
+			if(len(dir) > 0.0f)
+				dir = normalize(dir);
 
 			if(light->use_mis && radius > 0.0f)
 				shader_id |= SHADER_USE_MIS;




More information about the Bf-blender-cvs mailing list