淺談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.pswp.cn/web/66910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66910.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity中在UI上畫線

在UI中畫一條曲線 我封裝了一個組件,可以實現基本的畫線需求. 效果 按住鼠標左鍵隨手一畫. 用起來也很簡單,將組件掛到空物體上就行了,紅色的背景是Panel. 你可以將該組件理解為一個Image,只不過形狀更靈活一些罷了,所以它要放在下面的層級(不然可能會被擋住). 代碼 可以…

2024.1.22 安全周報

政策/標準/指南最新動態 01 工信部印發《關于加強互聯網數據中心客戶數據安全保護的通知》 原文: https://www.secrss.com/articles/74673 互聯網數據中心作為新一代信息基礎設施,承載著千行百業的海量客戶數據,是關系國民經濟命脈的重要戰略資源。…

探索 LLM:從基礎原理到 RAG 實現的深度解析

一.LLM基礎知識 1.1 大語言模型(Large Language Model,LLM) 他是模型,是 AI 能力的核心。他是語言模型,其核心能力在于語言能力。他是大語言模型,與傳統模型相比,它最大的特點就是“大”。 1…

Mac cursor設置jdk、Maven版本

基本配置 – Cursor 使用文檔 首先是系統用戶級別的設置參數,運行cursor,按下ctrlshiftp,輸入Open User Settings(JSON),在彈出的下拉菜單中選中下面這樣的: 在打開的json編輯器中追加下面的內容: {"…

ARM64平臺Flutter環境搭建

ARM64平臺Flutter環境搭建 Flutter簡介問題背景搭建步驟1. 安裝ARM64 Android Studio2. 安裝Oracle的JDK3. 安裝 Dart和 Flutter 開發插件4. 安裝 Android SDK5. 安裝 Flutter SDK6. 同意 Android 條款7. 運行 Flutter 示例項目8. 修正 aapt2 報錯9. 修正 CMake 報錯10. 修正 N…

selenium clear()方法清除文本框內容

在使用Selenium進行Web自動化測試時,清除文本框內容是一個常見的需求。這可以通過多種方式實現,取決于你使用的是哪種編程語言(如Python、Java等)以及你的具體需求。以下是一些常見的方法: 1. 使用clear()方法 clear…

基于海思soc的智能產品開發(視頻的后續開發)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 前面我們討論了camera,也討論了屏幕驅動,這些都是基礎的部分。關鍵是,我們拿到了這些視頻數據之后,…

vue3+webOffice合集

1、webOffice 初始化 1)officeType: 文檔位置:https://solution.wps.cn/docs/web/quick-start.html#officetype 2)appId: 前端使用appId 后端需要用到AppSecret 3)fileId: 由后端返回,前端無法生成,與上傳文…

2025牛客寒假算法營2

A題 知識點&#xff1a;模擬 打卡。檢查給定的七個整數是否僅包含 1,2,3,5,6 即可。為了便于書寫&#xff0c;我們可以反過來&#xff0c;檢查這七個整數是否不為 4 和 7。 時間 O(1)&#xff1b;空間 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…

記錄一次k8s起不來的排查過程

我在k8s集群&#xff0c;重啟了一個node宿主機&#xff0c;竟然發現kubelet起不來了&#xff01;報錯如下 這個報錯很模糊&#xff0c;怎么排查呢。這樣&#xff0c;開兩個界面&#xff0c;一個重啟kubelet&#xff0c;一個看系統日志(/var/log/message:centos&#xff0c;/va…

Docker Desktop 在Windows 環境中開發、測試和運行容器化的應用程序

Docker 為 Windows 提供了專門的桌面版工具&#xff0c;稱為 Docker Desktop&#xff0c;它允許你在 Windows 環境中開發、測試和運行容器化的應用程序。 如何在 Windows 上使用 Docker Docker Desktop Docker Desktop 是一個專為 Windows 設計的應用程序&#xff0c;它簡化了…

仿 RabbitMQ 的消息隊列3(實戰項目)

七. 消息存儲設計 上一篇博客已經將消息統計文件的讀寫代碼實現了&#xff0c;下一步我們將實現創建隊列文件和目錄。 實現創建隊列文件和目錄 初始化 0\t0 這樣的初始值. //創建隊列對應的文件和目錄&#xff1a;public void createQueueFile(String queueName) throws IO…

HTTP 配置與應用(局域網)

想做一個自己學習的有關的csdn賬號&#xff0c;努力奮斗......會更新我計算機網絡實驗課程的所有內容&#xff0c;還有其他的學習知識^_^&#xff0c;為自己鞏固一下所學知識&#xff0c;下次更新HTTP 配置與應用&#xff08;不同網段&#xff09;。 我是一個萌新小白&#xf…

root用戶Linux銀河麒麟服務器安裝vnc服務

安裝必要桌面環境組件 yum install mate-session-manager -y mate-session #確定是否安裝成功安裝vnc服務器 yum install tigervnc-server -y切換到root為root得vnc設置密碼 su root vncpasswd給root用戶設置vnc服務器文件 vi /etc/systemd/system/vncserver:1.service [Un…

理解深度學習pytorch框架中的線性層

文章目錄 1. 數學角度&#xff1a; y W x b \displaystyle y W\,x b yWxb示例 2. 編程實現角度&#xff1a; y x W T b \displaystyle y x\,W^T b yxWTb3. 常見錯誤與易混點解析4. 小結參考鏈接 在神經網絡或機器學習的線性層&#xff08;Linear Layer / Fully Connect…

C#Object類型的索引,序列化和反序列化

前言 最近在編寫一篇關于標準Mes接口框架的文章。其中有一個非常需要考究的內容時如果實現數據靈活和可使用性強。因為考慮數據靈活性&#xff0c;所以我一開始選取了Object類型作為數據類型&#xff0c;Object作為數據Value字段&#xff0c;String作為數據Key字段&#xff0c…

大模型應用與部署 技術方案

大模型應用與部署 技術方案 一、引言 人工智能蓬勃發展,Qwen 大模型在自然語言處理領域地位關鍵,其架構優勢盡顯,能處理文本創作等多類復雜任務,提供優質交互。Milvus 向量數據庫則是向量數據存儲檢索利器,有高效索引算法(如 IVF_FLAT、HNSWLIB 等)助力大規模數據集相似…

【Prometheus】Prometheus如何監控Haproxy

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

C# 控制打印機:從入門到實踐

在開發一些涉及打印功能的應用程序時&#xff0c;使用 C# 控制打印機是一項很實用的技能。這篇文章就來詳細介紹下如何在 C# 中實現對打印機的控制。 一、準備工作 安裝相關庫&#xff1a;在 C# 中操作打印機&#xff0c;我們可以借助System.Drawing.Printing命名空間&#x…

Go語言中的值類型和引用類型特點

一、值類型 值類型的數據直接包含值&#xff0c;當它們被賦值給一個新的變量或者作為參數傳遞給函數時&#xff0c;實際上是創建了原值的一個副本。這意味著對新變量的修改不會影響原始變量的值。 Go中的值類型包括&#xff1a; 基礎類型&#xff1a;int&#xff0c;float64…