2009-12-11 38 views
0

我想渲染6个聚光灯为阴影映射算法创建一个点光源。使用6个聚光灯渲染点光源?

我不知道如果我这样做的权利,建立我的观点和投影矩阵当我或多或少遵循的指示here但最终的结果是这样的:

alt text

白色区域是由6个阴影贴图中的一个覆盖的部分,较暗的区域是阴影贴图未覆盖的区域。很明显,我没有把茶壶和盒子投影到场景中的问题,但是你可以看到6个阴影地图有盲点。这是一个立方体阴影贴图应该看起来如何?它看起来不像一个点光源的阴影图...

回答

2

实际上,您可以调整您的六个点以使锥体完美地填充立方体贴图的每个面。您可以通过设置每个锥体的光圈来创建围绕每个立方体贴图面的外接圆。在这种情况下,您不必担心重叠,因为会重叠。零件不在面的区域。

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

整体实施see this paper

2

你在这里看到的是一个圆和两个双曲线 - 圆锥曲线段 - 如果你采用双曲线结果锥体并与飞机相交。

这个数学似乎从情况中消除了,但它解释了你的问题。聚光灯创造了一个光锥,你不能用一堆来自同一点的圆锥体完​​全填充一个坚实的空间。 (我建议卷起一堆纸并将它们粘在一起以便试用)

但是,当你远离模拟点源的起源时,锥会聚到他们的渐近线,并且在光线中有一个无限小的差距。

解决此问题的一个选项是更改锥体的焦点,使它们稍微重叠 - 这将创建曝光过度的区域,但曝光过度只会在距离较远时变得明显。只要你的所有物体都靠近点光源,这可能不是什么大问题。

另一种选择是将所有灯光的焦点移近其源头。这样,他们会更快地融合他们的渐近线。