所以我试图在我的光线追踪程序中实现一个光子映射算法来模拟全局照明。但是,我遇到了一些难以完成实施的问题。
我的程序已经成功地在整个场景中追踪光子,将它们存储在平衡的 KD-Tree 中,并且可以在任何给定点 p 附近收集 k 个最近的光子,因此大部分工作已经完成。问题主要在于辐射估计的时间。
首先,我似乎无法让间接照明足够亮以在我的场景中产生任何明显的差异。如果我的光源发射 100,000 个光子,那么每个存储光子的功率(对于 100,000 个发射光子,在我的程序中大约是 500,000 个存储光子)必须按比例缩小 100,000 倍,这使得它们非常暗淡。如果我的搜索半径远小于 1,但将搜索半径减小到如此小的数字,我认为我可以在除以面积时减轻这种情况估计,如果我使用大半径,我可以获得足够的光子,但我没有得到使用小半径的额外“功率提升”,并且可能最终包括不正确的光子。所以我不知道该怎么办。
此外,我的另一个问题是,如果我要人为地扩大光子功率以增加间接照明的贡献,那么产生的照明会出现斑点、不均匀和丑陋,而且看起来一点也不真实。我知道这个问题很模糊,但我不知道为什么它看起来像这样,因为我很确定我正在正确地进行辐射估计和 brdf 计算。