diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-10-06 14:31:31 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-10-06 14:36:46 +0400 |
commit | 939fa6759c5d6e72fa4ef8c9d10075488f4d7666 (patch) | |
tree | 2ca9599a0b3a42d6de6097c885ab17e47c57ea59 /intern/cycles/kernel | |
parent | 233de800e2db25ea4927e3734b66427ea43ee5c3 (diff) |
Cycles: Fix for camera-in-volume detection
Ray actually should have infinite length, so we can detect camera in a volume
which is bigger that the far clipping of the camera.
This might also give some speedup (wouldn't expect much tho) because we don't
need to re-calculate ray direction and length after every bounce now.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/kernel_volume.h | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index dd947a54530..0100a5badbe 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -978,6 +978,8 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg, const float3 Pend = ray->P + ray->D*ray->t; Ray volume_ray = *ray; + volume_ray.t = FLT_MAX; + int stack_index = 0, enclosed_index = 0; int enclosed_volumes[VOLUME_STACK_SIZE]; @@ -1019,15 +1021,6 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg, /* Move ray forward. */ volume_ray.P = ray_offset(sd.P, -sd.Ng); - if(volume_ray.t != FLT_MAX) { - volume_ray.D = normalize_len(Pend - volume_ray.P, &volume_ray.t); - /* TODO(sergey): Find a faster way detecting that ray_offset moved - * us pass through the end point. - */ - if(dot(ray->D, volume_ray.D) < 0.0f) { - break; - } - } } /* stack_index of 0 means quick checks outside of the kernel gave false * positive, nothing to worry about, just we've wasted quite a few of |