# Missing triangle in BVH

May 22, 2023

Recently I was applying Bounding Volume Hierachy to a Whitted-style Raytracing system. The idea of BVH and implementation are well described in Ray Tracing in the Next Week by Peter Shirly. It’s a really great book. And here’s the link https://raytracing.github.io/books/RayTracingTheNextWeek.html

One key component in BVH is AABB (Axis-Aligned-Bounding-Box) intersects with ray. People usually adopt Slab method to address this problem. To be more specific, computing the ray-AABB intersection along 3 different axis, if these intervals produces an overlapping region, then the ray intersects with AABB and vice versa.

After applying this method to the scene rendering, I lost some of the triangles in the scene. However, all spheres are kept intact. For example, here’s what I got after applying BVH and the latter is before BVH.

After couple hours of step_into debugging, I found the reason to be as follows:

For spheres, the Bouding box will always have some length along 3 axis. However, this isn’t necessarily the case for AABB of triangles. ==Bounding Box of triangles can fall back to plane if the triangle is parallel to either xy, yz or xz plane== .

Let’s say a triangle is parallel to the xz plane, so the 3 vertices has the same y value. And this makes ty0 and ty1 to be the same in above computation, and thus resulting no overlapping region for other 2 axis. i.e. The bounding box doesn’t intersect with the triangle (which is a false statement)

To address this, simply add some thickness to each axis while building bounding box for triangles. In my case, I use 1e-3, and boom, problem solved!