所以我正在尝试实现光子映射算法来模拟我的光线追踪程序中的全局照明。但是,我遇到了一些使得很难完成实现的问题。
我的程序已经成功地在整个场景中跟踪光子,将它们存储在平衡的KD树中,并且可以在任何给定点p附近收集k个最近的光子,因此大部分工作都已完成。问题主要发生在辐射估计的时候。
首先,我似乎无法使间接照明足够明亮,以便在我的场景中产生明显的差异。如果我的光源发射100,000个光子,那么每个存储光子的功率(对于100,000个发射的光子,在我的程序中大约会有大约500,000个存储的光子)必须按比例缩小100,000倍,这使得它们非常暗淡。如果我的搜索半径远小于1但是将搜索半径减小到如此小的数字,那么当我将区域划分为封装圆(pi * rad ^ 2)时,我认为可以减轻这个问题。估计,如果我使用大半径,我可以得到足够的光子,但我没有得到使用小半径的额外“功率提升”,并可能结束包括不正确的光子。所以我不知道该怎么做。
此外,我的另一个问题是,如果我人为地扩大光子功率以增加间接照明贡献,则产生的照明是斑点,不均匀和丑陋并且看起来并不真实。我知道这个问题很模糊,但我不知道为什么它看起来像这样,因为我很确定我正在进行辐射估计和正确的brdf计算。
答案 0 :(得分:0)
在不知道您在整个渲染系统中进行的精确计算的情况下,没有人能够告诉您为什么间接照明太弱。可能是你的材料很暗,没有太多的间接光。可能是你在某个地方的间接照明计算中缺少一个因子pi,或者你可能在你的直接照明计算中错过了一个除以pi,所以相比之下,间接是暗淡的。
至于斑点,这就是没有大量光子的光子映射。尝试使用1亿个光子(或至少1000万个光子),看看问题是否仍然存在。