浅谈Unity中Canvas的三种渲染模式

Overview

 

UGUI通过 Canvas 组件渲染和管理UI元素。Canvas 是 UI 元素的容器,它决定了 UI 元素的渲染方式以及它们在屏幕上的显示效果。Canvas 有三种主要的渲染模式,每种模式有不同的用途和特点。本文将介绍这三种渲染模式

1. Screen Space - Overlay 模式

1.1 渲染方式

Screen Space - Overlay 模式下,Canvas 会直接渲染到屏幕上,而不依赖于任何摄像机。这意味着 UI 元素会覆盖在游戏画面之上,始终位于屏幕的最前面。

1.2 特点

  • 无需摄像机:不依赖场景中的任何摄像机,UI 会直接渲染到屏幕。
  • 始终位于最上层:无论场景中是否有其他 Canvas,Screen Space - Overlay 模式下的 UI 始终显示在最上面,其他 UI 元素都会被它覆盖。例如场景中还存在一个Screen Space - Camera 模式的Canvas,它下面的UI元素只可能被前者的UI遮挡,而绝不可能遮挡前者的UI.
  • 性能较高:由于 UI 渲染不需要经过摄像机的投影计算,因此其渲染效率较高,适合用于较为简单和静态的 UI。

1.3 适用场景

  • 主要用于游戏中不需要与场景中的 3D 对象交互的 UI。例如:主菜单、游戏 HUD、游戏中显示的分数等。
  • 用于需要始终显示在屏幕上并且不受场景摄像机影响的元素。

1.4 监视面板属性

1.Pixel Perfect:

  • 消除模糊和锯齿:尤其是在低分辨率设备或缩放后的 UI 元素中,未启用 Pixel Perfect 时,可能会看到 UI 元素的边缘变得模糊或出现锯齿。启用该选项后,Unity 会强制元素的边界对齐到像素网格,避免这些视觉问题。

  • 精确显示:它有助于确保 UI 元素在显示器上以精确的像素值显示,避免由于屏幕分辨率差异导致的模糊效果。

  • 适用于像素艺术风格:如果你制作的是像素艺术风格的游戏或应用,启用 Pixel Perfect 可以确保每个像素都完美对齐,保持像素风格的一致性和清晰度。

这是一个对比效果,前者没打开导致了输入框上下出现了色差,后者是打开该属性,获得了更好的显示效果(但是更耗性能).

2.Sort Order

通常不会出现两个同为Screen Space - Overlay 模式的Canvas,但是如果有的话,Sort Order属性会影响渲染属性,值越大越后渲染(即更不会被挡住).但是如果两个Canvas的该属性都为同一值渲染顺序如何呢?笔者没找到规律.

3.Target Display

  • Target Display 属性决定了 Canvas 渲染到哪个显示器。这个属性适用于 Screen Space - CameraWorld Space 渲染模式的 Canvas。当你有多个显示器时,你可以指定 UI 渲染在哪个显示器上。

  • Unity 支持将不同的摄像机渲染到不同的显示器上,而 Target Display 就是控制每个 Canvas 的渲染目标,帮助你更好地在多个显示器上分配渲染任务。

4.Additional Shader Channels

控制 Canvas 渲染时是否包含一些额外的顶点数据,以便提供给 Shader 进行更多的处理。这些额外的 Shader 通道提供了更多关于每个 UI 元素的信息,通常用于自定义 Shader 渲染效果。

Screen Space - Overlay 模式下,UI 渲染是直接绘制到屏幕上的,而不是依赖于相机的视图,因此,通常不会涉及复杂的空间变换。但即使在这种模式下,你仍然可以启用一些附加的 Shader 通道,以便在自定义 Shader 中使用。(通常不会使用)

可用的选项:

  1. Vertex Streams (顶点流)

    • 顶点流允许传递更多与顶点相关的数据给 Shader。这通常是用于处理与顶点位置、颜色、纹理坐标等相关的额外数据流。
  2. Normals (法线)

    • 启用此选项会将法线信息传递给 Shader。对于 Screen Space - Overlay 渲染模式来说,通常并不需要法线数据,因为 UI 元素通常是平面上的。但是,如果你想为 UI 添加某种自定义效果(例如基于法线的光照),启用法线数据就很有帮助。
  3. Tangents (切线)

    • 切线通常与法线一起使用,主要用于法线贴图的处理。如果你的 UI 需要进行复杂的材质效果,比如通过法线贴图实现视觉效果,可以选择启用切线数据。
  4. UV2 / UV3 / UV4 (额外的 UV 通道)

    • 这些额外的 UV 通道可以用于不同的纹理坐标。如果你想给 UI 使用多个纹理(例如多个层次的贴图),你可以启用这些额外的 UV 通道。
  5. Color (颜色)

    • 此选项启用后,Canvas 渲染的 UI 元素将包含颜色信息,这对于自定义 Shader 控制颜色或者透明度非常有用。
  6. Lightmap (光照贴图)

    • 如果你希望 UI 元素使用光照贴图进行渲染(虽然在 Screen Space - Overlay 模式下较少见),你可以启用光照贴图通道。这个选项让 Shader 能够访问相关的光照贴图数据。

