From 814fa068514a6e9f3e84553310f1d0b0b7918435 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 10 Mar 2016 22:03:03 +0500 Subject: Cycles: Optimize spherical stereo position when no spherical stereo is used --- intern/cycles/kernel/kernel_projection.h | 42 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'intern/cycles/kernel/kernel_projection.h') diff --git a/intern/cycles/kernel/kernel_projection.h b/intern/cycles/kernel/kernel_projection.h index fa06b937e61..aedcbddbd98 100644 --- a/intern/cycles/kernel/kernel_projection.h +++ b/intern/cycles/kernel/kernel_projection.h @@ -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); - side = normalize(cross(dir, up)); + float3 up = make_float3(0.0f, 0.0f, 1.0f); + 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_distance of zero means either no stereo, or stereo without spherical stereo. */ - if(kernel_data.cam.interocular_offset == 0.0f) + /* Interocular offset of zero means either no stereo, or stereo without + * spherical stereo. + */ + if(kernel_data.cam.interocular_offset == 0.0f) { return dir; + } - screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance); - dirnew = screenpos - newpos; - - return dirnew; + float3 screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance); + return screenpos - newpos; } CCL_NAMESPACE_END -#endif /* __KERNEL_PROJECTION_CL__ */ - +#endif /* __KERNEL_PROJECTION_CL__ */ -- cgit v1.2.3