VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案
《Nostos》採用了真實物理模擬、超大世界無縫地圖和自由移動系統三項技術,能夠讓玩家充分體驗到VR世界的迷⼈魅力。對於創新型自研遊戲的打造,研發團隊表示:“我們希望打磨得更精良一點,清晰使用者體驗,包括遊戲內容。”
那麼,《Nostos》開發團隊是如何解決整個VR世界的連續表現,海量資料的效能保障、製作成本的控制,多人協同問題的?2019網易遊戲開發者峰會上,《Nostos》核心開發工程師Arthur為我們帶來分享。
以下為分享實錄:
我與大家分享的是開放世界的開發。
首先我會列舉一些製作VR世界常見的難題,和最後我們給出相應的解決辦法
難題1:整個世界如何連續表現?
像闖關類遊戲,各個關卡是單獨儲存的,在進入新的關卡只要顯示載入畫面就可以了,那對於開放世界我們不可能儲存一個超大的場景。我們是基於unity開發,如何在unity上做這個事情呢?
難題2:海量的資料,如何保障效能?
如何解決包體很大,載入時間久,吃內,cpu和顯示卡的問題。
難題3:製作費用高,工期長?
如何降低製作成本,降低工期。
難題4:如何多人協同工作?
unity的習慣,就是很多東西都放在場景裡面,如果說兩人同時編輯一個unity場景檔案,靠svn合併基本上是不可能的事情。如何讓很多人同時工作呢?
下面我將從這四個方面,來講我們是如何應對這些難題。
流式載入
大家都應該看過線上視訊的網站,進度條會前後緩衝一段時間,是為了應對網路的卡頓,以及回看的需求,對於三維場景的漫遊也有類似的做法,將場景劃分成可以拼接的區域,只需要載入相應周圍的區域,隨著相機的移動,我們會載入新的區域,並解除安裝不需要的區域。
我們用的是unity裡的外掛WorldStreamer,基於Unity additive scene loading API做的一個流式載入器,它支援正方形劃分、九宮格載入以及環形載入,它可以按照任意方式分層,比如地形,物體,水體等種類。也可以按照尺寸來分層。
效能和視距
主要分三個方面:地形、物體和植被
地形:將Unity的地形分塊,然後運用World Steamer做流式載入,這樣可以控制載入的範圍,降低載入時間,降低效能消耗。
但這樣遠處的地形就看不到了,所以我們做了超遠距離的LOD,近處我們用高精度的terrain,遠處我們用低精度的mesh,運用環形載入把他們整合進去。
環視載入支援的中心的九個地塊和周圍的地塊的尺寸大小必須都是一樣,這樣才能無縫的拼接起來。但是我們發現,如果地塊很大的話,中心的高精度地塊面積就會很大,這對效能也不太好。
因此我們做了些改進,使得環形載入可以讓中心和周圍地塊尺寸不同。我們也製作了一些離線工具能夠烘焙Mesh地形,還做了切割地形的工具。
物體:
◆我們首先按照包圍盒大小進行分層。小的載入距離近,大的載入距離遠。
◆使用LODGroup,製作多級LOD。
◆對於很遠的模型,只載入最低精度模型或公告板,降低載入時間,降低計算選擇LOD層級開銷。
◆離線工具,將LODGroup地塊轉換成純低模場景,高精度模型和低精度模型整合到環形載入。
植被:
一些嘗試
Unity地形自帶植被功能?
Unity的地形上面是有刷植被的功能的,我們曾經嘗試過,發現在大量植被情況下,效能很差,幀率卡得非常低,經過調研發現大量消耗在剔除和LOD計算上面。
直接用GameObject?
我們嘗試時發現同樣數量的植被,如果轉成GameObject的話,編輯器直接就開啟了,原因是因為Transform元件開銷,編輯器卡死,場景檔案巨大,在執行時還會單獨剔除和LOD計算。
因此我們正在規劃一個植被系統,有密度管理,有統一的LOD計算,有視錐刪除,Job,Instancing。
過程化製作
在規則和演算法的作用下,批量的製作大量內容。
首先列舉一下都有哪些內容需要編輯:地形高度變化,和貼圖的分佈,植被的分佈。這個工作量有多大呢?首先面積巨大,我們的遊戲有幾十平方公里,在做科隆展之前,地塊基本上都是純手工去做編輯,有大量地形數造工作要處理,而且Unity自帶地形工具功能少,比較難控制。
我們做了一個推測,純手工精編1平方公里大概需要2人月,那60平方公里,一個人要編十年。如果途中還有需求改變,迭代,就會花費大量時間。
接下來我會分享我們用到的兩個過程化生成的方案
第一是地形,第二個是植被
地形:Unity上常用的外掛工具有Map Magic.Gaia.World Macgine,它們的原理就是通過編輯節點邏輯,自動生成地形的高度圖,高度圖可以整塊應用到地形圖上。我們自己開發的地形工具也可以運用到地形的區域性。Map Magic可以放非常複雜的東西來實現具體的需求。
接下來我們講一下植被部分是如何過程化形成的
剛剛講了用全手動的方法,1平方公里大概需要2人月,太耗時。我們就嘗試能不能用全自動化的方法去過程化的生成結果呢?結果發現不達標。
第一不夠美觀,單調,缺乏多樣性,不夠有趣,不夠精緻。
第二影響玩法,難以定製遊戲玩法路線和區域,形成的路線比較隨機,很難去控制特定的路線。
因此我們就希望開發一個場編擁有所有控制的過程化擺動工具,它能夠支援你自由控制邏輯索要作用的區域,還能夠編輯生態邏輯。
用軟工具一刷,地表貼圖幾種組合的植被就貼在地面上,同時會避開中間的道路,不會刷到道路上。
我們這款工具原理參考了GDC2017:
這個擺放工具的原理主要分三步:
第一步它的原始資料是各種各樣的柵格圖層,在圖層間定義了一些邏輯運算,這些圖層可以包括:河流,道路,地形高度,坡度......圖層之間的運算可以是求交,求差,求反,曲線,模板變化等。
第二步是用了影像處理法中的Dither演算法,
將灰度圖離散化成點集。這個演算法用在擺動工具上正好可以控制每個元素的距離,也可以通過濃度表達他的密度。
最後一步,將你的素材繫結到不同的圖層裡面。
在每一個素材上有不同的間距,有隨機縮放和旋轉的範圍。
多人協同編輯
講完了過程化製作,我們講一下多人協同編輯我們是如何做的。
場編多人協作:
多人線上網路虛擬創作環境,每人有一個虛擬化身,可以對附近場景進行修改,資料同步給所有人,資料儲存在服務端。好處是你可以看到別人正在幹嘛,缺點是沒辦法版本管理。
我們基於WorldStreamer,按區域,功能將整個世界劃分成單獨的場景檔案,每個檔案同時只有一個人編輯,好處是可使用版本管理。
下圖是一個場編工作前的示意圖,比如他想編輯藍色地塊,他會先鎖定這個地塊,別人可以看到這一塊被鎖定了,提交後鎖定會結束。
音訊協作
如何讓音訊師和場編一起協作,首先載入顯示層,把整個場景載入顯示出來載入在最底層,音訊師的音訊編輯儲存在AudioWorld上,結束的時候將AudioWorld切分成分塊,整合到流式載入。
策劃協作
我們開發了一個Entity世界編輯器,它有一些規則,可以生成一些資源,因為我們是聯機的遊戲,有些東西要放入服務端。
Q&A
Q:工程化工具開發了多久?是在遊戲過程中開發的嗎?
A:這個是在遊戲當中做出來的。是在於美術和策劃的溝通下逐步完善的。
Q:地形的遠處lod如何和近處地形融合,解決接縫問題。
A:近處的高精度地形和遠處結合,unity地形有相應的介面可以自動縫合,遠處的mesh可以多生長一圈下沉的頂點,這樣就不會有穿幫的問題。高階的方法,可能就需要了解Unity的頂點生成的演算法,在執行時動態修改mesh邊緣頂點。
來源:網易遊戲學院
原地址:https://mp.weixin.qq.com/s/MnG5cZgf57efM8NAL1duYQ
相關文章
- 多專案管理中的難題及解決方案專案管理
- 遊戲出海如何應對研發、發行、運營全週期難題?這份報告給出瞭解決方案遊戲
- 分散式(Distributed)Scrum團隊的問題及解決方案分散式Scrum
- 團隊協作的五大障礙?用飛項輕鬆解決團隊協作難題
- 機械行業解決方案高效解決企業管理難題行業
- 企業客戶銷售:面對挑戰給予銷售團隊六大解決方案
- 研發團隊溝通困難 誰的問題?
- 微信團隊分享:微信移動端的全文檢索多音字問題解決方案
- 從程式設計、工程專案到解決方案、團隊開發程式設計
- 電商解決方案,全面解決企業管理難題、提升盈利水平
- 有一道十分難題請給予解決
- 短影片系統開發疑難問題解決方案
- 辦公室無線覆蓋方案解決網路死角難題
- 企業採購成本管理的難題及解決方案
- 巨大的科學難題需要大資料解決方案大資料
- 跨境電商產品配送完整指南:難題的解決方案
- 毫秒級返回資料,58同城 DBA 團隊選擇 TDengine 解決感測器資料處理難題
- 團隊作業1——團隊選題&展示
- 團隊作業1——團隊展示&選題
- 如何破解NGS入院難題,臻和科技IVD整體解決方案或可解決
- DevOps 團隊應瞭解的 5 個安全威脅dev
- 谷歌動畫團隊瞄準VR市場 明年將推出VR動畫短片谷歌動畫VR
- AI模型被「騙」怎麼破?《燃燒吧!天才程式設計師》冠軍團隊解決方案出爐AI模型程式設計師
- 阿里雲聯合帆軟釋出企業級BI分析解決方案,解決資料應用難題阿里
- 別隻看TalariaVR卡哇伊,它解決了VR移動體驗難題VR
- 團隊作業1——團隊展示與選題
- 讓物料變化一目瞭然--解決物料管理難題(轉)
- ERP系統物料替代解決方案,幫助企業解決物料管理難題
- 分詞,難在哪裡?科普+解決方案!分詞
- socket難點與解決方案提議
- 企業IT架構走向多雲需解決三大難題架構
- Kaggle座頭鯨識別賽,TOP10團隊的解決方案分享
- 機器學習識別植物疾病,這是CVPR挑戰賽冠軍團隊的解決方案機器學習
- 你真的瞭解你的團隊嗎? ONA告訴你真相
- 騰訊雲釋出全新遊戲雲解決方案,助力遊戲開發者高效開發遊戲開發
- 團隊展示&選題
- 多執行緒的安全問題及解決方案執行緒
- 請多討論問題,而不是解決方案 - frankel