1.使用現狀
隨着社會對虛擬行業的需求增大,越來越多的公司、供應商開始對VR產品進行研究開發。硬件產品從剛開始的盒子式到頭盔式再到現在的一體式頭盔,VR產業一直在快速發展,以oculus一體式頭盔爲代表的一系列VR產品受到市場的歡迎,其小型化、便攜式是傳統VR設備不具備的,然而這些特點也導致一體機在性能方面有所限制,隨着遊戲開發商對遊戲的不斷提高以及體驗者對產品沉浸體驗需求的增大,在不改變一體式頭盔硬件的情況下,開發者只能在開發過程中對遊戲、軟件進行不斷的調試、性能優化,儘可能提高體驗者的舒適度和沉浸感,所以VR遊戲、軟件的性能優化尤爲重要。
2.性能優化
2.1.項目準備時期
2.1.1場景資源評估
在項目開始開發前的準備時期,每一個開發團隊都必須要對即將開發的產品做一個評估,包括產品可行性、產品風險評估、場景資源評估等;
由於是用於oculus一體機的商業VR產品,團隊在開發之前要對場景資源進行評估, 包括場景的點數、模型的大小&數量、場景的大小、加載資源的多少等,對這些資源進行大致評估可以對後面的開發有着指導性作用,比如當我們開發過程中客戶需要臨時添加一些模型資源甚至是小的場景,那麼我們在別的方面的優化(比如貼圖、光照)就得加大力度來填補這些新增的東西所帶來的額外資源負擔。所以在項目準備階段需要對場景進行資源評估;
2.2.項目開發前期
2.2.1 模型
在VR場景的製作過程中,我以人眼所能看到的模型爲例把模型分爲三類
1.該模型會被人眼仔細觀察
2.該模型只是裝飾品,人眼看到即可
3.該模型只會被人眼看到部分
對於VR場景而言,模型在整個場景中佔了很大一部分資源,在優化方面對模型優化的好與不好很大程度決定整個VR場景放入一體機中的卡頓問題。模型資源的精細程度可以根據其模型在場景中發揮的作用而對模型進行不同的精細化分。
解決方法:1.上面說的2.3類模型,可以減少模型的面數、頂 點數,甚至有的模型只導入人眼能看到的那部分;
2.將模型分組,人眼看不到的區域就隱藏這些組;
3.儘量讓模型合併材質和貼圖,減少貼圖、材質數量;
4.場景中能合併的模型儘量合併;
5.不需要陰影的模型在場景中勾掉Receive Shadows
6.靜態批處理
7.LOD多層次渲染
2.2.2 圖片
1.導入的圖片可以根據其需要對圖片的分辨率進行修改;
2.轉化爲精靈模式(spirit)
2.3.項目開發中期
2.3.1 代碼
在項目開發中腳本會用到各種各樣的封裝的方法、類,對代碼的優化也可以減少VR場景的負擔
- 腳本中不用的代碼一定要刪除,因爲有些代碼會產生GC
- Getcomponent Gameobject.find()等這些方法儘量少用,而且千萬不要放在Update中循環執行
- Update裏面的邏輯儘量不要太複雜
2.3.2 插件
在不影響場景內容的基礎上,能用unity自帶的組件就不要用外部導入的插件,當然有些插件能大大提高開發效率,視情況而定;
2.4.項目開發後期
2.4.1 打包
項目完成打包時,如果資源多可採用AB打包方式,將場景的一部分模型、貼圖、聲音之類的資源分組打包,在場景運行時這些資源再被加載在出來,可以減少安裝包的大小;
2.4.2 其他
其實在開發VR項目時候,還有很多的資源優化方法,例如:場景異步加載、減少實時燈光使用、減少粒子系統的使用等;
在VR場景的開發過程中,資源優化一直是開發者需要解決的問題,資源優化並不是一個短期的內容,它是需要我們在開發的過程中就要考慮到的問題,伴隨着整個項目的開發週期,資源優化沒有一勞永逸的方法,只能一步一步根據項目進行優化調試,總之:開發不停,優化不止。