raytracing - 阴影光线穿过光线弯曲的物体

标签 raytracing

对于光线追踪,我应该如何处理穿过弯曲光线的 Material 的阴影光线(或者明确的光路)?我了解不会弯曲光线的透明和半透明屏障:我只需要减弱光线。但如果屏障实际上使光线弯曲,那么光线通常根本不会到达光源。

更一般地,从光源到该点的显式路径必须遵循不同的路径来解释弯曲:通常会改变入射光属性(角度、行进距离等)的路径。 。那么我是否需要找到该路径?如果需要,如何找到?

我正在考虑的一件事是强制显式路径继续到与光弯曲器相交的点,然后用新的显式光线弯曲并延伸路径到光源(如果它与另一个光相交,则继续前进-弯曲边界)。但我无法采用从光弯曲表面到光源的明确路径,因为它不会考虑弯曲。

我认为如果有一个折射表面,我可能可以根据它弯曲光线的方式来解决一个系统,并找到一条从光到表面的光线,以及另一条从点到表面的光线,其中每条光线都会弯曲到另一个。但是,如果有任意多个折射表面,我真的不知道它将穿过哪些表面,直到我知道它如何弯曲通过所有其他表面。

最佳答案

如果您只是从相机开始进行单向递归光线追踪,则没有已知的方法可以模拟您想要模拟的光路类型(从光到镜面反射或折射到“规则”表面(阅读“常规”为漫反射或光泽)到相机)。

您需要使用一种包括从光源开始追踪路径的技术,例如Bi-directional path tracing的双向方法。或Photon Mapping

下面是通过光子映射生成的焦散图像。如果仔细观察,您可以看到池分离器在池底部的焦散线中转换阴影。 (我将生成一个更好的演示图像并对其进行编辑,但这是我可以通过快速搜索找到的最好的图像) Shadows in caustics

关于raytracing - 阴影光线穿过光线弯曲的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456738/

相关文章:

c++ - 射线平面求交方向 vector

java - 光线追踪器根据相机角度扭曲立方体?

c - 光线追踪半球

opengl - 如何处理离散光线追踪的错误索引计算?

graphics - 光线追踪中的区域照明

c++ - 如何在 Ray Tracer 中实现景深?

c++ - 从 cpu 代码到 gpu 着色器获取漫反射 Material

3d - 光线追踪 - 软阴影

c++ - Raytracer 输出非常嘈杂的图像

c - 为什么我的光线追踪图像全黑?