madmann91 / bvh

A modern C++ BVH construction and traversal library
MIT License
864 stars 83 forks source link
bvh c11 construction-algorithms cpp20 header-only raytracing traversal-algorithms

BVH Construction and Traversal Library

Build Status

Note: This is the 2nd version of this library. Check the v1 branch for the older, first version of this library.

This library is a small, standalone library for BVH construction and traversal. It is licensed under the MIT license.

Example rendering generated by a path tracer using this library (Scene by Blend Swap user MaTTeSr, available here, distributed under CC-BY 3.0)

Performance

Here is a comparison of this library with other alternatives (Embree, Fast-BVH, and nanort):

Performance comparison with Embree, nanort, and Fast-BVH

Features

Here is a list of features supported by this library (changes from v1 are indicated with [NEW]):

Building

This library is header-only, and can be added as a CMake subproject by cloning or adding as this repository as submodule, for instance in <your-project>/contrib/bvh, and then adding this to <your-project>/CMakeLists.txt:

add_subdirectory(contrib/bvh)
target_link_library(my_project PUBLIC bvh)

If you want to build the examples, use:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=<Debug|Release> -DENABLE_TESTING=ON
cmake --build .

C API

The library can be used via a small set of high-level C bindings. These bindings are not enabled by default, but can be built by configuring CMake with -DBVH_BUILD_C_API=ON. Additionally, if the intent is to use the library in a pure C environment which does not have the C++ standard library as a dependency, it might be a good idea to statically the C++ standard library. That can be done by adding the flag -DBVH_STATIC_LINK_STDLIB_C_API=ON to the CMake command line.

Usage

The library contains several examples that are kept up-to-date with the API: