Skip to content

rossborchers/UnityBoundingVolumeHeirachy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4fa0bc5 · Mar 12, 2023

History

12 Commits
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Dec 31, 2019
Jun 17, 2020
Dec 31, 2019
Dec 31, 2019
Mar 12, 2023
Mar 12, 2023

Repository files navigation

Unity Bounding Volume Heirachy

BVH GIF

Dynamic Unity 3d BVH - 3d Bounding Volume Hierarchy.

Modified from David Jeske's SimpleScene

About

This is a 3d Bounding Volume Hiearchy implementation for Unity in C#. It is used for sorting objects that occupy volume and answering geometric queries about them; such as ray, box, and sphere intersection.

It includes an efficient algorithm for incrementally re-optimizing the BVH when contained objects move. This variation works in Unity and supports GameObjects.

For more information about what a BVH is, and about how to use this code, see David's CodeProject article:

BVH.cs The root interface to the BVH. Call RenderDebug() to render the debug bounds using DrawMeshInstanced.
BVHNode.cs The code for managing, traversing, and optimizing the BVH
BVHGameObjectAdaptor.cs A IBVHNodeAdaptor with GameObject integration.
BVHSphereAdaptor.cs An example IBVHNodeAdaptor for spheres in the BVH.
IBVHNodeAdaptor.cs Base interface for any BVHNodeAdaptor. Implement this to create a new adaptor.

Notable Modifications

  • Supports GameObjects through a custom implementation of IBVHNodeAdapter (BVHGameObjectAdapter). Uses child renderers bounds to calculate bounds. Could be easily swapped out for any other bounds calculation. See BVHGameObjectAdaptor.GetBounds.
  • BVHHelper provides a radial node traversal test to be used with Traverse().
  • Code has been refactored to be closer to the .NET naming conventions.
  • Includes some tests that can be used as a starting reference.

References