[Bf-blender-cvs] [e7eb913] master: Cycles: Fix bug calculating dP for perspective camera

Sergey Sharybin noreply at git.blender.org
Fri Mar 11 10:46:12 CET 2016


Commit: e7eb91365b3dc86e3555643ff8f89d7f306de900
Author: Sergey Sharybin
Date:   Fri Mar 11 14:43:41 2016 +0500
Branches: master
https://developer.blender.org/rBe7eb91365b3dc86e3555643ff8f89d7f306de900

Cycles: Fix bug calculating dP for perspective camera

Was introduced by recent optimization. Not really sure derivatives are
intended to work like this, but better to stick to what Dalai had
originally for now.

===================================================================

M	intern/cycles/kernel/kernel_camera.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_camera.h b/intern/cycles/kernel/kernel_camera.h
index e116ec3..b61ca1d 100644
--- a/intern/cycles/kernel/kernel_camera.h
+++ b/intern/cycles/kernel/kernel_camera.h
@@ -115,11 +115,13 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
 	/* ray differential */
 	ray->dP = differential3_zero();
 
+	float3 Pdiff = spherical_stereo_position(kg, tD, Pcamera);
+
 	tP = transform_perspective(&rastertocamera, make_float3(raster_x + 1.0f, raster_y, 0.0f));
 	tD = transform_direction(&cameratoworld, tP);
 	Pcamera = spherical_stereo_position(kg, tD, tP);
 	ray->dD.dx = normalize(spherical_stereo_direction(kg, tD, tP, Pcamera)) - ray->D;
-	ray->dP.dx = Pcamera - ray->P;
+	ray->dP.dx = Pcamera - Pdiff;
 
 	tP = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y + 1.0f, 0.0f));
 	tD = transform_direction(&cameratoworld, tP);




More information about the Bf-blender-cvs mailing list