2. Screen Space - Camera 模式

2.1 渲染方式

Screen Space - Camera 模式下,Canvas 会根据指定的摄像机进行渲染。UI 元素会被渲染到摄像机视野中的一个平面上,可以通过摄像机的视角和视野调整 UI 的显示效果。此时Cube也被渲染到UI上了.

2.2 特点

  • 依赖摄像机:渲染需要指定一个摄像机,UI 会根据摄像机的位置、视野以及投影设置进行渲染。
  • 支持透视效果:如果摄像机使用透视投影,UI 元素也会受到透视效果的影响,显示更具立体感。
  • 自动适应分辨率:当屏幕分辨率发生变化时,Canvas 会自动调整大小,以适应新的屏幕尺寸。

2.3 适用场景

  • 适用于需要3D 对象的情况。
  • 用于需要根据摄像机视角进行动态渲染的场景,如虚拟现实中的 UI 或者 3D 游戏中的 HUD。

2.4 注意:

推荐改成这样一个结构专门管理该模式的UI.同时这个摄像机这渲染UI层,而不做其他事.

经过测试虽然只渲染UI层,UI物体(比如一个Image),该Image即便改为别的层也能被渲染,但是3D物体却不行.但是摄像机如果改为渲染Water层,则UI物体就不会被渲染,即便UI物体也改为Water层.

 

此时因为是依靠摄像机渲染我们可以通过旋转UI获得一些立体效果.


也可以考虑修改摄像机为正交相机,将摄像机从 透视(Perspective) 改为 正交(Orthographic) 有以下几个优点和影响:

优点

  1. UI 不受透视变形影响

  • 透视相机会让 UI 元素受到透视投影的影响,远处的元素显得更小,近处的更大,导致 UI 在屏幕上的显示比例不均匀。

  • 正交相机可以确保 UI 元素在屏幕上保持相同的大小,不会因为远近发生缩放,使 UI 更加稳定。

  1. 更方便对齐 UI 元素

    正交相机不会有透视缩放问题,因此在 UI 布局时可以更精确地对齐,不会因相机角度变化导致 UI 位置和大小发生意外变化。
  2. 减少 UI 失真

    透视相机会导致 UI 组件的拉伸变形,特别是在 UI 组件较大或接近屏幕边缘时,而正交相机可以避免这些问题,使 UI 显示更清晰。
  3. 性能提升

    正交投影不需要进行复杂的透视变换和深度计算,因此可以提高渲染效率,特别是在 UI 复杂的情况下能减少 GPU 负担。

对比透视相机

特性透视相机 (Perspective)正交相机 (Orthographic)
UI 变形UI 可能受透视影响变形UI 保持原始比例,无变形
对齐可能因透视造成 UI 位置变化UI 位置更稳定,易对齐
视角变化UI 受相机 FOV 影响UI 不受相机 FOV 影响
深度感具有透视深度感无透视深度感
性能需要透视投影计算计算量较低,性能较优

适用场景

适合使用正交相机的情况

  • 2D 游戏 UI,如按钮、文本等不希望受到透视变形影响。
  • HUD(抬头显示),如血条、准星、迷你地图等,应该保持固定尺寸和位置。
  • 固定视角的游戏 UI,比如卡牌游戏、策略游戏等。

适合使用透视相机的情况

  • 3D UI 设计,比如 VR UI 或带有 3D 立体感的 UI。
  • 需要 UI 深度感的场景,比如某些游戏的界面希望 UI 组件能随距离发生变化。

总结

如果 UI 主要是 2D 组件,并希望它们在屏幕上保持稳定的尺寸和对齐方式,那么将 Screen Space - Camera 下的摄像机设置为 正交模式 是一个更好的选择。而如果 UI 需要透视效果,比如 3D 交互界面或者 VR UI,则可以选择透视相机。

2.5 监视面板属性:

