forked from bartvdbraak/blender
Cycles: Don't check shader for volume when checking if camera is inside volume
Intersection code already ignores objects without volume closure so checking it afterwards is not needed.
This commit is contained in:
parent
4a9b912b96
commit
1073c6ae8e
@ -992,31 +992,29 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg,
|
||||
|
||||
ShaderData sd;
|
||||
shader_setup_from_ray(kg, &sd, &isect, &volume_ray, 0, 0);
|
||||
if(sd.flag & SD_HAS_VOLUME) {
|
||||
if(sd.flag & SD_BACKFACING) {
|
||||
/* If ray exited the volume and never entered to that volume
|
||||
* it means that camera is inside such a volume.
|
||||
*/
|
||||
bool is_enclosed = false;
|
||||
for(int i = 0; i < enclosed_index; ++i) {
|
||||
if(enclosed_volumes[i] == sd.object) {
|
||||
is_enclosed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(is_enclosed == false) {
|
||||
stack[stack_index].object = sd.object;
|
||||
stack[stack_index].shader = sd.shader;
|
||||
++stack_index;
|
||||
if(sd.flag & SD_BACKFACING) {
|
||||
/* If ray exited the volume and never entered to that volume
|
||||
* it means that camera is inside such a volume.
|
||||
*/
|
||||
bool is_enclosed = false;
|
||||
for(int i = 0; i < enclosed_index; ++i) {
|
||||
if(enclosed_volumes[i] == sd.object) {
|
||||
is_enclosed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* If ray from camera enters the volume, this volume shouldn't
|
||||
* be added to the stak on exit.
|
||||
*/
|
||||
enclosed_volumes[enclosed_index++] = sd.object;
|
||||
if(is_enclosed == false) {
|
||||
stack[stack_index].object = sd.object;
|
||||
stack[stack_index].shader = sd.shader;
|
||||
++stack_index;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* If ray from camera enters the volume, this volume shouldn't
|
||||
* be added to the stak on exit.
|
||||
*/
|
||||
enclosed_volumes[enclosed_index++] = sd.object;
|
||||
}
|
||||
|
||||
/* Move ray forward. */
|
||||
volume_ray.P = ray_offset(sd.P, -sd.Ng);
|
||||
|
Loading…
Reference in New Issue
Block a user