圖形工具標準著色器 — MRTK3

圖形工具標準網底系統利用彈性著色器,可達到與 Unity 標準 (或 Lit) 著色器類似的視覺效果。 它會實作Fluent Design 系統原則,並在混合實境裝置上維持高效能。

標準著色器材質庫範例

範例

如需圖形工具/標準著色器變體的多個示範,請參閱材質庫範例。 如需 圖形工具/標準畫布的範例,請參閱 UnityUI 範例

架構

圖形工具/標準網底系統是「uber 著色器」,使用 Unity 的著色器程式變體功能 ,根據材質屬性自動產生最佳著色器程式碼。 當使用者在材質偵測器中選取材質屬性時,他們只會針對已啟用的功能產生效能成本。

為了更妥善支援傳統 Unity 工作流程和 UnityUI (畫布) 工作流程,圖形工具/標準陰影系統有兩個著色器進入點:

Context 預設 UnityUI
名稱 圖形工具/標準 圖形工具/標準畫布
著色器 GraphicsToolsStandard GraphicsToolsStandardCanvas

這兩個著色器大部分都相同,因為它們共用常見的著色器程式碼包含。 圖形工具/標準畫布包含 UnityUI 特定的一些額外邏輯。

下列著色器包含圖形工具/標準網底系統的電源:

