如何模拟透明物体的数学正确阴影?

How to simulate mathimatically correct shadows of transparent objects?

我想模拟复杂复合透明物体投射的阴影。 对于特定光源(至少对于点光源),此阴影在数学上必须是正确的。我认为这对任何图形库都是正确的,是吗? 那么,绝对不能有任何折射。


这个图片当然不是我真正想要的。

OpenGL 可以做到吗?如果不能,那我应该用什么来代替?

UPD. 所以我需要一些路径追踪器。是否有一些我可以以编程方式使用的东西:给它一个带有对象的 3d 场景文件并获得跟踪结果?

This shadows must be mathematically correct

没有数学上正确或错误的照明之分。你的意思是物理上正确

像您想要创建的图像依赖于光传播。正确模拟光传播的唯一方法是将虚拟光子发射到场景中并跟随它们的路径。这叫做路径追踪

Does OpenGL can do this?

OpenGL 只绘制点、线和三角形……一次一个,没有任何场景或模型的概念。

旧的固定功能管道 OpenGL 内置了一个简单的 Blinn 照明模型,但这只是根据表面方向(法线)和相对于光源的位置计算每个顶点的 "light" 值。

现代 OpenGL 甚至不这样做。相反,它依赖于程序员提供程序,这些程序为每个顶点执行以决定它在图片中的位置,并为每个绘制的片段(大约一个像素)确定赋予它的颜色。

在这个名为 shaders 的程序中,您几乎可以做任何事情。因此,如果您想使用 OpenGL 着色器实现路径追踪器,您当然可以这样做。但是这个路径追踪器不会与你绘制的点、线和三角形相互作用。相反,这些将仅用于定义着色器进行计算的边界。

If it can not then what should I use instead?

与其说是可不可以的问题,不如说是实现起来有多容易。在你的情况下,OpenGL 肯定不是正确的编程环境,因为你基本上是从头开始的。相反,您应该使用周围现有的路径跟踪器之一。还有一些,是GPU加速的。