Fix T48162: GPU render gives wrong results in certain volume setups
ideally this part of code should be de-duplicated across __VOLUME_INTERSECT_ALL and regular code.
This commit is contained in:
@@ -1061,14 +1061,23 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg,
|
|||||||
/* If ray exited the volume and never entered to that volume
|
/* If ray exited the volume and never entered to that volume
|
||||||
* it means that camera is inside such a volume.
|
* it means that camera is inside such a volume.
|
||||||
*/
|
*/
|
||||||
bool is_enclosed = false;
|
bool need_add = true;
|
||||||
for(int i = 0; i < enclosed_index; ++i) {
|
for(int i = 0; i < enclosed_index && need_add; ++i) {
|
||||||
|
/* If ray exited the volume and never entered to that volume
|
||||||
|
* it means that camera is inside such a volume.
|
||||||
|
*/
|
||||||
if(enclosed_volumes[i] == sd.object) {
|
if(enclosed_volumes[i] == sd.object) {
|
||||||
is_enclosed = true;
|
need_add = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i = 0; i < stack_index && need_add; ++i) {
|
||||||
|
/* Don't add intersections twice. */
|
||||||
|
if(stack[i].object == sd.object) {
|
||||||
|
need_add = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(is_enclosed == false) {
|
if(need_add) {
|
||||||
stack[stack_index].object = sd.object;
|
stack[stack_index].object = sd.object;
|
||||||
stack[stack_index].shader = sd.shader;
|
stack[stack_index].shader = sd.shader;
|
||||||
++stack_index;
|
++stack_index;
|
||||||
|
Reference in New Issue
Block a user