79.性能优化-GPU-UI系统优化-世界空间画布显示定义摄像机
79.1 知识点
什么是世界空间画布(Canvas)
世界空间画布,指的是将 Canvas 的 Render Mode(渲染模式)设置为 World Space(世界空间)的画布。
一般在以下情况会使用这种 UI 模式:
- VR/AR 项目:UI 需要作为 3D 世界的一部分与场景物体一起显示。例如 VR 中常见的悬浮菜单、手腕面板,场景内的交互 UI(箱子、门、机关上的交互提示),贴在墙上的按钮、开关等。
- 一般游戏项目:玩家或 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