共用方式為


MRTK2 標準著色器

Standard 著色器範例

MRTK2 Standard 著色系統採用單一且靈活的著色器,能實現類似 Unity 的 Standard 著色器視覺效果,實現 Fluent Design 系統原則,並能在混合實境裝置上保持良好效能。

範例場景

你可以在 MaterialGallery 場景 MRTK/Examples/Demos/StandardShader/Scenes/中找到著色器材質範例。 這個場景中的所有材質都使用 MRTK/Standard 著色器。

資料集

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

材料比較

架構

MRTK/Standard 著色系統是一個「超級著色器」,利用 Unity 的著色器程式變體功能,根據材質屬性自動產生最佳著色器程式碼。 當使用者在材料檢查器中選擇材料屬性時,他們只會對已啟用的功能產生效能成本。

材料檢查員

MRTK/Standard 著色器有一個自訂材質檢查器,稱為 MixedRealityStandardShaderGUI.cs。 檢查器會根據使用者選擇自動啟用或停用著色器功能,並協助設定渲染狀態。 欲了解更多關於每個功能的資訊 ,請在 Unity 編輯器中將滑鼠移到每個屬性上方,查看提示。

材料檢查員

檢查器的第一部分控制材質的渲染狀態。 渲染模式決定 材質何時以及如何被渲染。 MRTK/Standard 著色器的目標是鏡像 Unity/Standard 著色器的渲染模式。 MRTK/Standard 著色器還包含加法渲染模式與自訂渲染模式,供使用者完全控制。

