我有一个小的路径跟踪器,我正在尝试弄清楚如何实现一些基本的 BRDF。以下是我使用的管道的简要说明(没有递归):
1) For each pixel:
1.1) For each sample:
1.1.1) I construct a path.
1.1.2) I calculate the contribution of this path.
1.1.3) I calculate the "probability" of this path.
1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path).
1.2) Take the sum of all samples' values and write it to the pixel.
所以,我在 step 中计算反射光线的方向1.1.1) I construct a path
。
目前,我已经实现了漫反射、镜面反射、光泽反射、折射。现在我想实现一个复杂的 BRDF,比如说 Cook-Torrance BRDF。我看到它包含几个组件(漫反射和镜面反射)。我应该如何追踪这些光线以获得组合?我应该在diffuse_ray/specular_ray之间随机选择,然后像往常一样累积值(乘以一些系数)吗?(比如,如果随机值大于0.5,那么我跟踪漫射光线,否则 - 镜面反射)或者我应该跟踪多条光线从每个路口?
它通常如何在基于物理的渲染器中实现?
PS如果有人知道关于这个主题的一些好文章,我会很高兴看到它们。我试图阅读 pbrt 但它对我来说似乎非常复杂和巨大。有些东西的实现方式不同,比如相机模型和其他东西。