Cycles: One more optimization fix, derivatives used to be calculated without aperture

At this point it's totally unclear why we're ignoring aperture and and rolling shutter
now for derivatives calculation but do not ignore direction change caused by stereo.
This commit is contained in:
Sergey Sharybin 2016-03-11 15:23:31 +05:00
parent 086de5b5e3
commit 758b20b8ca
1 changed files with 4 additions and 2 deletions

View File

@ -115,18 +115,20 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
/* ray differential */
ray->dP = differential3_zero();
tD = transform_direction(&cameratoworld, Pcamera);
float3 Pdiff = spherical_stereo_position(kg, tD, Pcamera);
float3 Ddiff = normalize(spherical_stereo_direction(kg, tD, Pcamera, Pdiff));
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->dD.dx = normalize(spherical_stereo_direction(kg, tD, tP, Pcamera)) - Ddiff;
ray->dP.dx = Pcamera - Pdiff;
tP = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y + 1.0f, 0.0f));
tD = transform_direction(&cameratoworld, tP);
Pcamera = spherical_stereo_position(kg, tD, tP);
ray->dD.dy = normalize(spherical_stereo_direction(kg, tD, tP, Pcamera)) - ray->D;
ray->dD.dy = normalize(spherical_stereo_direction(kg, tD, tP, Pcamera)) - Ddiff;
/* dP.dy is zero, since the omnidirectional panorama only shift the eyes horizontally */
#endif