[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56492] trunk/blender/intern/cycles/kernel : Fix #35207: addition to previous fix to avoid OSL getting uninitialized
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri May 3 23:34:52 CEST 2013
Revision: 56492
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56492
Author: blendix
Date: 2013-05-03 21:34:51 +0000 (Fri, 03 May 2013)
Log Message:
-----------
Fix #35207: addition to previous fix to avoid OSL getting uninitialized
ray differentials for lighting, which could cause bad texture filtering
artifacts or performance.
Modified Paths:
--------------
trunk/blender/intern/cycles/kernel/kernel_camera.h
trunk/blender/intern/cycles/kernel/kernel_differential.h
trunk/blender/intern/cycles/kernel/kernel_displace.h
trunk/blender/intern/cycles/kernel/kernel_emission.h
trunk/blender/intern/cycles/kernel/kernel_path.h
trunk/blender/intern/cycles/kernel/kernel_shader.h
trunk/blender/intern/cycles/kernel/kernel_subsurface.h
Modified: trunk/blender/intern/cycles/kernel/kernel_camera.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_camera.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_camera.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -76,8 +76,7 @@
/* ray differential */
float3 Ddiff = transform_direction(&cameratoworld, Pcamera);
- ray->dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray->dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray->dP = differential3_zero();
ray->dD.dx = normalize(Ddiff + float4_to_float3(kernel_data.cam.dx)) - normalize(Ddiff);
ray->dD.dy = normalize(Ddiff + float4_to_float3(kernel_data.cam.dy)) - normalize(Ddiff);
@@ -138,8 +137,7 @@
ray->dP.dx = float4_to_float3(kernel_data.cam.dx);
ray->dP.dy = float4_to_float3(kernel_data.cam.dy);
- ray->dD.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray->dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray->dD = differential3_zero();
#endif
#ifdef __CAMERA_CLIPPING__
@@ -209,8 +207,7 @@
#ifdef __RAY_DIFFERENTIALS__
/* ray differential */
- ray->dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray->dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray->dP = differential3_zero();
Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x + 1.0f, raster_y, 0.0f));
ray->dD.dx = normalize(transform_direction(&cameratoworld, panorama_to_direction(kg, Pcamera.x, Pcamera.y))) - ray->D;
Modified: trunk/blender/intern/cycles/kernel/kernel_differential.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_differential.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_differential.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -86,5 +86,23 @@
dv->dy = (dP.dy.y*dPdu.x - dP.dy.x*dPdu.y)*det;
}
+__device differential differential_zero()
+{
+ differential d;
+ d.dx = 0.0f;
+ d.dy = 0.0f;
+
+ return d;
+}
+
+__device differential3 differential3_zero()
+{
+ differential3 d;
+ d.dx = make_float3(0.0f, 0.0f, 0.0f);
+ d.dy = make_float3(0.0f, 0.0f, 0.0f);
+
+ return d;
+}
+
CCL_NAMESPACE_END
Modified: trunk/blender/intern/cycles/kernel/kernel_displace.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_displace.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_displace.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -52,10 +52,8 @@
#endif
#ifdef __RAY_DIFFERENTIALS__
- ray.dD.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray.dD.dy = make_float3(0.0f, 0.0f, 0.0f);
- ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dD = differential3_zero();
+ ray.dP = differential3_zero();
#endif
/* setup shader data */
Modified: trunk/blender/intern/cycles/kernel/kernel_emission.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_emission.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_emission.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -36,8 +36,7 @@
#ifdef __OBJECT_MOTION__
ray.time = time;
#endif
- ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP = differential3_zero();
ray.dD = dI;
#ifdef __CAMERA_MOTION__
ray.time = time;
@@ -95,9 +94,7 @@
return false;
/* todo: implement */
- differential3 dD;
- dD.dx = make_float3(0.0f, 0.0f, 0.0f);
- dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ differential3 dD = differential3_zero();
/* evaluate closure */
float3 light_eval = direct_emissive_eval(kg, rando, &ls, randu, randv, -ls.D, dD, ls.t, sd->time);
@@ -138,6 +135,9 @@
ray->D = ray_offset(ls.P, ls.Ng) - ray->P;
ray->D = normalize_len(ray->D, &ray->t);
}
+
+ ray->dP = sd->dP;
+ ray->dD = differential3_zero();
}
else {
/* signal to not cast shadow ray */
Modified: trunk/blender/intern/cycles/kernel/kernel_path.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_path.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_path.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -414,6 +414,8 @@
#ifdef __OBJECT_MOTION__
light_ray.time = sd.time;
#endif
+ light_ray.dP = sd.dP;
+ light_ray.dD = differential3_zero();
if(!shadow_blocked(kg, &state, &light_ray, &ao_shadow))
path_radiance_accum_ao(&L, throughput, ao_bsdf, ao_shadow, state.bounce);
@@ -640,6 +642,8 @@
#ifdef __OBJECT_MOTION__
light_ray.time = sd.time;
#endif
+ light_ray.dP = sd.dP;
+ light_ray.dD = differential3_zero();
if(!shadow_blocked(kg, &state, &light_ray, &ao_shadow))
path_radiance_accum_ao(L, throughput, ao_bsdf, ao_shadow, state.bounce);
@@ -757,6 +761,8 @@
#ifdef __OBJECT_MOTION__
light_ray.time = sd->time;
#endif
+ light_ray.dP = sd->dP;
+ light_ray.dD = differential3_zero();
if(!shadow_blocked(kg, &state, &light_ray, &ao_shadow))
path_radiance_accum_ao(L, throughput*num_samples_inv, ao_bsdf, ao_shadow, state.bounce);
Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_shader.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_shader.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -370,14 +370,10 @@
#ifdef __RAY_DIFFERENTIALS__
/* no ray differentials here yet */
- sd->dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- sd->dP.dy = make_float3(0.0f, 0.0f, 0.0f);
- sd->dI.dx = make_float3(0.0f, 0.0f, 0.0f);
- sd->dI.dy = make_float3(0.0f, 0.0f, 0.0f);
- sd->du.dx = 0.0f;
- sd->du.dy = 0.0f;
- sd->dv.dx = 0.0f;
- sd->dv.dy = 0.0f;
+ sd->dP = differential3_zero();
+ sd->dI = differential3_zero();
+ sd->du = differential_zero();
+ sd->dv = differential_zero();
#endif
}
@@ -438,10 +434,8 @@
/* differentials */
sd->dP = ray->dD;
differential_incoming(&sd->dI, sd->dP);
- sd->du.dx = 0.0f;
- sd->du.dy = 0.0f;
- sd->dv.dx = 0.0f;
- sd->dv.dy = 0.0f;
+ sd->du = differential_zero();
+ sd->dv = differential_zero();
#endif
}
Modified: trunk/blender/intern/cycles/kernel/kernel_subsurface.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_subsurface.h 2013-05-03 14:01:12 UTC (rev 56491)
+++ trunk/blender/intern/cycles/kernel/kernel_subsurface.h 2013-05-03 21:34:51 UTC (rev 56492)
@@ -203,8 +203,7 @@
ray.P = p1;
ray.D = normalize_len(p2 - p1, &ray.t);
ray.dP = sd->dP;
- ray.dD.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray.dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dD = differential3_zero();
ray.time = sd->time;
/* intersect with the same object. if multiple intersections are
More information about the Bf-blender-cvs
mailing list