forked from bartvdbraak/blender
Cycles: Optimize spherical stereo position when no spherical stereo is used
This commit is contained in:
parent
59a7204797
commit
814fa06851
@ -222,33 +222,41 @@ ccl_device float2 direction_to_panorama(KernelGlobals *kg, float3 dir)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device float3 spherical_stereo_position(KernelGlobals *kg, float3 dir, float3 pos)
|
ccl_device float3 spherical_stereo_position(KernelGlobals *kg,
|
||||||
|
float3 dir,
|
||||||
|
float3 pos)
|
||||||
{
|
{
|
||||||
float3 up, side;
|
const float interocular_offset = kernel_data.cam.interocular_offset;
|
||||||
|
|
||||||
/* Interocular_offset of zero means either non stereo, or stereo without spherical stereo. */
|
/* Interocular offset of zero means either non stereo, or stereo without
|
||||||
|
* spherical stereo.
|
||||||
|
*/
|
||||||
|
if(interocular_offset == 0.0f) {
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
up = make_float3(0.0f, 0.0f, 1.0f);
|
float3 up = make_float3(0.0f, 0.0f, 1.0f);
|
||||||
side = normalize(cross(dir, up));
|
float3 side = normalize(cross(dir, up));
|
||||||
|
|
||||||
return pos + (side * kernel_data.cam.interocular_offset);
|
return pos + (side * interocular_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device float3 spherical_stereo_direction(KernelGlobals *kg, float3 dir, float3 pos, float3 newpos)
|
ccl_device float3 spherical_stereo_direction(KernelGlobals *kg,
|
||||||
|
float3 dir,
|
||||||
|
float3 pos,
|
||||||
|
float3 newpos)
|
||||||
{
|
{
|
||||||
float3 screenpos, dirnew;
|
/* Interocular offset of zero means either no stereo, or stereo without
|
||||||
|
* spherical stereo.
|
||||||
/* Interocular_distance of zero means either no stereo, or stereo without spherical stereo. */
|
*/
|
||||||
if(kernel_data.cam.interocular_offset == 0.0f)
|
if(kernel_data.cam.interocular_offset == 0.0f) {
|
||||||
return dir;
|
return dir;
|
||||||
|
}
|
||||||
|
|
||||||
screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance);
|
float3 screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance);
|
||||||
dirnew = screenpos - newpos;
|
return screenpos - newpos;
|
||||||
|
|
||||||
return dirnew;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
|
||||||
#endif /* __KERNEL_PROJECTION_CL__ */
|
#endif /* __KERNEL_PROJECTION_CL__ */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user