【问题标题】:Multiple Rooms with Lights多间带灯的房间
【发布时间】:2013-03-08 21:12:54
【问题描述】:

我有点进退两难,但我确定我不是第一个遇到这个问题的人。

我正在尝试为具有多个房间的办公楼建模。我希望玩家能够打开/关闭每个房间的灯。以下是我遇到的问题:

问题 1:在前向渲染中,我不能使用阴影,因此我的点光源会从墙壁漏出(即关闭灯的房间不是漆黑的,因为它们正在接收来自相邻房间的光)。

解决方案:最初,我通过两次光照映射我的场景来解决这个问题 - 一次打开灯,一次关闭灯。当玩家关灯时,我将房间中的所有渲染器切换为全黑光照贴图并关灯。

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

如果我使用带阴影的延迟照明,一切都会很好,但我的 fps 从 60 下降到 ~20。

谢谢

【问题讨论】:

    标签: 3d unity3d texture-mapping lighting


    【解决方案1】:

    拥有两个光照贴图确实是一种解决方案,但会限制您使用静态漫反射场景。其他任何东西(移动物体或镜面场景)都需要更高级的技术。

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

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

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

    如果您在网上搜索,所有内容都已扩展到柔和阴影。

    【讨论】:

    • 谢谢!我目前的实现不能使用“单元格和门户”技术,因为房间不是“防水”的,如论文中所述(墙壁可以被打破)。我还提供了整个建筑物的 RTS 视图,因此我认为“单元和门户”方法在这里也会失败。现在正在研究影子卷..
    • 请注意,阴影体积比阴影贴图更难实现。阴影贴图很容易在 GPU 上完成,尽管阴影体积需要一些几何处理。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多