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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to