我有点陷入困境,我确信我不是第一个遇到这个问题的人。
我正在尝试为多个房间的办公楼建模。我希望玩家能够为每个房间打开/关闭灯。以下是我遇到的问题:
问题1:使用正向渲染我无法使用阴影,因此我的点光源会从墙壁漏出(即关闭灯光的房间不是黑色,因为它们会从相邻房间接收光线)。
解决方案:最初,我通过光线映射我的场景两次来解决这个问题 - 一次打开灯,一次打开灯。当玩家关灯时,我将房间里的所有渲染器切换到全黑的光照贴图并关闭灯。
问题2:上面的解决方案并不错,但我的所有动态物体仍然会通过墙壁漏光。我想我可以使用lightprobes解决这个问题。但是,我不确定如何更改单个探头的光照贴图(即房间中的探头使用偏光照贴图,房间外的探头使用光照贴图。)
如果我使用带有阴影的延迟光照,一切都很好,但我的fps从60下降到~20。
由于
答案 0 :(得分:3)
拥有两个光照图确实是一种解决方案,但限制您使用静态漫反射场景。任何其他东西(移动物体或镜面场景)都需要更先进的技术。
一个简单的廉价解决方案是使用“cell and portals”(例如this paper)并保留第一个解决方案。这种方法构建了一个图表,表示不同房间之间的链接,并应防止光线泄漏 - 至少大约是。
更好的解决方案是使用shadow maps。您基本上从每个光源的角度渲染一次场景的深度图(如果准时!),然后通过简单的测试可以确定当前点是否在阴影中。如果您有很多房间,您当然可以将此方法与单元格和门户网站分解合并,以便更快地进行计算。
可能更好的解决方案是使用shadow volumes。此方法计算每个光锥(或您的聚光灯具有的任何形状)与场景几何形状之间的几何交集。使用它,您可以确定当前点是在阴影卷的内部还是外部。
如果您在网上搜索,所有内容都已扩展到柔和阴影。