1 个不稳定版本
0.1.1 | 2023 年 9 月 26 日 |
---|---|
0.1.0 |
|
#648 在 图形 API 中
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集成到简单的正向路径追踪器中。代码与一周内进行光线追踪保持非常接近,以便于理解。
参考文献
大量路径追踪文献被用于此中。以下是我在此中使用的最有影响力的论文和其他来源
- Brent Burley. 迪士尼的基于物理的着色,课程笔记,修订于2014年。在ACM SIGGRAPH,电影和游戏制作中的实用基于物理的着色,2012年。
- Eric Heitz. 理解基于微facet的brdfs中的遮蔽-掩蔽函数。计算机图形技术杂志,第3卷第2期,32-91页,2014年。
- Eric Veach. 用于光传输模拟的鲁棒的蒙特卡洛方法。博士论文,斯坦福大学,1997年。
- Bruce Walter,Stephen R. Marschner,Hongsong Li和Kenneth E. Torrance。粗糙表面折射的微facet模型。欧几里得渲染研讨会论文,2007年。
- Eric Heitz,采样可见法线方向的GGX分布,计算机图形技术杂志(JCGT),第7卷第4期,1-13页,2018年 http://jcgt.org/published/0007/04/01/
- Brent Burley. 将迪士尼BRDF扩展到具有集成次表面散射的BSDF。SIGGRAPH课程,2015年。
- 沃尔特·迪士尼的BRDF探索器:https://github.com/wdas/brdf/blob/main/src/brdfs/disney.brdf
- Blender的原理BSDF:https://github.com/dfelinto/blender/blob/master/intern/cycles/kernel/osl/shaders/node_principled_bsdf.osl
- PBRT对迪士尼BSDF的实现:https://github.com/mmp/pbrt-v3/blob/master/src/materials/disney.cpp
依赖关系
~3MB
~89K SLoC