Fab*_*oni 2 3d raytracing shadow
我正在实施我自己的光线追踪器作为学校项目的iPad应用程序.目前这是结果:
我需要添加最后一个要求,软阴影,但我无法在任何地方找到完整的参考.如果我理解得很好,为了实现这个功能,我必须从交叉点射击许多光线到光源.这一个必须是区域灯.假设我使用了一个球体,我的问题是:
您站在具有局部表面法线N的点P处,并且需要找出从球形光源L到达的照明,其中心C悬挂在地平线上方,均匀且愉快地在可见频率上辐射能量.要获得柔和阴影,您需要向L上的不同点发送多个遮挡探测器光线(阴影衰减器),但让我们做的不仅仅是这样.
图片清楚地表明,直射光只能从半球H F到达P ,所以它是你必须采样的球体的唯一部分 - 发送暗影效应器 - 以便准确评估L'对P的照度贡献.虽然在球体上生成点很简单,但在这里我们只有一个半球,不一定与任何世界坐标轴对齐,使数学复杂化.但真正的问题在于其他地方 - 如果我们统一对H F进行采样,我们会对其面向P头的部分以及几乎侧向的部分给予相同的处理.这是一种浪费,最好将我们的计算重点放在向P发送更多能量的区域上.
我们快速观察一下,所有这些影子扬声器实际上是针对与L共用中心的圆盘D(即L的大圆)并且与连接P和C的线正交.
这意味着我们不是在H F上生成点,而是在盘D上生成它们,这不仅更简单,而且 - 假设D上的均匀点分布 - 保证H F上的影子密度与局部成比例.该地区的潜在贡献,很好地解决了我们上面的问题.
另一种看待这种情况的方法是,您需要在锥体内生成光线,其中P为顶点,D为基础.
把它们加起来:
要做的是:优化(检测L是否在局部视界下完全/部分,通过L在P上的角展度变化M,使用分层和/或自适应采样,缓存封堵器命中等)
PS.上面做了大量的假设和简化,并且光度测量不正确,但应该用于iPad光线跟踪器.