• Stars
    star
    114
  • Rank 308,031 (Top 7 %)
  • Language
    C#
  • License
    Apache License 2.0
  • Created almost 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Unity Bounding Volume Heirachy (BVH)

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