gpt4 book ai didi

graphics - 通过透明表面计算阴影

转载 作者:行者123 更新时间:2023-12-04 08:46:10 24 4
gpt4 key购买 nike

在光线追踪中,我想计算光线击中点的阴影。我为所有光源“画”线并检查它们是否被物体阻挡。如果它们没有被阻挡,那么我会根据它们的强度以及“命中光线”与表面法线之间的程度来计算照明强度。

但是如果光线被部分透明的表面阻挡怎么办?然后光线应该照亮这个点,但它的强度和颜色受它通过的表面颜色的影响,为了计算我需要对光线的通过点进行光线追踪(实际上对于 2 个点,一个入口和一个导出),这将是非常昂贵的,并且可能几乎永无止境(我猜在正确定位光源和表面时,您可以将示踪剂放入几乎无限的每次命中循环)。

是否有一种快速而好的方法来近似颜色,或者我应该只将表面的颜色作为浅色,并将其透明度作为强度?

最佳答案

您不需要从入口点和导出点开始进行光线追踪。想想什么样的光照射到这些点上。以与击中目标对象的角度不同的角度击中半透明表面的光线不会影响击中目标对象的光线的颜色。

+     *     +
+ * +
+ * +
+ * +
----------
| +*+ |
| + * + |
| + * + |
----------
+ * +
*
*
-------

当然,这假设 Material 中没有折射。

现在,如果您想将光线追踪器扩展到更高级的东西,例如路径追踪,那么您需要考虑从半透明物体反射并击中最终物体的光线,但对于光线追踪器,您不需要这样做担心它。

对于半透明物体,我会将光强度的降低建模为距离的线性函数(大多数现实世界的物体都严格遵守这一假设)。如果您将光建模为具有 RGB 分量(物理上不真实......),那么您将根据对象内该分量的值按比例减少每个分量。

如果您想真正了解光在物体中的作用,那么您需要求助于 subsurface scattering (玻璃杯中的牛奶看起来不像白色固体的原因以及为什么人类很难在 CGI 中建模)。

编辑:你提到的光无限地来回弹跳并使用许多计算的现象就是真正的光的表现。现在的高级渲染器无法集成所有这些光组件,因此只能随机采样光分布。采集的样本越多,图像越接近逼真,光积分越接近其真实值。这称为蒙特卡罗渲染。路径追踪、双向路径追踪和都市光传输都是试图完全模拟光传输的蒙特卡罗算法。给定足够的时间,每种算法都会收敛到相同的最终图像,但是,有些算法比其他算法更有效。 (请参阅维基百科上的 path tracing。文章底部的图像比我试图绘制的图像更好)。

关于graphics - 通过透明表面计算阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586277/

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