【问题标题】:Does setting camera's culling mask to Nothing when UI covers the screen is good?UI覆盖屏幕时将相机剔除遮罩设置为Nothing好吗?
【发布时间】:2019-06-27 18:09:51
【问题描述】:

我有一个相当大且完整的场景,因此会收到很多绘图调用。

有时我会在游戏中显示覆盖整个屏幕的视频。 当我使用 Unity 的分析器工具测试我的游戏时,我注意到相机仍然会渲染所有内容(尽管启用并计算了遮挡剔除),这会导致视频延迟。

我的问题是如何禁用相机?

当我禁用相机组件或相机的GameObject 时,我在游戏视图中收到警告⚠,上面写着No camera is rendering to this display。我想这不好(如果我错了,请纠正我)。

所以我想知道取消相机上的剔除蒙版(通过将其设置为 Nothing)是否会强制 unity 停止渲染场景。 还是它仍然在后台做一些工作? (就像 UI 元素一样,即使它们是完全透明的,它们仍然会被渲染)。

提前致谢

【问题讨论】:

    标签: unity3d optimization camera render culling


    【解决方案1】:

    我有一个相当大而完整的场景,因此吸引了很多人 来电。

    我建议在您的材质上激活“实例化”,它可以大大减少绘制调用。

    当 UI Pops 打开时,它可以帮助从活动摄像机中移除“默认”层(或大多数渲染器所在的任何层)。您可以使用图层蒙版轻松完成此操作。或者您可以将 Camera.main.farClippingPlane 设置为 1 或任何较小的数字。

    【讨论】:

    • 谢谢,有没有解释“实例化”的链接,因为我没用过。我肯定会在显示视频时尝试设置图层蒙版。
    • docs.unity3d.com/Manual/GPUInstancing.html 只需轻按您正在使用的材料即可。您可以在您的类中定义两个 LayerMask,例如“public LayerMask UIOpen; public LayerMask UIClosed”,然后在它们之间进行交换。在检查器中可以看到 LayerMask,因此您只需点击每个蒙版的图层即可。
    • 我没有测试过这个,但是设置 Camera.main.clearFlags = CameraClearFlags.Nothing;应该留下你渲染的最后一帧,如果你有透明的 UI 元素,这可能是一个很酷的效果。我不确定这是否正常工作。
    • 哇,感谢您的好评。这正是我一直在寻找的。打开实例化确实大大减少了我的绘制调用,并且 LayerMask 解决方案效果很好。尚未尝试清除标志解决方案,但会尽快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多