Commit: fc78a58337ab1021cd816737f3bbb496b9b4fe23 Author: Sergey Sharybin Date: Mon Apr 4 19:30:38 2016 +0200 Branches: blender-v2.77-release https://developer.blender.org/rBfc78a58337ab1021cd816737f3bbb496b9b4fe23
Cycles: Fix wrong camera in volume check when domain is only visible to camera rays =================================================================== M intern/cycles/kernel/geom/geom_bvh.h M intern/cycles/kernel/geom/geom_bvh_volume.h M intern/cycles/kernel/geom/geom_bvh_volume_all.h M intern/cycles/kernel/geom/geom_qbvh_volume.h M intern/cycles/kernel/geom/geom_qbvh_volume_all.h M intern/cycles/kernel/kernel_volume.h =================================================================== diff --git a/intern/cycles/kernel/geom/geom_bvh.h b/intern/cycles/kernel/geom/geom_bvh.h index d9f4076..d8e6224 100644 --- a/intern/cycles/kernel/geom/geom_bvh.h +++ b/intern/cycles/kernel/geom/geom_bvh.h @@ -371,39 +371,40 @@ ccl_device_intersect bool scene_intersect_shadow_all(KernelGlobals *kg, const Ra #ifdef __VOLUME__ ccl_device_intersect bool scene_intersect_volume(KernelGlobals *kg, - const Ray *ray, - Intersection *isect) + const Ray *ray, + Intersection *isect, + const uint visibility) { #ifdef __OBJECT_MOTION__ if(kernel_data.bvh.have_motion) { #ifdef __HAIR__ if(kernel_data.bvh.have_curves) - return bvh_intersect_volume_hair_motion(kg, ray, isect); + return bvh_intersect_volume_hair_motion(kg, ray, isect, visibility); #endif /* __HAIR__ */ - return bvh_intersect_volume_motion(kg, ray, isect); + return bvh_intersect_volume_motion(kg, ray, isect, visibility); } #endif /* __OBJECT_MOTION__ */ #ifdef __HAIR__ if(kernel_data.bvh.have_curves) - return bvh_intersect_volume_hair(kg, ray, isect); + return bvh_intersect_volume_hair(kg, ray, isect, visibility); #endif /* __HAIR__ */ #ifdef __KERNEL_CPU__ #ifdef __INSTANCING__ if(kernel_data.bvh.have_instancing) - return bvh_intersect_volume_instancing(kg, ray, isect); + return bvh_intersect_volume_instancing(kg, ray, isect, visibility); #endif /* __INSTANCING__ */ - return bvh_intersect_volume(kg, ray, isect); + return bvh_intersect_volume(kg, ray, isect, visibility); #else /* __KERNEL_CPU__ */ #ifdef __INSTANCING__ - return bvh_intersect_volume_instancing(kg, ray, isect); + return bvh_intersect_volume_instancing(kg, ray, isect, visibility); #else - return bvh_intersect_volume(kg, ray, isect); + return bvh_intersect_volume(kg, ray, isect, visibility); #endif /* __INSTANCING__ */ #endif /* __KERNEL_CPU__ */ @@ -414,30 +415,31 @@ ccl_device_intersect bool scene_intersect_volume(KernelGlobals *kg, ccl_device_intersect uint scene_intersect_volume_all(KernelGlobals *kg, const Ray *ray, Intersection *isect, - const uint max_hits) + const uint max_hits, + const uint visibility) { #ifdef __OBJECT_MOTION__ if(kernel_data.bvh.have_motion) { #ifdef __HAIR__ if(kernel_data.bvh.have_curves) - return bvh_intersect_volume_all_hair_motion(kg, ray, isect, max_hits); + return bvh_intersect_volume_all_hair_motion(kg, ray, isect, max_hits, visibility); #endif /* __HAIR__ */ - return bvh_intersect_volume_all_motion(kg, ray, isect, max_hits); + return bvh_intersect_volume_all_motion(kg, ray, isect, max_hits, visibility); } #endif /* __OBJECT_MOTION__ */ #ifdef __HAIR__ if(kernel_data.bvh.have_curves) - return bvh_intersect_volume_all_hair(kg, ray, isect, max_hits); + return bvh_intersect_volume_all_hair(kg, ray, isect, max_hits, visibility); #endif /* __HAIR__ */ #ifdef __INSTANCING__ if(kernel_data.bvh.have_instancing) - return bvh_intersect_volume_all_instancing(kg, ray, isect, max_hits); + return bvh_intersect_volume_all_instancing(kg, ray, isect, max_hits, visibility); #endif /* __INSTANCING__ */ - return bvh_intersect_volume_all(kg, ray, isect, max_hits); + return bvh_intersect_volume_all(kg, ray, isect, max_hits, visibility); } #endif diff --git a/intern/cycles/kernel/geom/geom_bvh_volume.h b/intern/cycles/kernel/geom/geom_bvh_volume.h index 656cd6e..b1b2e2d 100644 --- a/intern/cycles/kernel/geom/geom_bvh_volume.h +++ b/intern/cycles/kernel/geom/geom_bvh_volume.h @@ -33,7 +33,8 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, const Ray *ray, - Intersection *isect) + Intersection *isect, + const uint visibility) { /* todo: * - test if pushing distance on the stack helps (for non shadow rays) @@ -56,8 +57,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, float3 idir = bvh_inverse_direction(dir); int object = OBJECT_NONE; - const uint visibility = PATH_RAY_ALL_VISIBILITY; - #if BVH_FEATURE(BVH_MOTION) Transform ob_itfm; #endif @@ -336,13 +335,15 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, - Intersection *isect) + Intersection *isect, + const uint visibility) { #ifdef __QBVH__ if(kernel_data.bvh.use_qbvh) { return BVH_FUNCTION_FULL_NAME(QBVH)(kg, ray, - isect); + isect, + visibility); } else #endif @@ -350,7 +351,8 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, kernel_assert(kernel_data.bvh.use_qbvh == false); return BVH_FUNCTION_FULL_NAME(BVH)(kg, ray, - isect); + isect, + visibility); } } diff --git a/intern/cycles/kernel/geom/geom_bvh_volume_all.h b/intern/cycles/kernel/geom/geom_bvh_volume_all.h index 8f7e3ad..426046e 100644 --- a/intern/cycles/kernel/geom/geom_bvh_volume_all.h +++ b/intern/cycles/kernel/geom/geom_bvh_volume_all.h @@ -34,7 +34,8 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, const Ray *ray, Intersection *isect_array, - const uint max_hits) + const uint max_hits, + const uint visibility) { /* todo: * - test if pushing distance on the stack helps (for non shadow rays) @@ -59,8 +60,6 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, int object = OBJECT_NONE; float isect_t = tmax; - const uint visibility = PATH_RAY_ALL_VISIBILITY; - #if BVH_FEATURE(BVH_MOTION) Transform ob_itfm; #endif @@ -430,14 +429,16 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, ccl_device_inline uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersection *isect_array, - const uint max_hits) + const uint max_hits, + const uint visibility) { #ifdef __QBVH__ if(kernel_data.bvh.use_qbvh) { return BVH_FUNCTION_FULL_NAME(QBVH)(kg, ray, isect_array, - max_hits); + max_hits, + visibility); } else #endif @@ -446,7 +447,8 @@ ccl_device_inline uint BVH_FUNCTION_NAME(KernelGlobals *kg, return BVH_FUNCTION_FULL_NAME(BVH)(kg, ray, isect_array, - max_hits); + max_hits, + visibility); } } diff --git a/intern/cycles/kernel/geom/geom_qbvh_volume.h b/intern/cycles/kernel/geom/geom_qbvh_volume.h index 4086447..a4ee569 100644 --- a/intern/cycles/kernel/geom/geom_qbvh_volume.h +++ b/intern/cycles/kernel/geom/geom_qbvh_volume.h @@ -29,7 +29,8 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, const Ray *ray, - Intersection *isect) + Intersection *isect, + const uint visibility) { /* TODO(sergey): * - Test if pushing distance on the stack helps. @@ -51,8 +52,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, float3 idir = bvh_inverse_direction(dir); int object = OBJECT_NONE; - const uint visibility = PATH_RAY_ALL_VISIBILITY; - #if BVH_FEATURE(BVH_MOTION) Transform ob_itfm; #endif diff --git a/intern/cycles/kernel/geom/geom_qbvh_volume_all.h b/intern/cycles/kernel/geom/geom_qbvh_volume_all.h index 75e4c4e..38d4dd7 100644 --- a/intern/cycles/kernel/geom/geom_qbvh_volume_all.h +++ b/intern/cycles/kernel/geom/geom_qbvh_volume_all.h @@ -30,7 +30,8 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, const Ray *ray, Intersection *isect_array, - const uint max_hits) + const uint max_hits, + const uint visibility) { /* TODO(sergey): * - Test if pushing distance on the stack helps. @@ -54,8 +55,6 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, int object = OBJECT_NONE; float isect_t = tmax; - const uint visibility = PATH_RAY_ALL_VISIBILITY; - #if BVH_FEATURE(BVH_MOTION) Transform ob_itfm; #endif diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index ef0d4f6..5892c97 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -994,12 +994,14 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg, int stack_index = 0, enclosed_index = 0; + const uint visibility = PATH_RAY_ALL_VISIBILITY | kernel_data.integrator.layer_flag; #ifdef __VOL @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs