所以我试图在光线跟踪程序中实现光子映射算法来模拟全局照明。但是,我遇到了一些问题,这些问题使得完成实现变得很困难。
我的程序已经成功地跟踪了整个场景中的光子,并将它们存储在一个平衡的kd树中,并且可以在任意给定点p附近收集最接近的k个光子,因此大部分工作已经完成。问题主要是到了估计辐射度的时候。
首先,我似乎无法获得足够明亮的间接照明,使我的场景有任何明显的不同。如果我的光源发出100000个光子,那么每个存储的光子(对于100000个发射的光子,在我的程序中大约是500000个存储的光子)的功率必须缩小100000倍,这使得它们非常暗。如果封装圆(pi*rad^2)的搜索半径远小于1,但将搜索半径减小到如此小的数目,这样估计的光子就非常少,如果使用大半径,我可以获得足够的光子,但无法获得使用半径很小,可能最终会包含不正确的光子所以我不知道该怎么办。
另外,我的另一个问题是,如果我人为地放大光子功率以增加间接照明的贡献,那么产生的照明会变得斑驳、不均匀和丑陋,看起来一点也不真实我知道这个问题很模糊,但我不知道为什么会这样,因为我很确定我做的辐射估计和brdf计算是正确的。

最佳答案

如果不知道在整个渲染系统中执行的精确计算,没有人能够告诉您为什么间接照明如此弱。可能是因为你的材料足够暗,所以没有太多的间接光这可能是您在间接照明计算中遗漏了pi的某个因子,或者您在直接照明计算中遗漏了除以pi的因子,因此间接照明比较暗。
至于splotchiness,这就是光子映射在没有大量光子的情况下的样子。尝试使用1亿个光子(或者至少1000万个光子),看看问题是否仍然存在。

关于algorithm - 光子映射-几个问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19194032/

10-10 23:03