1 个不稳定版本

0.1.1 2023 年 9 月 26 日
0.1.0 2023 年 9 月 19 日

#648图形 API

MIT 许可证

97KB
2K SLoC

bsdf

路径追踪的 Rust 实现BSDF

此工具包旨在覆盖路径追踪器中广泛的各种材料,并提供重要性采样方法。

设计决策

注意:此工具包基本上处于 alpha 状态。因此,以下许多内容可能在将来发生变化或保持不变。

代码主要针对路径追踪。直接照明技术,如基于图像的照明或多边形光源,尚未实现。

照明计算仅在 f64 中进行。这是因为 BSDF 可能非常尖锐。使用 f64 有助于减少数值误差。但是,材料参数以 f32 存储以最小化内存占用。所有材料都可以即时构建,因为它们(目前)不依赖于预计算的数据。在未来的某个时候,我们可能会通过 f32 和 f64 上的泛型实现来解决这个问题。

BSDF 在局部空间中计算。这意味着假设表面为 xy 平面,z 向量为法线。因此,在评估 BSDF 之前或之后必须旋转入射和出射向量。

代码中的 |omega_i.dot(n)||cos theta_i||omega_i.z| 不是 BSDF 的一部分。用户负责在必要时(几乎总是)乘以它们。另一方面,Pdf 用于高质量的重要性采样。因此,它们在生成样本时试图考虑这个余弦项。

sample_...函数是确定性的。这意味着您需要负责生成范围在0.0..1.0内的f64。这允许您控制采样过程以及使用的随机生成器或低差异序列。这些随机浮点数可以是Vec3d或Vec2d的形式传递

此crate基于glam构建,它是一个简单但快速的向量数学库。

示例

pathtracer示例展示了如何将此crate集成到简单的正向路径追踪器中。代码与一周内进行光线追踪保持非常接近,以便于理解。

参考文献

大量路径追踪文献被用于此中。以下是我在此中使用的最有影响力的论文和其他来源

依赖关系

~3MB
~89K SLoC