79.世界空间画布显示定义摄像机

79.性能优化-GPU-UI系统优化-世界空间画布显示定义摄像机


79.1 知识点

什么是世界空间画布(Canvas)

世界空间画布,指的是将 Canvas 的 Render Mode(渲染模式)设置为 World Space(世界空间)的画布。

一般在以下情况会使用这种 UI 模式:

  1. VR/AR 项目:UI 需要作为 3D 世界的一部分与场景物体一起显示。例如 VR 中常见的悬浮菜单、手腕面板,场景内的交互 UI(箱子、门、机关上的交互提示),贴在墙上的按钮、开关等。
  2. 一般游戏项目:玩家或 NPC 头顶的血条、名字、Buff 图标等。

总体而言,当 UI 必须是 3D 世界的一部分,而不是固定在屏幕上的 2D 界面时,就可能会用到世界空间画布(Canvas)。

为世界空间画布(Canvas)显示定义摄像机

当 Canvas 的模式为 World Space 时,若不设置其 Event Camera 参数,且所有摄像机都勾选渲染 UI 层,则同一 UI 可能被多个摄像机渲染,造成性能浪费。

项目中通常存在多台摄像机(主相机、小地图相机、后处理相机、预渲染相机等)。若未单独设置,它们可能都会渲染 UI 层,导致同一份 UI 被多次渲染。可能带来的开销包括:

  • CPU:重复提交 DrawCall 等。
  • GPU:重复进行像素填充等。

因此应养成习惯:为世界空间画布(Canvas)指定用于显示的摄像机,明确设置 Event Camera;同时让不需要渲染 UI 的相机在 Culling Mask(剔除遮罩)中排除 UI 层,从而避免重复渲染、减少性能浪费。


79.2 知识点代码

Lesson79_性能优化_GPU_UI系统优化_世界空间画布显示定义摄像机.cs

public class Lesson79_性能优化_GPU_UI系统优化_世界空间画布显示定义摄像机
{
    #region 知识点一 什么是世界空间画布(Canvas)

    //所谓世界空间画布
    //就是将Canvas中的Render Mode(渲染模式)参数
    //设置为 World Space(世界空间)的画布
    //一般在以下情况可能使用这种UI模式
    //1.VR/AR项目中
    //  UI元素希望在3D世界中和场景物体混合显示
    //  VR 中常见的 悬浮菜单、手腕面板
    //  场景内的交互UI,比如 箱子、门、机关上方的 交互提示
    //  贴在墙上的按钮、开关UI
    //  等等
    //2.游戏项目中
    //  玩家或 NPC 头顶的 血条 、 名字 、 Buff 图标
    //  等等

    //总体而言
    //UI 必须是 3D 世界的一部分,而不是固定在屏幕上的 2D 界面时
    //就可能会用到 世界空间画布(Canvas)

    #endregion

    #region 知识点二 为世界空间画布(Canvas)显示定义摄像机

    //当Canvas的模式是World Space时
    //如果不设置它的Event Camera参数
    //并且所有摄像机都设置的会渲染UI层的话
    //那么UI元素就可能被多个摄像机渲染
    //从而带来性能浪费

    //我们的项目中经常可能存在多个摄像机
    //比如 主相机、小地图相机、后处理相机、预渲染摄像机 等等
    //如果这些相机没有进行专门的设置,可能都会渲染UI层
    //那带来的问题就是
    //同一份 UI 可能会被多次渲染
    //从而浪费性能
    //它可能带来的性能开销有:
    //CPU => 会重复提交DrawCall 等
    //GPU => 重复进行像素填充 等

    //因此
    //我们应该养成良好的习惯
    //为世界空间画布(Canvas)显示的定义关联摄像机
    //明确设置 Event Camera
    //并且 让其他不需要渲染 UI 的相机在 Culling Mask(剔除遮罩) 中排除 UI 层
    //这样就可以有效解决该问题,减少我们的性能浪费!

    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