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/Standard 著色器的自訂材質偵測器存在,稱為 MixedRealityStandardShaderGUI.cs
。 偵測器會根據使用者選取專案自動啟用/停用著色器功能,並協助設定轉譯狀態。 如需每項功能的詳細資訊 ,請將滑鼠停留在 Unity 編輯器中工具提示的每個屬性上。
偵測器的第一個部分會控制材質的轉譯狀態。 轉譯模式 會決定材質的呈現時機和方式。 MRTK/標準著色器的目的是要鏡像 Unity/Standard 著色器中找到的轉譯模式。 MRTK/Standard 著色器也包含 加法 轉譯模式和 自訂 轉譯模式,用於完整的使用者控制項。
轉譯模式 | 描述 |
---|---|
Opaque | (預設) 適用于沒有透明區域的一般實心物件。 |
剪影 | 允許建立透明效果,這些效果在不透明和透明區域之間具有硬邊緣。 在此模式中,沒有半透明區域、紋理為 100% 不透明或不可見。 使用透明度來建立材質的形狀時,這非常有用,例如植物。 |
淡化 | 允許透明度值完全淡出物件,包括它可能擁有的任何反射醒目提示或反射。 如果您想要以動畫顯示物件淡入或縮小,此模式會很有用。它不適合轉譯實際的透明材質,例如透明玻璃或玻璃,因為反射和醒目提示也會淡出。 |
透明 | 適用于轉譯實際透明材質,例如透明玻璃或玻璃。 在此模式中,材質本身會採用透明度值, (根據紋理的 Alpha 色板和淡色) 的 Alpha。 不過,反射和光源醒目提示會以完全清楚的方式保持可見,如同實際透明材質的情況一樣。 |
加法 | 啟用加法混合模式,以目前圖元色彩加總先前的圖元色彩。 這是慣用的透明度模式,可避免透明度排序問題。 |
Custom | 允許手動控制轉譯模式的每個層面。 僅供進階使用。 |
Cull 模式 | 描述 |
---|---|
關閉 | 停用臉部擷取。 只有在需要兩個側邊網格時,才應該將 [擷取] 設定為 [關閉]。 |
Front | 啟用正面擷取。 |
上一步 | (預設) 啟用 背面擷取。 應該盡可能啟用後端擷取,以改善轉譯效能。 |
效能
透過 Unity 標準著色器使用 MRTK 標準著色器的主要優點之一是效能。 MRTK 標準著色器可延伸,只利用啟用的功能。 不過,MRTK 標準著色器也已撰寫,以提供與 Unity 標準著色器類似的美觀結果,但成本較低。 比較著色器效能的其中一個簡單方式是透過需要在 GPU 上執行的作業數目。 當然,計算的大小可能會因啟用的功能和其他轉譯設定而變動。 但是,一般而言,MRTK 標準著色器執行比 Unity 標準著色器還少的計算。
Unity 標準著色器統計資料範例
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 標準著色器
升級發生之後,將會改變 MRTK/Standard 著色器,而且應該修正任何放大 (著色器錯誤) 材質。 若要確認升級成功,請檢查主控台中是否有: 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 標準著色器同位、平滑度、光暈和遮蔽值,都可以透過 通道封裝來控制。 例如:
當您使用通道封裝時,只需要將一個紋理取樣並載入記憶體中,而不是四個不同的紋理。 當您將紋理貼圖撰寫在一個程式上時,您可以像下列專案一樣手動封裝:
通路 | 屬性 |
---|---|
紅色 | 金屬 |
綠色 | 遮蔽 |
藍色 | 發出 (灰階) |
Alpha | 平滑 |
或者,您可以使用 MRTK 紋理結合器工具。 若要開啟此工具,請選取:Mixed Reality工具組 - 公用程式 - >> 紋理合併器,這會開啟下列視窗:
選取 Unity 標準著色器並按一下 [從標準材質自動填入],即可自動填寫此視窗。或者,您可以手動指定每個紅色、綠色、藍色或 Alpha 色板的紋理 (或常數值) 。 紋理組合會加速 GPU,而且不需要輸入紋理才能存取 CPU。
其他功能檔
以下是 MRTK/標準著色器所提供的幾個功能詳細資料的額外詳細資料。
基本裁剪
- 請參閱 裁剪基本類型
網格外框
許多網格外框技術都是使用 後置處理 技術來完成。 後置處理提供絕佳的品質大綱,但在許多Mixed Reality裝置上可能非常昂貴。 您可以在 底下的 OutlineExamples 場景中找到示範網格外框使用方式的場景 MRTK/Examples/Demos/StandardShader/Scenes/
。
MeshOutline.cs
和 MeshOutlineHierarchy.cs
可用來呈現網格轉譯器周圍的外框。 啟用此元件會引進所概述物件的額外轉譯階段,但設計目的是要以高效能方式在行動裝置Mixed Reality裝置上執行,而且不會使用任何後置進程。 此效果的限制包括它不適用於非水 (的物件,或必須是兩側式) ,而深度排序問題可能會發生在重迭的物件上。
大綱行為的設計目的是要與 MRTK/標準著色器搭配使用。 外框材質通常是純色未亮色,但可以設定為達到廣泛的效果。 大綱材質的預設組態如下所示:
- 深度寫入 - 應該停用大綱材質,以確保外框不會防止其他物件轉譯。
- 頂點立體化 - 必須啟用才能呈現外框。
- 使用 Smooth Normals - 此設定對於某些網格而言是選擇性的。 立體化會沿著頂點法線移動頂點,而在某些網格上沿著預設常態進行立體化會導致外框不連續。 若要修正這些不連續的情況,您可以核取此方塊,以使用另一組平滑的正常值,而該常數是由
MeshSmoother.cs
MeshSmoother.cs
是一個元件,可用來在網格上自動產生平滑的常態。 此方法會將網格中的頂點群組在空間中共用相同位置的頂點,然後平均這些頂點的常態。 此程式會建立基礎網格的複本,而且只有在需要時才使用。
- 透過
MeshSmoother.cs
產生的平滑常態。 - 使用的預設常態,請注意 Cube 角落的成品。
樣板測試
內建可設定的樣板測試支援,以達到廣泛的效果。 例如入口網站:
實例色彩支援
實例色彩支援,以提供數千個 GPU 實例網格的唯一材質屬性:
Triplanar 對應
Triplanar 對應是以程式設計方式紋理網格的技術。 通常用於地形、沒有 UV 的網格,或難以解除包裝圖形。 此實作支援世界或區域空間投影、混合平滑度規格,以及一般地圖支援。 請注意,每個使用的紋理都需要 3 個紋理樣本,因此請謹慎地在效能關鍵情況下使用。
頂點立體化
世界空間中的頂點立體化。 適用于視覺化立體周框的磁片區或傳入/輸出網格的轉換。
其他
控制 albedo 優化的核取方塊。 當未指定 albedo 紋理時,會停用優化 albedo 作業。 這適用于控制 遠端紋理載入。
只要核取此方塊:
支援每個圖元裁剪紋理、本機邊緣型反別名,以及一般地圖縮放。