Unity 的建議設定
Unity 提供一組預設選項,通常是所有平臺的平均案例。 不過,Unity 提供一些可透過項目設定切換之混合實境特有的行為。
高效能環境設定
低質量設定
請務必將 Unity 品質設定修改為「非常低」,讓您的應用程式在適當的幀速率執行並執行良好,特別是針對 HoloLens 開發。 為了在沉浸式頭戴式裝置上進行開發,視桌面為 VR 體驗提供電源的規格而定,人們仍然可以在沒有最低質量參數的情況下達到幀速率。
在 Unity 2019 LTS+ 中,您可以移至 [編輯>專案 設定> Quality] 來設定項目的品質等級,然後按下向下箭號設定 [非常低品質] 層級的 [預設值]。
光源設定
與質量場景設定類似,請務必為混合實境應用程式設定最佳光源設定。 在 Unity 中,通常對您的場景有最大效能影響的光源設定是 即時全域照明。 您可以移至 [視窗>轉譯>光源]> 設定 [即時全域照明] 來關閉全域照明。
還有另一個照明設置, 烘焙全球照明。 此設定可在沉浸式頭戴式裝置上提供高效能且視覺上引人注目的結果,但不適用於 HoloLens 開發。 烘焙全域照明 只會針對靜態 GameObjects 計算,因為未知和不斷變化的環境的性質,在 HoloLens 場景中找不到。
如需詳細資訊,請參閱 Unity 的全域照明。
注意
即時全域照明是針對每個場景設定,因此開發人員必須為其專案中的每個 Unity 場景儲存此屬性。
單一傳遞實例轉譯路徑
在混合實境應用程式中,場景會轉譯兩次:每隻眼睛一次。 相較於傳統的 3D 開發,這實際上會將需要計算的工作量加倍。 請務必在 Unity 中選取最有效率的轉譯路徑,以節省 CPU 和 GPU 時間。 單一傳遞實例轉譯可將混合實境應用程式的 Unity 轉譯管線優化;建議您針對每個項目預設啟用此設定。
若要在 Unity 專案中啟用這項功能
- 開啟 OpenXR 設定 (移至 [編輯>專案 設定> XR 外掛程式管理>OpenXR]。
- 從 [轉譯模式] 下拉功能表中選取 [單一傳遞實例]。
如需此轉譯方法的詳細資訊,請參閱 Unity 中的下列文章。
注意
如果開發人員已經有非針對執行個體撰寫的現有自訂著色器,就會發生單通道執行個體化轉譯的一個常見問題。 啟用這項功能之後,開發人員可能會注意到,有些 GameObject 只會在單一眼球中轉譯。 這是因為相關聯的自訂著色器沒有適當的執行個體屬性。
啟用深度緩衝區共用
若要從使用者感知中達到更好的全像投影穩定性,建議您在 Unity 中啟用 深度緩衝區共用 屬性。 藉由開啟此功能,Unity 會與 Windows Mixed Reality 平臺共用應用程式所產生的深度地圖。 然後,平臺可以更妥善地針對場景優化全像投影穩定性,以供應用程式轉譯的任何指定畫面。
若要在 Unity 專案中啟用這項功能
- 開啟 OpenXR 設定 (移至 [編輯>專案 設定> XR 外掛程式管理>OpenXR]。
- 從 [深度提交模式] 下拉功能表中選取 [深度 16 位]。
特別建議針對 HoloLens 開發使用 16 位深度緩衝區設定。 相較於24位,選取16位會大幅降低頻寬需求,因為行動/處理的數據將較少。 也就是說,優化帶來了某些成本。 請確定您瞭解下列重要方塊中提及的含意。
為了讓 Windows Mixed Reality 平臺將全像投影穩定性優化,它依賴深度緩衝區精確且符合螢幕上任何轉譯全像投影。 因此,使用深度緩衝區共用時,轉譯色彩也呈現深度很重要。 在 Unity 中,大部分不透明或 TransparentCutout 材質預設都會呈現深度,但透明和文字物件不會呈現深度,雖然這取決於著色器和其他因素。
如果使用混合實境工具組標準著色器,則為透明對象呈現深度:
- 選取使用 MRTK 標準著色器的透明材質,然後開啟 [偵測器編輯器] 視窗
- 選取深度緩衝區共用警告內的 [ 立即 修正] 按鈕。 這也可以手動執行,方法是將轉譯模式設定為 [自定義];然後將 [模式] 設定為 [透明],最後將 [深度寫入] 設定為 [開啟]
重要
當變更這些值以及相機的近/遠平面設定時,開發人員應該注意 Z 戰鬥。 Z-Fighting 發生於兩個遊戲對象嘗試轉譯為相同的圖元,以及由於深度緩衝區逼真度限制(亦即 z 深度),Unity 無法辨別出哪個對象位於另一個圖元前面。 開發人員會注意到兩個遊戲對象之間的閃爍,因為他們 為相同的 z 深度值而戰 。 這可以藉由切換至 24 位深度格式來解決,因為每個物件都會有較大的值範圍,以便從相機計算其 z 深度。
不過,建議特別針對 HoloLens 開發,將相機的近遠平面修改為較小的範圍,並保留 16 位深度格式。 z 深度會以非線性方式對應至近遠相機平面的值範圍。 您可以在場景中選取 Main 相機,並在 [偵測器] 底下,變更 [近] 和 [遠距裁剪平面] 值,以減少其範圍(即從 1000m 到 100m 或其他 x 值等等)
重要
Unity 不會在使用16位深度格式時建立樣板緩衝區 。 因此,除非選取 24 位深度格式,否則某些 Unity UI 效果和其他樣板所需的效果將無法運作,這會建立 8 位樣板緩衝區。
建立 IL2CPP
Unity 已淘汰 .NET 腳本後端的支援,因此建議開發人員針對其 UWP Visual Studio 組建使用 IL2CPP 。 雖然這帶來了各種優點,但從 Unity for IL2CPP 建置您的 Visual Studio 解決方案可能會比舊的 .NET 方法慢。 因此,強烈建議遵循建 置 IL2CPP 的最佳做法,以節省開發反覆項目的時間。
- 每次將專案建置到相同的目錄,重複使用該處預先建置的檔案,以利用累加建置
- 停用專案的反惡意代碼軟體掃描和建置資料夾
- 在您的 Windows 10 設定應用程式下開啟病毒和威脅防護
- 選取 [病毒與威脅防護設定] 底下的 [管理 設定
- 選取 [排除] 區段底下的 [新增或移除排除專案]
- 選取 [新增排除專案 ],然後選取包含 Unity 專案程式代碼和建置輸出的資料夾
- 使用 SSD 來建置
如需詳細資訊,請參閱 優化 IL2CPP 的建置時間。
注意
此外,設定快取伺服器可能會有幫助,對於有大量資產 (排除指令檔) 或不斷變更場景/資產的 Unity 專案來說,更是如此。 開啟專案時,Unity 會將符合資格的資產以內部快取格式儲存在開發機器上。 項目必須重新匯入,因此修改時必須加以重新處理。 此程序可以執行一次後就儲存在快取伺服器中,之後再與其他開發人員共用以節省時間,而不是每位開發人員都在本機處理新變更的重新匯入工作。
發佈屬性
全像攝影啟動顯示畫面
HoloLens 具有行動類別的 CPU 和 GPU,這表示應用程式可能需要更長的時間才能載入。 當應用程式正在載入時,使用者只會看到黑色,因此他們可能會想知道發生了什麼事。 若要在載入期間放心,您可以新增全像攝影啟動顯示畫面。
若要切換全像攝影啟動顯示畫面:
- 移至 [編輯>專案 設定> Player] 頁面
- 選取 [Windows 市集] 索引標籤,然後開啟 [啟動顯示影像] 區段
- 在 Windows 全像攝影全像攝影 > 啟動顯示影像屬性下套用您的影像 。
- 切換 [ 顯示 Unity 啟動顯示畫面 ] 選項將會啟用或停用 Unity 品牌啟動顯示畫面。 如果您沒有 Unity Pro 授權,則一律會顯示 Unity 品牌啟動顯示畫面。
- 如果套用全像攝影啟動顯示影像,則不論 [顯示 Unity 啟動顯示畫面] 複選框已啟用或停用,一律會顯示它。 指定自定義全像攝影啟動顯示影像僅適用於具有 Unity Pro 授權的開發人員。
顯示 Unity 啟動顯示畫面 | 全像攝影啟動顯示影像 | 行為 |
---|---|---|
另一 | 無 | 顯示預設 Unity 啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
另一 | 自訂 | 顯示自定義啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
關閉 | 無 | 顯示透明黑色(無任何專案),直到應用程式載入為止。 |
關閉 | 自訂 | 顯示自定義啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
如需詳細資訊,請參閱 Unity 的啟動顯示畫面檔 。
追蹤遺失
混合實境頭戴式裝置取決於查看周圍的環境,以建構 世界鎖定的座標系統,讓全像投影保持原位。 當耳機無法定位到世界上時,耳機據說已經 失去了跟蹤。 在這些情況下,相依於世界鎖定座標系統的功能,例如空間階段、空間錨點和空間對應,無法運作。
如果遺失追蹤,Unity 的預設行為是停止轉譯全像投影、暫停 遊戲迴圈,以及顯示追蹤遺失的通知,以舒適地跟隨用戶注視。 自定義通知也可以以追蹤遺失影像的形式提供。 對於依賴追蹤其整個體驗的應用程式,讓 Unity 完全處理此作業,直到重新取得追蹤為止。 開發人員可以提供自定義影像,以在追蹤遺失期間顯示。
若要自訂追蹤遺失的影像:
- 移至 [編輯>專案 設定> 播放程式] 頁面
- 在 [ Windows 市集 ] 索引標籤上選取 ,然後開啟 [啟動顯示影像] 區段
- 在 Windows 全像攝影>追蹤遺失影像屬性下套用您的影像。
退出退出自動暫停
某些應用程式可能不需要追蹤(例如 僅限方向的應用程式 ,例如360度視訊查看器),或可能需要在追蹤遺失時繼續處理不間斷。 您可以退出退出預設的追蹤行為遺失,但您必須負責隱藏/停用任何物件,這不會在追蹤遺失案例中正確轉譯。 在大部分情況下,建議在該案例中轉譯的唯一內容是主體鎖定的內容,以主相機為中心。
若要退出離開自動暫停行為:
- 移至 [編輯>專案 設定> Player] 頁面
- 選取 [Windows 市集] 索引標籤,然後開啟 [啟動顯示影像] 區段
- 修改 Windows 全像攝影 > 追蹤遺失暫停和顯示影像 複選框。
追蹤遺失事件
若要定義追蹤遺失時的自定義行為,請處理全域 追蹤遺失事件。
功能
若要讓應用程式利用特定功能,它必須在其指令清單中宣告適當的功能。 指令清單宣告可以在 Unity 中建立,使其包含在每個未來的項目匯出中。
您可以透過下列方式為混合實境應用程式啟用功能:
- 移至 [編輯>專案 設定> Player] 頁面
- 選取 [Windows 市集] 索引標籤,開啟 [發佈 設定] 區段,然後尋找 [功能] 清單
針對全像攝影應用程式啟用常用 API 的適用功能如下:
功能 | 需要功能的 API |
---|---|
SpatialPerception | SurfaceObserver |
網路攝影機 | PhotoCapture 和 VideoCapture |
PicturesLibrary / VideosLibrary | PhotoCapture 或 VideoCapture 分別 (儲存擷取的內容時) |
麥克風 | VideoCapture (擷取音訊時)、DictationRecognizer、GrammarRecognizer 和 KeywordRecognizer |
InternetClient | DictationRecognizer (以及使用 Unity Profiler) |