在 Unity 的 Screen Space - Camera 模式下,Canvas 组件Plane Distance 属性的作用与摄像机的投影模式(透视或正交)有关。以下是详细解析:


Plane Distance属性

  1. 控制 UI 与摄像机的距离

    • Screen Space - Camera 模式下,Canvas 依附于一个摄像机,UI 会被渲染成 3D 物体。
    • Plane Distance 代表 UI 画布距离该摄像机的距离,单位是 世界单位(World Units)
  2. 影响 UI 元素的缩放

    • 如果使用的是 透视相机(Perspective),则 Plane Distance 越大,UI 组件会变得越小,因为透视投影会导致远处的物体缩小,近处的物体放大。
    • 如果使用的是 正交相机(Orthographic)Plane Distance 对 UI 组件大小没有影响,因为正交相机不会有透视缩放效果。
  3. 影响 UI 的遮挡关系

    • Canvas 作为一个 3D 物体,可能会与游戏场景中的其他 3D 物体发生遮挡。
    • Plane Distance 距离过大 可能会让 3D 物体遮挡UI。

Plane Distance 对比

投影模式Plane Distance 影响推荐值
透视相机(Perspective)影响遮挡关系,同时影响 UI 大小10-100,根据 UI 需求调整
正交相机(Orthographic)不影响 UI 大小,仅影响遮挡关系一般设为 1-10,避免过远

Sorting Layer属性和Order in Layer属性

这两者的设置只为了影响同为Screen Space - Camera 模式的Canvas的渲染顺序.

首先两个同为Screen Space - Camera 模式的Canvas,且Sorting Layer处于同一层级,这时Order in Layer的大小才有比较意义.那不同Sorting Layer的Canvas呢?

层级越大越不会被遮挡.

 

3. World Space 模式

3.1 渲染方式

World Space 模式下,Canvas 被视为场景中的一个 3D 对象。UI 元素会按照场景中的坐标进行渲染,因此它们能够与其他 3D 对象进行交互,并且受场景中的光照和摄像机视角影响。

3.2 特点

  • 视为 3D 对象:UI 元素作为场景中的 3D 对象存在,可以根据需要在三维空间中自由放置。
  • 与场景交互:UI 元素可以与其他 3D 对象进行交互,可以被其他 3D 对象遮挡或通过摄像机的投影显示。
  • 需要考虑遮挡和光照:UI 元素的显示可能会受到场景光照的影响,并且它们可能会被其他 3D 对象遮挡。

3.3 适用场景

  • 适用于游戏中的 3D UI 或 AR/VR 场景。例如:在 3D 游戏中,UI 元素显示在场景中的物体旁边或者浮动在物体上方。
  • 在需要在 3D 空间中定位并显示 UI 的场景中使用,例如 AR 中的标签或 VR 游戏中的交互面板。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6613.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafak 单例生产者实现-C#操作

前面写了一篇入门操作的文章,因为工作需要,简单修改了下如何实现单例生产者。 Kafka入门-C#操作_c# kafka-CSDN博客文章浏览阅读1.6k次,点赞20次,收藏9次。2).报错:“kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state…

第五天 Labview数据记录(5.1 INI配置文件读写)

5.1 INI配置文件读写 INI配置文件是一种简单的文本文件,通常用于存储软件的配置信息。它具有以下作用: 存储软件配置参数方便软件的维护和更新提高软件的灵活性和可扩展性便于用户修改和共享配置 5.1.1 前面板 1)新建项目SaveData_Exampl…

自动化01

测试用例的万能公式:功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能),将产品的整体进行测试,人工创造一个自动化测试用例,在n个版本的时候…

ElasticSearch(十一)— Elasticsearch中的SQL语句

一、总概 Elasticsearch 在 Basic 授权中支持以 SQL 语句的形式检索文档,SQL 语句在执行时会被翻译为 DSL 执行。从语法的角度来看,Elastisearch 中的 SQL 语句与RDBMS 中的 SQL 语句基本一致, 所以对于有数据库编程基础的人来说大大降低了使…

详解Redis的Zset类型及相关命令

目录 Zset简介 ZADD ZCARD ZCOUNT ZRANGE ZREVRANGE ZRANGEBYSCORE ZPOPMAX BZPOPMAX ZPOPMIN BZPOPMIN ZRANK ZREVRANK ZSCORE ZREM ZREMRANGEBYRANK ZREMRANGEBYSCORE ZINCRBY ZINTERSTORE 内部编码 应用场景 Zset简介 有序集合相对于字符串、列表、哈希…

【技术洞察】2024科技绘卷:浪潮、突破、未来

