我正在尝试渲染6个聚光灯来为阴影贴图算法创建一个点光源。
我不确定我是否正确这样做,在设置我的视图和投影矩阵时,我或多或少都遵循了说明here,但最终结果如下:
白色区域是由6个阴影贴图中的一个覆盖的部分,较暗的区域是阴影贴图未覆盖的区域。显然,我没有将茶壶和盒子的阴影投射到场景上的问题,但是你可以看到6张阴影贴图有盲点。这是一个立方体阴影贴图应该如何看?它看起来不像点光源的阴影贴图......
答案 0 :(得分:2)
你在这里看到的是一个圆圈和两个双曲线 - 圆锥曲线 - 如果你采用双端锥体并将其与一个平面相交,那么你可能会得到的结果。
这种数学似乎可以从情况中删除,但它解释了你的问题。聚光灯会产生一个光锥,你不能用一堆来自同一点的锥体完全填满一个固体空间。 (我建议卷起一堆纸,然后将它们粘在一起进行试用。)
然而,当你远离模拟点源的起源时,锥体会聚到它们的同晶圆中,并且在光线中存在无穷小的间隙。
解决这个问题的一个选择是改变视锥细胞的焦点,使它们稍微重叠 - 这会产生过度曝光的区域,但过度曝光只会在您离得更远时变得明显。只要你的所有物体都靠近点光源,这可能不是什么大问题。
另一种选择是将所有灯光的焦点移近其光源。这样,他们就会更快地收敛到他们的同伴。
答案 1 :(得分:2)
实际上,您可以调整六个点以使锥体完美地填充立方体贴图的每个面。您可以通过设置每个圆锥的光圈在每个立方体贴图面周围创建一个外接圆来实现此目的。在这种情况下,您不必担心重叠,因为将重叠部分位于面部区域之外。
换句话说:调整灯光的投影矩阵'FOV,因此不包括光锥的视锥体,但锥体将包括视锥体。
整个实施see this paper。