包含 目的
GraphicsToolsStandardProgram 包含核心實作) (頂點和片段著色器進入點方法。
GraphicsToolsStandardMetaProgram 包含 Unity 用於靜態光源的頂點和片段著色器進入點方法, (執行時間) 未使用。
GraphicsToolsStandardInput 頂點屬性、頂點插補器、紋理、紋理取樣器、每個材質常數緩衝區、全域屬性和常數的定義。
GraphicsToolsCommon 可重複使用的方法和定義。

轉譯管線支援

Unity 有幾個 轉譯管線 可供開發人員挑選。 圖形工具標準網底系統的設計目的是要自動使用 Unity 的內建轉譯管線或 通用轉譯管線 (URP) 。 不需要根據管線切換著色器。 以下是支援矩陣:

管線 支援 例外狀況
內建轉譯管線 不支援壓克力「模糊模式」。
通用轉譯管線 (URP)
高畫質轉譯管線 (HDRP)
自訂轉譯管線 支援取決於管線的建置方式。

UnityUI 支援

圖形工具標準網底系統適用于 Unity 的內建 UI 系統 ,稱為 UnityUIGraphics Tools/Standard Canvas應該用於 UnityUI 畫布內的所有材質。

圖形工具內的Canvas 或 CanvasRenderer會在需要時提示新增 ScaleMeshEffect.cs

縮放網格效果偵測器警告

在 UnityUI 元件上 unity_ObjectToWorld ,矩陣 (或 UNITY_MATRIX_M URP) 不是圖形元件所在的本機轉換矩陣,而是其父 Canvas 的轉換矩陣。 許多 圖形工具/標準畫布 著色器效果都需要知道物件縮放比例。 若要解決此問題,將會 ScaleMeshEffect.cs 在 UI 網格建構期間將縮放資訊儲存到 UV 通道屬性中。

提示

使用 Unity 映射元件時,建議為來源映射指定「無 (Sprite) 」,以防止 Unity UI 產生額外的頂點。

材質偵測器

圖形工具/標準和圖形工具/標準畫布著色器有自訂材質偵測器,稱為StandardShaderGUI.cs。 偵測器會根據使用者選取和協助設定轉譯狀態,自動啟用/停用著色器功能。 如需每個功能將 滑鼠停留在工具提示的 Unity 編輯器中每個屬性的詳細資訊。

注意

偵測器 UI 是動態的。 UI 的部分會在啟用和停用功能時變更。

圖形工具/標準材質偵測器

偵測器可以分成幾個功能區域,如下所述。

轉譯模式

偵測器的第一個部分會控制材質的轉譯狀態。 轉譯模式 會決定材質的呈現時機和方式。 和 著色器的目標是 Graphics Tools/Standard 要鏡像Unity/標準著色器中找到的轉譯模式Graphics Tools/Standard Canvas 圖形工具/標準和圖形工具/標準畫布著色器也包含加法轉譯模式和自訂轉譯模式,以取得完整的使用者控制項。

轉譯模式 描述
Opaque (預設) 適用于沒有透明區域的一般實心物件。
剪影 允許建立在不透明和透明區域之間具有硬邊緣的透明效果。 在此模式中,沒有半透明區域、紋理為 100% 不透明或不可見。 當使用透明度來建立材質的形狀時,這非常有用,例如擷取。
淡化 允許透明度值完全淡出物件,包括它可能擁有的任何反射醒目提示或反射。 如果您想要讓物件淡入或淡出動畫效果,此模式非常有用。它不適合轉譯逼真的透明材質,例如清楚的玻璃或玻璃,因為反射和醒目提示也會淡出。
透明 適用于轉譯逼真的透明材質,例如清楚的玻璃或玻璃。 在此模式中,材質本身會根據紋理的 Alpha 色板和色調色彩的 Alpha) ,採用透明度值 (。 不過,反射和光源醒目提示會以完全清楚的方式保持可見,就像是真實透明材質的情況一樣。
加法 啟用加法混合模式,以目前圖元色彩加總前一個圖元色彩。 這是避免透明度排序問題的慣用透明度模式。
Custom 允許手動控制轉譯模式的每個層面。 僅供進階使用。

轉譯模式範例行列

Cull 模式

Cull 模式 描述
關閉 停用臉部擷取。 只有在需要兩個側邊網格時,才應該將 [擷取] 設定為 [關閉]。
Front 啟用正面擷取。
上一步 (預設) 啟用 背面擷取。 應該盡可能啟用後端擷取,以改善轉譯效能。

主要地圖

本節的主要功能是控制材質的 albedo 色彩和 實體轉譯 選項。

若要改善每個圖元的 Unity 標準著色器同位、平滑度、光暈和遮蔽值,都可以透過 通道封裝來控制。

當您使用通道封裝時,只需要將一個紋理取樣並載入記憶體中,而不是四個不同的紋理。 當您將紋理貼圖撰寫在一個程式上時,您可以像下列專案一樣手動封裝:

通路 屬性
紅色 金屬
綠色 遮蔽
藍色 發出 (灰階)
Alpha 平滑

主要地圖區段也有 triplanar 對應和超級範例反別名的選項。 它也包含一旦選取 [發出] 核取方塊後,新增彩色發出紋理地圖的選項。

Triplanar 對應是以程式設計方式紋理網格的技術。 它通常用於地形、沒有 UV 的網格,或難以解除包裝圖形。 此實作支援世界或區域空間投影、混合平滑度規格,以及一般地圖支援。 請注意,每個使用的紋理都需要三個紋理樣本,因此在效能關鍵情況下,請謹慎使用。

超級樣本反鋸齒 應該用於任何顯示圖示或影像的材質,其中詳細資料與距離很重要。

轉譯選項

轉譯選項主要是控制材質的光源設定。 此材質區段也包含一些其他功能,可控制表面的色彩、透明或位置。 如需光源的詳細資訊,請參閱 下方

光源比較

Fluent 選項

Fluent 是 Microsoft 產品中跨 UI 元件使用的設計架構。 本節包含幾個功能,可協助模擬任意介面上的 Fluent 設計系統原則。 如果您要尋找流暢的 Fluent 著色器,可以在 圖形工具/畫布圖形工具/非畫布 著色器命名空間中找到。

進階選項

類似于 Unity 內建著色器中的進階區段。 本節會控制轉譯順序,以及是否應該建置 GPU 執行個體變數。 此外,還有可設定的樣板測試支援以達到廣泛的效果。 例如入口網站:

入口網站範例

光源

圖形工具/標準和圖形工具/標準畫布著色器會使用簡單的光源近似值。 因為著色器不會計算實體正確性和能源消耗,所以它們會快速且有效率地轉譯。 Blinn-Phong 是使用的主要光源技術,並與 Fresnel 和影像型光源混合,以近似實際為基礎的光源。 著色器支援下列光源技術:

定向光線

如果啟用) ,著色器將會遵守場景中第一個 Unity 方向光線的方向、色彩和濃度 (。

重要

動態點光源、焦點或任何其他 Unity 光線都不會被視為即時光源。 目前不支援淺色遮罩。

球面調音

如果 啟用,著色器會使用光線探查來近似場景中的光線。

重要

球面調音計算會根據頂點執行,而且光線探查不會混合以降低計算成本。

Lightmapping

針對靜態光源,著色器會遵守 Unity 光源系統所建置的 光線對應。 將轉譯器標示為靜態 (或 lightmap 靜態) 以使用 lightmap。

效能

透過 Unity 標準著色器使用圖形工具標準網底系統的主要優點之一是效能。 圖形工具/標準和圖形工具/標準畫布著色器是建構成只利用啟用的功能。 不過,圖形工具/標準和圖形工具/標準畫布著色器也已撰寫,以提供與 Unity 標準著色器類似的美觀結果,但成本較低。 比較著色器效能的其中一個簡單方式是透過需要在 GPU 上執行的作業數目。 計算的大小可能會因啟用的功能和其他轉譯設定而變動。

提示

根據經驗法則,您應該在行動混合實境裝置上使用圖形工具標準著色器。內建著色器。 但是,使用 RenderDoc之類的工具來分析您的案例一定是明智的。

另請參閱