當前位置:
首頁 > 最新 > 揮別讀取丟幀!如何實現虛擬場景的轉換?

揮別讀取丟幀!如何實現虛擬場景的轉換?

譯者:劉鴻(lewis2012)

審校:王玥亭(玥亭)

幾個月前,我們製作了一個關於如何正確使用SteamVR過渡場景的視頻,我們想也許可以做一個書面版本的教程,所以接下來我們將帶領大家一步學習。

通常在Unity中,當你嘗試載入一個關卡時,有一個非常方便的API,就是調用SceneManager.LoadLevel(string levelname)。假設你已經確定將場景文件添加到了項目的Build Settings中,那麼你將轉換到你命名的場景里。

Unity裡面的Build Settings界面

對於移動設備,或者是部分個人電腦來說,在遊戲場景轉換期間,可能會遭受一些幀的丟失,因為你的設備在場景轉換期間,內存中很多東西需要交換。對於這樣的設備來說,通常不是一個大問題,對終端用戶來說也幾乎察覺不到。對於場景過渡需要較長時間,可以很容易地添加令人討厭的載入界面。

然而,對於VR遊戲來說,即使在0.5秒內,也不能接受一些幀丟失。對於患有模擬暈動症的用戶來說,幀波動的體驗會變得非常不好,它會不斷提醒用戶他們處於模擬體驗中,從而減少了他們的存在感,沉浸感。事實上,如果VR頭盔檢測到丟幀時候體驗是非常糟糕的,應該彈出當前的應用程序直到它VR頭盔渲染合格。

解決這個問題的一個簡單方法是將當前場景淡化為黑色,然後在黑色場景中過渡FPS下降。然而,對於SteamVR開發者來說,有一種更好的方式。

實現

作為SteamVR的一部分,有一個SteamVR_LoadLevel.cs的c#腳本。為了測試這個腳本,你可以將它添加到任何GameObject上的組件,啟用自動觸發器,當你點擊play時,你將轉換到你指定的場景。在我們的視頻中(鏈接底部),我們談論腳本中更多的屬性,所以如果你想要了解更多的細節。

正如您可能已經猜到的,這是一個腳本,你可以使用它來載入關卡而不必導致FPS下降。這裡的訣竅是,當你在內存中載入場景時,SteamVR會將場景轉換為Compositor,然後在準備就緒時將轉換回你的新場景。

這是真的!!

Compositor是一個後台進程,它充當虛擬現實的「集線器」,你可以從它那裡得到通知,轉換到不同的應用程序,或者像ReVive一樣添加驅動程序。用計算機的術語來說,把Compositor看作你的虛擬現實桌面。

通過使用Compositor,當您載入關卡時,你將有效地使用自定義的低功耗桌面,從而避免了FPS值下降。這是在場景之間轉換的建議方法,雖然它在文檔中沒有明顯的說明,但它將為你節省大量時間,避免你去思考為什麼會丟失幀。

未來的改進

正如現在所做的那樣,SteamVR_LoadLevel腳本不是非常靈活,使用起來有點混亂。幸運的是,它是一個開源項目,任何人都可以參與其中。我希望看到的是CubeMap支持Skybox和其他自定義比如在轉換過程中可以播放視頻。如果有人比我早實現這個,我會很興奮的。

結論

如果你正在開發虛擬現實,尤其是SteamVR,務必使用SteamVR_LoadLevel。

【版權聲明】

原文作者未做權利聲明,視為共享知識產權進入公共領域,自動獲得授權。

----------------------


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |