我有一个很小的路径追踪器,我正在试图找出如何实现一些基本的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.所以,我计算了台阶1.1.1) I construct a path中反射射线的方向。
目前,我已经实现了漫反射,镜面反射,光面反射,折射。现在,我想要实现一个复杂的BRDF,比方说库克-托伦斯BRDF。我看到它包含几个组成部分(漫反射和镜面反射)。我该怎么追踪这些射线才能得到密码?我应该随机地在漫射射线/镜面射线之间进行选择,然后像往常一样累加这些值(乘以一些系数)?(例如,如果随机值大于0.5,我就会跟踪一条漫射射线,否则是镜面射线),还是应该从每个交叉口追踪多条射线?
它通常如何在基于物理的渲染器中实现?
如果有人知道一些关于这个话题的好文章,我会很高兴看到他们。我试着读pbrt,但它对我来说似乎非常复杂和巨大。有些东西的实现方式是不同的,比如相机模型和其他东西。
发布于 2016-10-27 15:20:02
第一步可能是让你的BRDF决定光线应该如何反弹。如果是多个方法的组合,那么将BRDF中的概率分配给每个方法,然后让BRDF根据给定的概率选择一个。
例如,假设您需要一个BRDF,它是镜面反射和漫反射的组合。当你实例化BRDF时,你可能会告诉它你想要60%的镜面和40%的漫射。然后,当路径跟踪器询问BRDF以获得反射的射线方向时,BRDF内部可以计算60%的反射射线和40%的漫射射线。
编辑-另一种,也许更准确的方法是让BRDF使用所提供的概率,通过在这两种方法之间进行内插来生成反射方向。在我们上面的例子中,当询问时,BRDF计算每个交点的镜面射线和漫射射线,并返回一条新射线,其方向是计算出的镜面射线的60%和计算出的漫射射线的40%的线性插值。
https://stackoverflow.com/questions/40270708
复制相似问题