光线追踪 - 软阴影

3
我正在为学校项目开发一款iPad应用程序,实现自己的光线追踪器。目前的结果如下所示:enter image description here。我需要添加最后一个要求,即柔和阴影,但我无法在任何地方找到完整的参考资料。如果我理解正确,要实现此功能,我必须从交点向光源发射许多光线。这个光源必须是一个区域光源。假设我使用一个球体,我的问题是:
  • 我必须使用球体上的哪个点来计算阴影光线?
  • 我如何平均结果?
1个回答

14
你站在点P上,本地表面法线为N,需要找出来自球形光源L的照明情况,其中心C悬挂在地平线上,均匀快乐地辐射可见频率的能量。为了获得柔和的阴影效果,您需要向L上不同点发送多个遮挡检测器光线(阴影感知器),但我们要做更多的事情。

The scene

这张图片清晰地表明,直接光只能从半球HF到达P,因此它是你需要采样的球体的唯一部分 - 发送阴影探测器 - 以准确评估L对P照明的贡献。然而,虽然在球面上生成点很简单,但在这里,我们只有一个半球,并不一定与任何世界坐标轴对齐,这使得数学变得复杂。但真正的问题在于,如果我们均匀采样HF,我们会同等对待其正对P的部分和几乎侧向的部分。这是一种浪费,更好的方法是将计算集中在向P发送更多能量的区域上。
我们快速观察到,所有这些阴影探测器实际上都指向了与L共享中心(即L的大圆)且垂直于连接P和C的线的圆盘D。

Disc noticed

这意味着我们可以在圆盘D上生成点,而不是在HF上生成点。这样做不仅更简单,而且 - 假设在D上均匀分布点 - 可以保证HF上的阴影感知器密度在局部上与区域的潜在贡献成比例,从而很好地解决了我们上面遇到的问题。
另一种看待这个问题的方式是,你需要在一个以P为顶点、D为底部的锥形体内生成光线。

Cone enters

总之:
1.假设光线E从L到P总共抵达。您可以根据L和P之间的距离、L在P上的角度分布或其他更复杂的因素来确定它。
2.从P向圆盘D生成一组M个随机、均匀的阴影光线。
3.如果光线R在撞击L之前与任何物体相交,则沿该路径没有能量传输。
4.否则: - 将(E/M)与P处法向量N和(规范化的)R的点积相乘, - 将结果添加到迄今为止传输的光亮度中。
5.重复所有M条光线。
待完成: 优化 (检测 L 是否完全/部分位于局部地平线下,根据 L 在 P 上的角度分布改变 M,使用分层和/或自适应采样,缓存遮挡器撞击等)。
附:以上内容基于大量的假设和简化,不能正确地呈现光度学,但对于 iPad 光线追踪器来说应该够了。

谢谢。终于做到了。现在我又有一个问题。请看这里http://gamedev.stackexchange.com/questions/105187/ray-tracing-draw-polygon-square-bounded-plane。你能帮我解决这个问题吗? - Fabrizio Duroni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接