涌动与突破 2024年,科技的浪潮汹涌澎湃,人工智能、量子计算、脑机接口等前沿技术如同璀璨星辰,方便了大家的日常生活,也照亮了人类未来的道路。这一年,科技的突破与创新不断刷新着人们对未来的想象。那么回顾2024年的科…

缓存商品、购物车(day07)

缓存菜品 问题说明 问题说明:用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 结果: 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据,减少数据库查询…

09_异步加载_单例模式_常量类配置_不可销毁

1.首先在 资源加载服务层ResSvc.cs中添加 自定义异步加载函数 using UnityEngine; using UnityEngine.SceneManagement; //异步加载 命名空间 //功能 : 资源加载服务 public class ResSvc : MonoBehaviour{public void InitSvc(){Debug.Log("Init ResSvc...");}//自定…

【Redis】事务

前言: 对比MySQL事务:【MySQL篇】事务的认识以及四大特性-CSDN博客 弱化的原子性: redis 没有 "回滚机制". 只能做到这些操作 "批量执行". 不能做到 "一个失败就恢复到初始状态". 不保证一致性: 不涉及 "约束". 也没有…

深度学习|表示学习|卷积神经网络|通道 channel 是什么?|05

如是我闻: 在卷积神经网络(CNN)中,channel(通道) 是指输入或输出数据的深度维度,通常用来表示输入或输出的特征类型。 通道的含义 输入通道(Input Channels):…

K8S 集群搭建和访问 Kubernetes 仪表板(Dashboard)

一、环境准备 服务器要求: 最小硬件配置:2核CPU、4G内存、30G硬盘。 服务器可以访问外网。 软件环境: 操作系统:Anolis OS 7.9 Docker:19.03.9版本 Kubernetes:v1.18.0版本 内核版本:5.4.203-…

网络(三) 协议

目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…

用Python绘制一只懒羊羊

目录 一、准备工作 二、Turtle库简介 三、绘制懒羊羊的步骤 1. 导入Turtle库并设置画布 2. 绘制头部 3. 绘制眼睛 4. 绘制嘴巴 5. 绘制身体 6. 绘制四肢 7. 完成绘制 五、运行代码与结果展示 六、总结 在这个趣味盎然的技术实践中,我们将使用Python和Turtle图形…

【C语言】预处理详解

他们想要逃避工作的压迫,却又被功绩社会深植的价值观绑架。 预定义符号 1. C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 1 __FILE__ //进⾏编译的源⽂件 2 __LINE__ //⽂件当前的⾏号 3 __DATE__ //⽂件被编…

探秘差分数组:算法星河中闪耀的区间掌控之星

本篇鸡汤:夜深人静,正是你追梦的时刻。熬过这段孤独,未来会因你而闪亮! 探索新知,点亮智慧!关注我,一起成长,点赞收藏不迷路! 欢迎拜访&…

Ubuntu环境 nginx 源码 编译安装

ubuntu 终端 使用 wget 下载源码 sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz解压刚下载的源码压缩包 nginx-1.24.0.tar.gz sudo tar -zxvf nginx-1.24.0.tar.gz 解压完成 产生 nginx-1.24.0 目录 进入该目录 cd ./nginx-1.24.0 目录下有一个可执行文件 con…

linux如何修改密码,要在CentOS 7系统中修改密码

要在CentOS 7系统中修改密码,你可以按照以下步骤操作: 步骤 1: 登录到系统 在登录提示符 localhost login: 后输入你的用户名。输入密码并按回车键。 步骤 2: 修改密码 登录后,使用 passwd 命令来修改密码: passwd 系统会提…

C# volatile 使用详解

总目录 前言 在多线程编程中,确保线程之间的正确同步和可见性是一个关键挑战。C# 提供了多种机制来处理这些挑战,其中之一就是 volatile 关键字。它用于指示编译器和运行时环境不要对特定变量进行某些优化,以保证该变量的读写操作是线程安全…

[Unity 热更方案] 使用Addressable进行打包管理, 使用AssetBundle进行包的加载管理.70%跟练

在正常的开发过程中我们经常遇到一些关于热更的方案,有一些已有的方案供我们选择,但是实机情况往往不尽如人意,各有优缺点. 现在我们同样有一个热更的需求,但是要求打包简单,加载过程可查,防止出现一些资源和流程的问题. 下面介绍我在项目中使用的方案. 打包方面使用Addressabl…

Flink运行时架构

一、系统架构 1)作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。 JobManger又包含3个不同的组件。 &am…