全向阴影映射聚光灯

3

我正在实现延迟渲染器中的全向阴影映射,但是遇到了解决这个问题的困难:

这是一张图片:shadow problem example

当我只是将六个聚光灯沿着每个轴的正负方向指向时,就会出现上图所示的情况。我知道问题是由于聚光灯计算使得光在灯光锥内而导致圆形的。

我的第一个想法是禁用锥体计算,但显然,因为灯光混合在一起,如果你从一个灯光看向另一个灯光,就会有重叠。如果我将灯光渲染的几何形状从锥形改为基于正方形的金字塔(我认为我必须这样做?),那么我将能够使用灯光的截锥体(我已经有了)而不是锥体计算来测试当前像素是否落在截锥体内,对吗?

如果是这样的话,有人知道在像素着色器中实现这个的最佳方法是什么吗?我想过只检查该点是否在截锥体的每个平面前面,但这似乎在像素着色器中执行代价太高。


重复删除和重新提问同一个问题并不是解决问题的正确方式。你需要将人们所要求的信息实际放入问题中,这样才能得到答案。 - Nicol Bolas
“当我只是将六个聚光灯沿着每个轴的正负方向指向时,就会发生这种情况。”你为什么要这样做呢?如果你想要一个点光源,那就直接使用点光源。难道你只是从一些在线延迟着色示例中复制和粘贴代码,而这些示例只展示了如何使用聚光灯吗?” - Nicol Bolas
抱歉删除了旧问题,我不仅仅是重新提交了它,而是重新措辞了一下。我愚蠢地忽略了我正在处理阴影映射,我不是在询问如何添加一个点光源,我已经成功解决了这个问题。“你到底是怎么想的?”我的问题涉及使用点光源进行阴影映射,需要使用6个聚光灯来模拟一个点光源,为了更好的解释,我建议阅读这篇alt dev博客文章http://www.altdevblogaday.com/2011/01/30/omni-directional-shadow-mapping/。 - user1848064
你似乎在制作图形编程教程,我觉得如果你读了我的重新表述的问题,现在它指出我正在处理阴影映射,你就能回答它了。 - user1848064
制作一个合适的点光源。这是最简单的光体类型实现。 - Grimmy
不,我的点光源已经可以工作了,我正在尝试为点光源添加阴影映射(如果您读了我之前评论中的Alt Dev Blog链接),并且需要知道如何将聚光灯锥体计算调整为像素着色器中的有效视锥剔除方程 =) - user1848064
1个回答

0

你有6个视锥体,但请注意:

  1. 你不需要检查背面或前面的面,只需检查它是否在无限金字塔内
  2. 每个面都由两个相邻的视锥体共享
  3. 每个面都被面向后方的视锥体所反射

这意味着你只需要总共检查6个平面,就可以确定需要访问哪个阴影贴图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接