[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58772] branches/soc-2013-dingto/intern/ cycles/kernel: Cycles / Ray Depth:

Thomas Dinges blender at dingto.org
Wed Jul 31 20:40:12 CEST 2013


Revision: 58772
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58772
Author:   dingto
Date:     2013-07-31 18:40:11 +0000 (Wed, 31 Jul 2013)
Log Message:
-----------
Cycles / Ray Depth:
* Fix some things which came up in code review. Includes some fixes for background lights and changes to variables, to avoid some castings.

Thanks to Brecht for code review! :)

Modified Paths:
--------------
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_emission.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_path.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h
    branches/soc-2013-dingto/intern/cycles/kernel/osl/osl_services.cpp
    branches/soc-2013-dingto/intern/cycles/kernel/shaders/node_light_path.osl
    branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_light_path.h

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_emission.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_emission.h	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_emission.h	2013-07-31 18:40:11 UTC (rev 58772)
@@ -41,7 +41,7 @@
 #ifdef __CAMERA_MOTION__
 		ray.time = time;
 #endif
-		shader_setup_from_background(kg, &sd, &ray, bounce);
+		shader_setup_from_background(kg, &sd, &ray, bounce+1);
 		eval = shader_eval_background(kg, &sd, 0, SHADER_CONTEXT_EMISSION);
 	}
 	else
@@ -49,10 +49,10 @@
 	{
 #ifdef __HAIR__
 		if(ls->type == LIGHT_STRAND)
-			shader_setup_from_sample(kg, &sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, u, v, t, time, bounce, ls->prim);
+			shader_setup_from_sample(kg, &sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, u, v, t, time, bounce+1, ls->prim);
 		else
 #endif
-			shader_setup_from_sample(kg, &sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, u, v, t, time, bounce, ~0);
+			shader_setup_from_sample(kg, &sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, u, v, t, time, bounce+1, ~0);
 
 		ls->Ng = sd.Ng;
 
@@ -240,7 +240,7 @@
 
 	/* evaluate background closure */
 	ShaderData sd;
-	shader_setup_from_background(kg, &sd, ray, bounce);
+	shader_setup_from_background(kg, &sd, ray, bounce+1);
 
 	float3 L = shader_eval_background(kg, &sd, path_flag, SHADER_CONTEXT_EMISSION);
 

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_path.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_path.h	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_path.h	2013-07-31 18:40:11 UTC (rev 58772)
@@ -215,7 +215,7 @@
 					return true;
 
 				ShaderData sd;
-				shader_setup_from_ray(kg, &sd, &isect, ray, state->bounce);
+				shader_setup_from_ray(kg, &sd, &isect, ray, state->bounce+1);
 				shader_eval_surface(kg, &sd, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW);
 
 				throughput *= shader_bsdf_transparency(kg, &sd);

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h	2013-07-31 18:40:11 UTC (rev 58772)
@@ -80,7 +80,7 @@
 
 	sd->prim = kernel_tex_fetch(__prim_index, isect->prim);
 	sd->ray_length = isect->t;
-	sd->ray_depth = (float)bounce;
+	sd->ray_depth = bounce;
 
 #ifdef __HAIR__
 	if(kernel_tex_fetch(__prim_segment, isect->prim) != ~0) {
@@ -301,7 +301,7 @@
 	sd->v = v;
 #endif
 	sd->ray_length = t;
-	sd->ray_depth = (float)bounce;
+	sd->ray_depth = bounce;
 
 	/* detect instancing, for non-instanced the object index is -object-1 */
 #ifdef __INSTANCING__
@@ -428,7 +428,7 @@
 	sd->time = ray->time;
 #endif
 	sd->ray_length = 0.0f;
-	sd->ray_depth = (float)bounce;
+	sd->ray_depth = bounce;
 
 #ifdef __INSTANCING__
 	sd->object = ~0;

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h	2013-07-31 18:40:11 UTC (rev 58772)
@@ -555,7 +555,7 @@
 	float ray_length;
 	
 	/* ray bounce depth */
-	float ray_depth;
+	int ray_depth;
 
 #ifdef __RAY_DIFFERENTIALS__
 	/* differential of P. these are orthogonal to Ng, not N */

Modified: branches/soc-2013-dingto/intern/cycles/kernel/osl/osl_services.cpp
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/osl/osl_services.cpp	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/osl/osl_services.cpp	2013-07-31 18:40:11 UTC (rev 58772)
@@ -662,9 +662,9 @@
 		return set_attribute_float(f, type, derivatives, val);
 	}
 	else if (name == u_path_ray_depth) {
-		/* Ray Length */
-		float f = sd->ray_depth;
-		return set_attribute_float(f, type, derivatives, val);
+		/* Ray Depth */
+		int f = sd->ray_depth;
+		return set_attribute_int(f, type, derivatives, val);
 	}
 	else if (name == u_ndc) {
 		/* NDC coordinates with special exception for otho */
@@ -925,7 +925,10 @@
 
 				if(!tracedata->setup) {
 					/* lazy shader data setup */
-					shader_setup_from_ray(kg, sd, &tracedata->isect, &tracedata->ray, -1);
+					ShaderData *original_sd = (ShaderData *)(sg->renderstate);
+					int bounce = original_sd->ray_depth + 1;
+
+					shader_setup_from_ray(kg, sd, &tracedata->isect, &tracedata->ray, bounce);
 					tracedata->setup = true;
 				}
 

Modified: branches/soc-2013-dingto/intern/cycles/kernel/shaders/node_light_path.osl
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/shaders/node_light_path.osl	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/shaders/node_light_path.osl	2013-07-31 18:40:11 UTC (rev 58772)
@@ -38,6 +38,9 @@
 	IsTransmissionRay = raytype("refraction");
 
 	getattribute("path:ray_length", RayLength);
-	getattribute("path:ray_depth", RayDepth);
+
+	int ray_depth;
+	getattribute("path:ray_depth", ray_depth);
+	RayDepth = (float)ray_depth;
 }
 

Modified: branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_light_path.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_light_path.h	2013-07-31 18:14:18 UTC (rev 58771)
+++ branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_light_path.h	2013-07-31 18:40:11 UTC (rev 58772)
@@ -34,7 +34,7 @@
 		case NODE_LP_transmission: info = (path_flag & PATH_RAY_TRANSMIT)? 1.0f: 0.0f; break;
 		case NODE_LP_backfacing: info = (sd->flag & SD_BACKFACING)? 1.0f: 0.0f; break;
 		case NODE_LP_ray_length: info = sd->ray_length; break;
-		case NODE_LP_ray_depth: info = sd->ray_depth; break;
+		case NODE_LP_ray_depth: info = (float)sd->ray_depth; break;
 	}
 
 	stack_store_float(stack, out_offset, info);




More information about the Bf-blender-cvs mailing list