VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

遊資網發表於2019-02-26
限於種種原因,以往的VR世界往往只是⼀個狹小的空間。而在整個行業發展越來越成熟的當下,國內VR原創精品遊戲大有可為,網易首款多人線上VR新遊《Nostos》就帶來了開放世界探索的可能性,在德國科隆展上反響熱烈也顯示了中國自研VR遊戲對全球玩家的吸引力和影響力。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

《Nostos》採用了真實物理模擬、超大世界無縫地圖和自由移動系統三項技術,能夠讓玩家充分體驗到VR世界的迷⼈魅力。對於創新型自研遊戲的打造,研發團隊表示:“我們希望打磨得更精良一點,清晰使用者體驗,包括遊戲內容。”

那麼,《Nostos》開發團隊是如何解決整個VR世界的連續表現,海量資料的效能保障、製作成本的控制,多人協同問題的?2019網易遊戲開發者峰會上,《Nostos》核心開發工程師Arthur為我們帶來分享。

以下為分享實錄:

我與大家分享的是開放世界的開發。

首先我會列舉一些製作VR世界常見的難題,和最後我們給出相應的解決辦法

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

難題1:整個世界如何連續表現?

像闖關類遊戲,各個關卡是單獨儲存的,在進入新的關卡只要顯示載入畫面就可以了,那對於開放世界我們不可能儲存一個超大的場景。我們是基於unity開發,如何在unity上做這個事情呢?

難題2:海量的資料,如何保障效能?

如何解決包體很大,載入時間久,吃內,cpu和顯示卡的問題。

難題3:製作費用高,工期長?

如何降低製作成本,降低工期。

難題4:如何多人協同工作?

unity的習慣,就是很多東西都放在場景裡面,如果說兩人同時編輯一個unity場景檔案,靠svn合併基本上是不可能的事情。如何讓很多人同時工作呢?

下面我將從這四個方面,來講我們是如何應對這些難題。

流式載入

大家都應該看過線上視訊的網站,進度條會前後緩衝一段時間,是為了應對網路的卡頓,以及回看的需求,對於三維場景的漫遊也有類似的做法,將場景劃分成可以拼接的區域,只需要載入相應周圍的區域,隨著相機的移動,我們會載入新的區域,並解除安裝不需要的區域。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

我們用的是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人月,太耗時。我們就嘗試能不能用全自動化的方法去過程化的生成結果呢?結果發現不達標。

第一不夠美觀,單調,缺乏多樣性,不夠有趣,不夠精緻。

第二影響玩法,難以定製遊戲玩法路線和區域,形成的路線比較隨機,很難去控制特定的路線。

因此我們就希望開發一個場編擁有所有控制的過程化擺動工具,它能夠支援你自由控制邏輯索要作用的區域,還能夠編輯生態邏輯。

用軟工具一刷,地表貼圖幾種組合的植被就貼在地面上,同時會避開中間的道路,不會刷到道路上。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

我們這款工具原理參考了GDC2017:

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

這個擺放工具的原理主要分三步:

第一步它的原始資料是各種各樣的柵格圖層,在圖層間定義了一些邏輯運算,這些圖層可以包括:河流,道路,地形高度,坡度......圖層之間的運算可以是求交,求差,求反,曲線,模板變化等。

第二步是用了影像處理法中的Dither演算法,

將灰度圖離散化成點集。這個演算法用在擺動工具上正好可以控制每個元素的距離,也可以通過濃度表達他的密度。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

最後一步,將你的素材繫結到不同的圖層裡面。

在每一個素材上有不同的間距,有隨機縮放和旋轉的範圍。

多人協同編輯

講完了過程化製作,我們講一下多人協同編輯我們是如何做的。

場編多人協作:

多人線上網路虛擬創作環境,每人有一個虛擬化身,可以對附近場景進行修改,資料同步給所有人,資料儲存在服務端。好處是你可以看到別人正在幹嘛,缺點是沒辦法版本管理。

我們基於WorldStreamer,按區域,功能將整個世界劃分成單獨的場景檔案,每個檔案同時只有一個人編輯,好處是可使用版本管理。

下圖是一個場編工作前的示意圖,比如他想編輯藍色地塊,他會先鎖定這個地塊,別人可以看到這一塊被鎖定了,提交後鎖定會結束。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

音訊協作

如何讓音訊師和場編一起協作,首先載入顯示層,把整個場景載入顯示出來載入在最底層,音訊師的音訊編輯儲存在AudioWorld上,結束的時候將AudioWorld切分成分塊,整合到流式載入。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

策劃協作

我們開發了一個Entity世界編輯器,它有一些規則,可以生成一些資源,因為我們是聯機的遊戲,有些東西要放入服務端。

VR遊戲開發難題多?《Nostos》團隊給出瞭解決方案

Q&A

Q:工程化工具開發了多久?是在遊戲過程中開發的嗎?

A:這個是在遊戲當中做出來的。是在於美術和策劃的溝通下逐步完善的。

Q:地形的遠處lod如何和近處地形融合,解決接縫問題。

A:近處的高精度地形和遠處結合,unity地形有相應的介面可以自動縫合,遠處的mesh可以多生長一圈下沉的頂點,這樣就不會有穿幫的問題。高階的方法,可能就需要了解Unity的頂點生成的演算法,在執行時動態修改mesh邊緣頂點。

來源:網易遊戲學院
原地址:https://mp.weixin.qq.com/s/MnG5cZgf57efM8NAL1duYQ


相關文章