2013-03-08 26 views
2

我处于一种困境之中,我敢肯定我不是第一个遇到这个问题的人。带灯的多房间

我正试图模拟与多个房间的办公大楼。我希望玩家能够打开/关闭每个房间的灯光。下面是我遇到的问题:

问题1:有前进的渲染,我不能使用的阴影,因此我的点光源穿过墙壁泄漏(即与房间灯灭不漆黑,因为他们接收来自相邻房间的光线)。

解决方案:首先,我被光解决这个映射我的场景两次 - 灯光以灯光熄灭上一次一次。当玩家关掉灯光时,我将房间内的所有渲染器都切换为全黑光照贴图并关闭灯光。

问题2:上述解决方案是不坏,但我所有的动态对象仍然收到光穿过墙壁漏水。我想我可以使用lightprobes来解决这个问题。但是,我不确定如何更改单个探针的光照贴图(即房间中的探针使用关闭的光照贴图,室外的探针使用光照贴图)。

如果我使用延迟光照与阴影一切工作不错,但我的FPS在60〜滴〜20。

谢谢

回答

3

有两个光照地图确实是一个解决方案,但限制你静态漫反射场景。其他任何东西(移动物体或镜面场景)都需要更先进的技术。

  • 一种简单廉价的解决方案是使用“单元和门户网站”(例如,this paper),并保持你的第一个解决方案。这种方法建立了一个图表,表示您的不同房间之间的联系,并应防止光线泄漏 - 至少大约。

  • 一个更好的解决方案是使用shadow maps。基本上,从每个光源的角度(如果准时!)渲染一次场景的深度图,然后通过简单的测试就可以确定当前点是否在阴影中。如果您有很多房间,您当然可以将此方法与单元格和门户分解合并,以加快计算速度。

  • 一个甚至可能是更好的解决方案是使用shadow volumes。这种方法计算每个光锥(或任何形状的聚光灯)与场景几何之间的几何相交。使用它,您可以确定当前点是在阴影体内还是在体外。

所有已被扩展到软阴影,如果你在网上搜索。

+0

谢谢!我目前的实施方案不能使用'单元格和门户'技术,因为房间不像文章中所述的'水密'(墙可以被打破)。我也提供了整个建筑的RTS视图,所以我认为'单元和门户'方法也会在这里失败。 现在重新研究阴影卷.. – Cailen 2013-03-09 21:55:35

+0

注意阴影卷比阴影图更难实施。阴影图很容易在GPU上完成,尽管阴影卷需要一些几何处理。 – WhitAngl 2013-03-15 18:26:56