0

我正在尝试渲染 6 个聚光灯来为阴影映射算法创建一个点光源。

我不确定我是否做对了,我在设置视图和投影矩阵时或多或少地遵循了此处的说明,但最终结果如下所示:

替代文字

白色区域是被 6 个阴影贴图之一覆盖的部分,较暗的区域是没有被阴影贴图覆盖的部分。显然我对将阴影投射到场景中的茶壶和盒子没有问题,但是正如您所看到的 6 个阴影贴图有盲点。这是立方体阴影贴图的外观吗?它看起来不像点光源的阴影贴图......

4

2 回答 2

2

你在这里看到的是一个圆和两条双曲线——圆锥截面——如果你把一个双端圆锥和一个平面相交,这正是你所期望的结果。

这个数学似乎与这种情况无关,但它解释了你的问题。聚光灯会产生一个锥形光,您不能用来自同一点的一堆锥形光完全填充一个实心空间。(我建议把一堆纸卷起来,然后把它们粘在一起试试看。)

但是,当您远离模拟点源的原点时,锥体会收敛到它们的渐近线,并且光中有一个无限小的间隙。

解决这个问题的一种方法是改变视锥的焦点,使它们稍微重叠——这将产生过度曝光的区域,但过度曝光只会随着你越来越远而变得明显。只要您的所有对象都靠近点光源,这可能不是什么大问题。

另一种选择是将所有灯光的焦点移到更靠近其光源的位置。这样,他们会更快地收敛到他们的渐近线。

于 2009-12-12T13:23:33.210 回答
2

实际上,您可以调整您的六个点以使锥体完美地填充立方体贴图的每个面。您可以通过设置每个锥体的孔径以在每个立方体贴图面周围创建一个外接圆来实现此目的。在这种情况下,您不必担心重叠,因为重叠的部分超出了面的区域。

换句话说:调整灯光的投影矩阵的FOV,所以它不会包含光锥的视锥体,但锥体将包括视锥体。

整个实现见这篇论文

于 2009-12-13T12:02:30.890 回答