渲染模式 描述
不透明 (預設) 適用於沒有透明區域的普通實體物件。
切影 允許創造透明效果,並在不透明區域之間形成硬邊。 此模式中沒有半透明區域,材質要麼是100%不透明,要麼是隱形。 這在利用透明度來塑造材料形狀(如植被)時非常有用。
淡出 允許透明度值完全淡出物件,包括任何鏡面高光或反射。 如果你想讓物件的淡入或淡出動畫,這個模式很有用。它不適合呈現逼真的透明材質,如透明塑膠或玻璃,因為反射和高光也會被淡化。
透明 適合呈現逼真的透明材質,如透明塑膠或玻璃。 在此模式下,材質本身會根據材質的 alpha 通道和色調顏色) 的透明度值 (。 然而,反射與光線高光仍會像真實透明材質一樣,在全清晰時保持可見。
Additive 啟用加法混合模式,將先前的像素顏色與當前像素顏色相加。 這是避免透明度排序問題的首選透明模式。
自訂 允許渲染模式的每個面向都能手動控制。 僅限進階使用者使用。

渲染模式

剔除模式 描述
關閉 禁止面孔淘汰。 只有在需要雙面網格時,剔除才應該設為關閉。
正面 啟用前面板剔除。
上一步 (預設) 啟用 背面剔除。 應盡可能啟用背面剔除以提升渲染效能。

效能

使用 MRTK Standard 著色器相較於 Unity 標準著色器的主要優勢之一是效能。 MRTK Standard Shader 可擴充,僅使用啟用的功能。 然而,MRTK Standard 著色器也被設計成能提供與 Unity Standard 著色器相當的美學效果,但成本大幅降低。 比較著色器效能的一個簡單方法是透過 GPU 需要執行的操作數量來比較。 當然,計算量可能會因啟用的功能或其他渲染配置而有所波動。 但一般而言,MRTK Standard 著色器執行的計算量明顯少於 Unity Standard 著色器。

Unity Standard 著色器統計範例

Unity Standard 著色器統計

MRTK Standard 著色器統計範例

MRTK Standard 著色器統計

注意事項

這些結果可透過在 Unity 檢查器中選取並檢視著 色器資產 ,然後點擊 「編譯並顯示程式碼 」按鈕來產生。

光線

MRTK/Standard 使用簡單的照明近似方法。 由於此著色器不計算物理正確性與節能性,因此渲染速度快速且有效率。 Blinn-Phong 是主要的照明技術,結合菲涅耳光和影像光照,以近似物理光源。 著色器支援以下光照技術:

定向光

如果啟用) ,著色器會尊重場景 (中第一個 Unity 定向光的方向、顏色和強度。 動態點光、聚光燈或其他 Unity 光源不會被納入即時光源。

球面泛音

著色器會使用光探針(Light Probes)來近似場景中的光源,使用球 諧(Spherical Harmonics)來模擬場景中的光源(如果啟用的話)。 每個頂點進行球諧計算以降低計算成本。

光照貼圖

對於靜態光照,著色器會尊重 Unity 光 照貼圖系統所建立的光照貼圖。 只要將渲染器標記為靜態 (或光照貼圖靜態) 即可使用光照貼圖。

懸浮燈

近距光

輕量級可腳本渲染管線支援

MRTK 包含升級路徑,允許開發者使用 Unity 的輕量級可腳本渲染管線 (LWRP) 搭配 MRTK 著色器。 在 Unity 2019.1.1f1 和 Lightweight RP 5.7.2 套件中測試過。 關於如何開始使用LWRP的說明,請參閱 此頁面

要執行 MRTK 升級,請選擇:Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline

LWRP升級

升級完成後,MRTK/Standard 著色器會被修改,任何品紅色 (著色器) 材質錯誤都應該被修正。 要確認升級是否成功,請檢查主控台上的: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader,以便搭配輕量級渲染管線使用。

UGUI 支援

MRTK Standard 著色系統可搭配 Unity 內建的 UI 系統。 在 Unity UI 元件中,unity_ObjectToWorld矩陣不是圖形元件所依賴的本地轉換轉換矩陣,而是其父 Canvas 的轉換矩陣。 許多 MRTK/Standard 著色器效果需要已知物件縮放。 為了解決這個問題,會在 ScaleMeshEffect.cs UI 網格建構時將縮放資訊儲存到 UV 通道屬性中。

請注意,使用 Unity Image 元件時,建議在來源映像中指定「無 (精靈) 」,以防止 Unity UI 產生額外頂點。

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

縮尺網格效果

貼圖組合器

為了提升與 Unity Standard 著色器每像素金屬的奇偶性,平滑度、發射率和遮蔽值都可以透過通道打包來控制。 例如:

航道地圖範例

使用通道打包時,你只需要取樣並載入一個貼圖到記憶體,而不是四個獨立的貼圖。 當你在像 Substance 或 Photoshop 這類程式中撰寫貼圖時,你可以手動打包,像以下這樣:

通道 Property
紅色 金屬
綠色 遮蔽
藍色 灰階 (發射)
阿爾法 平滑度

或者,你也可以使用 MRTK 的貼圖組合工具。 要開啟工具,請選擇:Mixed Reality Toolkit -> Utilities -> Texture Combiner,會開啟以下視窗:

貼圖組合器範例

此視窗可透過選擇 Unity Standard 著色器並點擊「從 Standard 材質自動填充」自動填滿。或者,你也可以手動指定每個紅、綠、藍或 alpha 通道的貼圖 (或常數值) 。 材質組合由 GPU 加速,且不要求輸入材質必須是 CPU 可存取的。

額外功能文件

以下是關於 MRTK/Standard 著色器部分功能細節的額外細節。

原始截波

原始裁剪

網格輪廓

許多網格輪廓技術是透過 後製技術 完成的。 後製提供高品質的大綱,但在許多Mixed Reality裝置上可能成本過高。 你可以在 OutlineExamples 場景中找到一個展示網格輪廓使用方法的場景。MRTK/Examples/Demos/StandardShader/Scenes/

網格輪廓

MeshOutline.cs MeshOutlineHierarchy.cs並可用於在網格渲染器周圍渲染輪廓。 啟用此元件會引入被勾勒物件的額外渲染通道,但設計上能在行動Mixed Reality裝置上效能執行,且不使用任何後製處理。 此效應的限制包括對非水密 (或非雙面) 物體不佳,且重疊物體可能產生深度排序問題。

輪廓行為設計為與 MRTK/Standard 著色器搭配使用。 輪廓材質通常是純色且未打光,但可配置以達成多種效果。 輪廓材質的預設配置如下:

網格輪廓材質
  1. 深度寫入 - 應該關閉輪廓材質,以確保輪廓不會阻礙其他物件渲染。
  2. 頂點擠出 - 必須啟用才能渲染輪廓。
  3. 使用平滑法線——這個設定對某些網格來說是可選的。 擠出是透過沿著頂點法線移動頂點來產生的,在某些網格中,沿著預設法線的拉伸會導致輪廓出現不連續。 要修正這些不連續點,你可以勾選這個方塊,使用另一組平滑法線,這些法線會由 MeshSmoother.cs

MeshSmoother.cs 是一個元件,可以用來自動在網格上產生平滑法線。 此方法將網格中共享空間相同位置的頂點分組,然後對這些頂點的法線進行平均。 此過程會建立底層網格的副本,僅在必要時使用。

平滑法線大綱
  1. 平滑法線由 MeshSmoother.cs生成。
  2. 預設法線使用,注意立方體角落周圍的瑕疵。

模板測試

內建可配置模板測試支援,實現多種效果。 例如傳送門:

模板測試

實例化色彩支援

支援實例色彩,賦予數千個 GPU 實例網格獨特的材質屬性:

實例化屬性

三平面映射

三平面映射是一種程式化貼圖網格的技術。 常用於地形、無 UV 的網格,或難以展開形狀的環境。 此實作支援世界或局部空間投影、混合平滑度的指定,以及法線貼圖支援。 注意,每個材質需要 3 個材質樣本,因此在效能關鍵情況下請節制使用。

三面平面

頂點擠出

世界空間中的頂點擠出。 對於視覺化擠出包圍體或進出網格的過渡很有用。

法線貼圖縮尺 1

雜項

一個用來控制反照率優化的勾選框。 作為優化,當未指定反照紋理時,反照率操作會被禁用。 這對於控制 遠端貼圖載入很有用。

只要勾選這個方塊:

反照率指派

支援每像素裁切貼圖、本地邊緣抗鋸齒,以及法線貼圖縮放。

法線貼圖縮放 2

另請參閱