gpt4 book ai didi

3d - 光线追踪 - 软阴影

转载 作者:行者123 更新时间:2023-12-01 07:54:49 26 4
gpt4 key购买 nike

我正在将我自己的光线追踪器实现为学校项目的 iPad 应用程序。目前结果如下:

enter image description here

我需要添加最后一个要求,柔和阴影 ,但我在任何地方都找不到完整的引用。如果我理解得很好,要实现此功能,我必须从交点向 mt 光源发射许多光线。这个必须是区域灯。假设我使用一个球体,我的问题是:

  • 我必须使用球体上的哪个点来计算阴影射线?
  • 我如何平均结果?
  • 最佳答案

    您站在具有局部表面法线 N 的点 P 处,需要找出中心 C 悬在地平线上方的球状光源 L 到达的照明,在可见频率上均匀且愉快地辐射能量。要获得柔和的阴影,您需要向 L 上的不同点发送多个遮挡检测器光线(shadowfeelers),但让我们做的不仅仅是这些。

    The scene

    图片清楚地表明,直射光只能从半球 HF 到达 P,因此它是您必须采样的球体的唯一部分 - 将阴影检测器发送到 - 以便准确评估 L 对 P 处照明的贡献。然而,虽然在球体上生成点很简单,但这里我们只有一个不一定与任何世界坐标轴对齐的半球,这使数学复杂化。但真正的问题在别处——如果我们对 HF 进行均匀采样,我们将对它面向 P 的部分和几乎侧向的部分给予同等对待。这是一种浪费,最好将我们的计算集中在向 P 发送更多能量的区域。

    我们快速观察到,所有这些探影者实际上都针对与 L 共享中心的圆盘 D(即 L 的大圆),并且与连接 P 和 C 的线正交。

    Disc noticed

    这意味着不是在 HF 上生成点,我们可以在 D 盘上生成它们,这不仅更简单,而且 - 假设 D 上的点分布均匀 - 保证 HF 上的 shadowfeeler 密度将局部与该区域的潜力成正比贡献,很好地解决了我们上面的问题。

    另一种看待这个问题的方法是,您需要在以 P 为顶点、以 D 为底的锥体内生成光线。

    Cone enters

    把它们加起来:

  • 假设从 L 到达 P 的总光量 E。您可以根据 L 和 P 之间的距离、L 在 P 上的角扩展或更复杂的东西来确定它。
  • 生成一组 M 条随机、均匀的阴影光线,从 P 到 D 盘。
  • 如果射线 R 在击中 L 之前与任何物体相交,则沿着这条路径没有能量转移。
  • 除此以外:
  • 将 E/M 乘以 P 处的法向量 N 和(归一化)R 的点积,
  • 将结果添加到到目前为止传输的光中。
  • 对所有 M 射线重复此操作。

  • TO DO:优化(检测 L 是否完全/部分在局部范围内,随 L 在 P 上的角度扩展改变 M,使用分层和/或自适应采样,缓存遮挡器命中等)

    附注。以上做了大量的假设和简化,在光度学上是不正确的,但对于 iPad 光线追踪器来说应该是正确的。

    关于3d - 光线追踪 - 软阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709332/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com