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 標準著色器統計資料範例

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/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.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

另請參閱