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:
parent
086de5b5e3
commit
758b20b8ca
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue