diff --git a/source/blender/render/extern/include/RE_raytrace.h b/source/blender/render/extern/include/RE_raytrace.h index beae1b84b04..864b6124db4 100644 --- a/source/blender/render/extern/include/RE_raytrace.h +++ b/source/blender/render/extern/include/RE_raytrace.h @@ -37,7 +37,7 @@ extern "C" { #define RE_RAY_LCTS_MAX_SIZE 256 -#define RT_USE_LAST_HIT /* last shadow hit is reused before raycasting on whole tree */ +#define RT_USE_LAST_HIT /* last shadow hit is reused before raycasting on whole tree */ //#define RT_USE_HINT /* last hit object is reused before raycasting on whole tree */ #define RE_RAYCOUNTER diff --git a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp index 2dde485d3d1..774a465092d 100644 --- a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp @@ -81,12 +81,23 @@ template inline static void bvh_node_push_childs(Node *node, Isect *isec, Node **stack, int &stack_pos) { Node *child = node->child; - while(child) + + if(!RayObject_isAligned(child)) { stack[stack_pos++] = child; - if(RayObject_isAligned(child)) + } + else + { + while(child) + { + //Skips BB tests on primitives + if(!RayObject_isAligned(child->child)) + stack[stack_pos++] = child->child; + else + stack[stack_pos++] = child; + child = child->sibling; - else break; + } } }