如何实现图层之间的2D阴影?

我怎么能实现由不同层中的对象投射的2D阴影

不像Catalin Zima着名教程中的dynamic灯光:

在这里输入图像描述

但是就像这个video中管子的阴影一样:

在这里输入图像描述

就像这个video中的平台和角色的影子一样:

在这里输入图像描述

我想在一个场景中使用同一种灯光,层数多,灯光颜色多。

我可以想象通过在图层后面的图层上绘制黑色副本,并根据阴影投射的图层中的孔调整图层。 但我希望有一个比较便宜的基于像素着色器的方法。

这可以通过掩蔽来完成。 有多种方法可以做到这一点。

一种方法是有一种方法来呈现前景元素的阴影版本。 绘制背景。 然后绘制前景元素,稍微偏移取决于你想要照明移动,以这种方式,你只输出黑色的颜色。 然后正常地绘制前景。

另一种方法是将前景渲染成缓冲区,比实际看到的要多一点。 然后做一些“黑色”的传球,也许是一个模糊的传球。 现在渲染这组遍的输出,然后渲染前景缓冲区的可见部分。

要以不同角度支持多个灯光,您可以多次执行上一个步骤,或者将它们全部集中在一个缓冲区中。 math将根据你想要达到的目标而变化,但首先猜测第一个video是怎么回事,他们只是把光线的位置对准摄像机的位置(可视区域的中心)然后使用该vector(缩放)来确定如何抵消阴影。 就像是:

draw background for each light intersecting viewing bounds: offset = light.position - camera.position offset *= SCALE FACTOR (0.25 maybe) draw shadow foreground at offset draw foreground 

距离场景较近的灯光将具有较小的比例因子。 如果你想要多个深度的话,那里有一些math工作,简单的几何学的东西。