ITADN
madmann91/bvh · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

BVH 构建与遍历库

Build Status

注意:这是该库的第 2 版。请查看 v1 分支以获取该库较旧的第 1 版。

该库是一个用于 BVH 构建和遍历的小型独立库。它采用 MIT 许可证授权。

Example rendering generated by a path tracer using this library (场景由 Blend Swap 用户 MaTTeSr 提供,可在此处](https://www.blendswap.com/blend/18762)获取, 以 CC-BY 3.0 协议分发)

性能

以下是该库与其他替代方案 (EmbreeFast-BVHnanort)的对比:

Performance comparison with Embree, nanort, and Fast-BVH

功能

以下是本库支持的功能列表(相对于 v1 的变更以 [NEW] 标示):

  • [NEW] 使用 std::span 而非原始指针的 C++20 接口,
  • 提供直接访问各种构建器的低级 API,
  • [NEW] 根据所需的 BVH 质量级别选择最佳构建器的高级 DefaultBuilder API。
  • 高质量、单线程的扫描式 SAH 构建器,
  • 快速、中等质量、单线程的基于分箱的 SAH 构建器,灵感来自 I. Wald 的 “On Fast Construction of SAH-based Bounding Volume Hierarchies”,
  • 快速、高质量、多线程的迷你树 BVH 构建器,灵感来自 P. Ganestam 等人的 “Rapid Bounding Volume Hierarchy Generation using Mini Trees”,
  • 基于 D. Meister 和 J. Bittner 的 “Parallel Reinsertion for Bounding Volume Hierarchy Optimization” 的重插入优化器,
  • 使用 T. Ize 的 “Robust BVH Ray Traversal” 的快速且鲁棒的遍历算法。
  • 基于 T. Möller 和 B. Trumbore 的 “Fast, Minimum Storage Ray/Triangle Intersection” 的快速光线-三角形相交算法,
  • [NEW] 基于 J. Nah 和 D. Manocha 的 “SATO: Surface Area Traversal Order for Shadow Ray Tracing” 的用于阴影光线的表面积遍历顺序启发式方法,
  • 快速的光线-球体相交例程,
  • [NEW] 序列化/反序列化接口,
  • [NEW] 支持可变数量的维度(例如支持 2D、3D、4D BVH)以及不同的标量类型 (例如 floatdouble),
  • [NEW] 仅依赖标准库(并行化使用基于 std::thread 的自定义线程池),
  • [NEW] 库的高级部分提供了 C API。

构建

本库是纯头文件库,可以通过克隆或将其作为子模块添加来作为 CMake 子项目引入,例如在 <your-project>/contrib/bvh 中,然后向 <your-project>/CMakeLists.txt 添加以下内容:

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

如果你想构建示例,请使用:

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

C API

该库可以通过一组小型的高层 C 绑定来使用。这些绑定默认未启用,但可以通过使用 -DBVH_BUILD_C_API=ON 配置 CMake 来构建。此外,如果 意图是在一个不依赖 C++ 标准库的纯 C 环境中使用该库,那么静态链接 C++ 标准库可能是一个好主意。可以通过 在 CMake 命令行中添加标志 -DBVH_STATIC_LINK_STDLIB_C_API=ON 来实现。

用法

该库包含几个与 API 保持同步的示例: