MRTK2 標準著色器

標準著色器範例

MRTK2 標準網底系統利用單一彈性著色器,可達到與 Unity 標準著色器類似的視覺效果、實作Fluent Design 系統原則,並在混合實境裝置上保持高效能。

範例場景

您可以在 的 MaterialGallery 場景中 MRTK/Examples/Demos/StandardShader/Scenes/ 找到著色器材質範例。 此場景中的所有材質都使用 MRTK/標準著色器。

材料庫

您可以在 的 StandardMaterialComparison 場景中 MRTK/Examples/Demos/StandardShader/Scenes/ ,找到比較場景,以比較及測試 MRTK/Standard 著色器與 Unity/Standard 著色器範例。

材質比較

架構

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

材質偵測器

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

材質偵測器

偵測器的第一個部分會控制材質的轉譯狀態。 轉譯模式 會決定材質的呈現時機和方式。 MRTK/標準著色器的目標是要鏡像 Unity/標準著色器中找到的轉譯模式。 MRTK/標準著色器也包含 加總 轉譯模式和 自訂 轉譯模式,以用於完整的使用者控制項。

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

轉譯模式

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

效能

透過 Unity 標準著色器使用 MRTK 標準著色器的主要優點之一是效能。 MRTK 標準著色器可擴充,只能利用啟用的功能。 不過,MRTK 標準著色器也已撰寫來提供與 Unity 標準著色器類似的美觀結果,但成本較低。 比較著色器效能的其中一個簡單方式是透過需要在 GPU 上執行的作業數目。 當然,計算的大小可能會因啟用的功能和其他轉譯組態而變動。 但一般而言,MRTK 標準著色器的執行效能明顯小於 Unity 標準著色器。

Unity 標準著色器統計資料範例

Unity 標準著色器統計資料

MRTK 標準著色器統計資料範例

MRTK 標準著色器統計資料

注意

選取和檢視 Unity 偵測器中的 著色器資產 ,然後按一下 [ 編譯並顯示程式碼 ] 按鈕,即可產生這些結果。

光源

MRTK/Standard 會針對光源使用簡單的近似值。 由於此著色器不會計算實體正確性和能源消耗,因此會快速且有效率地呈現。 Blinn-Phong是與 Fresnel 和影像型光源混合的主要光源技術,以近似實體為基礎的光源。 著色器支援下列光源技術:

定向光線

如果啟用) ,著色器將會遵守場景中第一個 Unity 方向光線的方向、色彩和強度 (。 動態點光源、現成燈或任何其他 Unity 光線都不會被視為即時光源。

球面調色

如果 啟用,著色器會使用光探查來近似場景中的光線。 每個頂點會執行球面調音計算,以減少計算成本。

Lightmapping

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

暫留光線

鄰近光線

輕量型可編寫腳本的轉譯管線支援

MRTK 包含升級路徑,可讓開發人員利用 Unity 的輕量型可編寫腳本轉譯管線 (LWRP) 與 MRTK 著色器。 在 Unity 2019.1.1f1 和輕量型 RP 5.7.2 套件中測試。 或開始使用 LWRP 的指示,請參閱 此頁面

若要執行 MRTK 升級,請選取:Mixed Reality工具組 - 公用程式 - >> 升級輕量轉譯管線的 MRTK 標準著色器

lwrp 升級

升級發生之後,MRTK/標準著色器將會改變,而且應該修正任何 magenta (著色器錯誤) 材質。 若要確認升級成功發生,請檢查主控台中是否有 :Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader 以搭配輕量轉譯管線使用。

UGUI 支援

MRTK 標準網底系統適用于 Unity 的內建 UI 系統。 在 Unity UI 元件上,unity_ObjectToWorld矩陣不是圖形元件所在的本機轉換矩陣,而是其父 Canvas 的轉換矩陣。 許多 MRTK/標準著色器效果都需要知道物件縮放比例。 若要解決此問題,將會 ScaleMeshEffect.cs 在 UI 網格建構期間將縮放資訊儲存到 UV 通道屬性中。

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

MRTK 內的畫布會在需要時提示新增 ScaleMeshEffect.cs

縮放網格效果

紋理組合器

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

通道地圖範例

當您使用通道封裝時,只需要取樣一個紋理,並將一個紋理載入記憶體中,而不是四個不同的紋理。 當您將紋理貼圖撰寫在一個像是「元素」或「Photoshop」等程式中時,您可以像下面這樣手動封裝它們:

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

或者,您可以使用 MRTK 紋理組合器工具。 若要開啟此工具,請選取:Mixed Reality工具組 - 公用程式 - >> 紋理合併器,這會開啟下列視窗:

紋理組合器範例

選取 Unity 標準著色器,然後按一下 [從標準材質自動填入],即可自動填入此視窗。或者,您可以手動指定每個紅色、綠色、藍色或 Alpha 色板的紋理 (或常數值) 。 紋理組合是 GPU 加速,不需要輸入紋理才能存取 CPU。

其他功能檔

以下是 MRTK/標準著色器提供之少數功能詳細資料的額外詳細資料。

基本裁剪

基本裁剪

網格外框

許多網格外框技術都是使用 後置處理 技術來完成。 後置處理提供絕佳的品質大綱,但在許多Mixed Reality裝置上可能非常昂貴。 您可以在 底下的 OutlineExamples 場景中,找到示範網格外框使用方式的場景 MRTK/Examples/Demos/StandardShader/Scenes/

網格外框

MeshOutline.csMeshOutlineHierarchy.cs 可用來呈現網格轉譯器周圍的外框。 啟用此元件會引進要概述之物件的額外轉譯階段,但設計目的是要以高效能方式在行動裝置Mixed Reality裝置上執行,而且不會利用任何後置進程。 此效果的限制包括它不適用於非水力 (的物件,或必須是兩側式) ,而且重迭物件上可能會發生深度排序問題。

大綱行為的設計目的是要與 MRTK/標準著色器搭配使用。 外框材質通常是純色不亮的色彩,但可以設定為達到廣泛的效果。 大綱材質的預設組態如下所示:

網格外框材質
  1. 深度寫入 - 應該停用大綱材質,以確保大綱不會防止其他物件轉譯。
  2. 頂點立體化 - 必須啟用才能呈現外框。
  3. 使用 Smooth Normals - 此設定對某些網格而言是選擇性的。 立體化是沿著頂點法線移動頂點,在某些網格上沿著預設法線立體化會導致外框不連續。 若要修正這些不連續情況,您可以核取此方塊,以使用另一組平滑的正常值,由 產生 MeshSmoother.cs

MeshSmoother.cs 是元件,可用來在網格上自動產生平滑法線。 此方法會將網格中的頂點群組在空間中共用相同位置的頂點,然後平均這些頂點的常態。 此程式會建立基礎網格的複本,而且只有在需要時才應該使用。

平滑法線外框
  1. 透過 MeshSmoother.cs 產生的平滑法線。
  2. 使用的預設常態,請注意 Cube 角落周圍的成品。

樣板測試

內建可設定的樣板測試支援,以達到各種效果。 例如入口網站:

樣板測試

實例色彩支援

實例色彩支援,以提供數千個 GPU 實例網格的唯一材質屬性:

實例屬性

Triplanar 對應

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

triplanar

頂點立體化

世界空間中的頂點立體化。 適用于視覺化立體周框磁片區或傳入/輸出網格的轉換。

一般地圖示尺 1

其他

控制 albedo 優化的核取方塊。 未指定 albedo 紋理時,會停用優化 albedo 作業。 這適用于控制 遠端紋理載入

只要核取此方塊:

albedo 指派

支援每個圖元裁剪紋理、本機邊緣型反鋸齒,以及一般地圖縮放比例。

一般地圖縮放比例 2

另請參閱