用UE4创造开放世界:Kite 实时演示
這是2015年虛幻4的一篇演講。他們在5個月內完成了一個單機的開放世界Demo,全部素材使用攝影測量法制作,渲染方面使用了一些新技術,表現效果非常真實。表示部分技術會逐步移植到虛幻引擎中。
?
技術看點包括:
?
- 多種渲染效果(未解釋具體算法),不過對于手游來說很遙遠
- 地形的生成,大世界植被的生成算法
- 鹿的AI
視頻地址
https://www.youtube.com/watch?v=clakekAHQx0
這個Demo使用10英里*10英里的大地圖,1米的精度,比上古卷軸-天際面積大10倍。
?
- 沒有加載、視距超級遠
- 沒有使用接景(matte painting,也就是遠景的片)
- 完全使用動態光照,使用開放世界的動態GI
整個項目團隊30人。大概5個月,10月啟動,11月去照相,2月出來的。
開頭有一段演示視頻(00:51),可以參考的表現細節:
?
- 天空的鳥群
- 鹿的AI:在攝像機接近時逃散的動畫
- 鏡頭漫游時攝像機的慣性晃動
地面上云的影子效果很出彩。注意,天上的云是靜態的,但是并沒有不和諧感。
資源創建流程
素材使用攝影測量法(Photogrammetry)。在蘇格蘭的斯凱島取材。
?
采集隊總共4人,分成兩個小隊各2人,在兩個不同的地方各種采集了7天。除了照相掃描素材之外,還拍攝了實際風景來為未來的整個制作做參考。雖然采集了非常多素材,但是實際只做了十分之一(按:從多個項目的反饋來看,大家普遍認為少量重復的高質量資源足以構建可信的自然世界)。
本文略過了采集過程,若有人搞照相掃描法的話可以去看看。技術比較標準,包括但不限于:
?
- 采集時灰球+絡合金球采集光照和環境信息。全部是HDR線性空間sRGB的
- 復原時,重新渲染亮度來去陰影
目前的LOD制作是手工的。大約3~5萬面,然后做改成5~7千面,最后做3級LOD。
地形的貼圖,是由原始的多邊形烘焙成含法線的貼圖,并包含高度信息。后面地形的融合,需要高度圖信息。
渲染算法:RTDF陰影-GI-透光材質-模糊
傳統來說,陰影使用分級陰影貼圖(Cascaded Shadow Map)方案。這種方案可以支持植被動畫,但是多邊形開銷大。本項目近處使用CSM,遠處使用基于深度場光線追蹤(RTDF,Ray Traced Distance Field)的陰影,該算法適合陰影以及AO,對于遠景相對于傳統方法有3倍的加速。
?
同時,對于天空盒產生的環境光,這里同樣使用了基于深度場的AO(DFAO)。
?
使用了一種修改版的基于高度場的GI。如果沒有GI的話,樹和石頭的陰影區會太暗。
?
對不同的粗糙度,生成一套預處理的Cubemap。
此外,使用了新的背面透光算法。光線可以穿過很薄的表面,例如葉子、紙張,以及本視頻中的風箏。認為3S材質只是一個近似,所以提供了一種新的兩面的渲染模型,更準確地模擬光線傳過薄的表面。
對于模糊,使用了Scatter as gather算法,包括動態模糊和景深,該算法準確度很高且可以采樣屏幕之外的物體。
地形編輯,加載和混合
地形使用world machine制作后導入到自研工具中。10英里*10英里的大地圖,1米的精度。
?
整個地形并不是一次加載的,分解成了多個不同等級的加載流。對于細節內容,只在需要的情況下進行加載。如上圖,圖中的藍色區域,就是基本內容,其細節信息未被加載。
?
對于地形貼圖,使用基于高度圖的混合。賣二手QQ上圖比較了普通的混合vs基于高度圖的混合。
植被
植被分成了兩類:
?
- 植被:樹、巖石,有碰撞
- 草:草、花、小卵石,無碰撞
植被都是種的,使用分層靜態Instanced Mesh,以類似BSP樹的方式組織。草的數量極多,所以并不是一顆顆種的,而是根據地表的材質動態生成。
草有多級LOD,從視頻看,有一定隨機的LODbias,讓他們交疊的切換;同時切換是平滑動畫做逐像素漸變切換的。
?
樹的Billboard使用了像素的深度圖,來改善陰影。
場景的生成技術
開發人員創建了一個簡單的生態模擬規則,生成整個世界的植被(注:含巖石),希望植被:
?
- 有聚集性
- 不會過度聚集
- 有自然的生長曲線,有自然的高矮。
這是一個生長模擬系統。首先根據密度設置生成初始的樹、灌木和巖石的種子,然后每一步模擬植物的長大、并且在周圍隨機播種種子,這樣多趟之后生成聚集的森林。多物種的生長區開始交疊的時候,使用適應性規則,來決定后面的走向,包括:相對尺寸、遮蔽、海拔高度、坡度,來決定交疊后的演化。適應性規則可以產生很自然的效果,例如有些物種只在森林中生長。
由于計算量太大,地圖被分成大(注:按后文推測大概一塊300*300m)的2d塊。美術人員在個別塊中先實驗植被效果,然后應用到所有塊。也可以定義一個空間區域作為掩碼,來指定應用/排除的范圍。
生長系統使用確定性模擬。生成之后,可以用通常的地形畫刷二次修改結果。
?
鹿的AI
動物做法沒有什么特別,使用和普通射擊游戲類似的角色工作流。
鹿的躲避:若攝像機靠近,找到鹿群的中心點,然后指定他向遠離攝像機鏡頭的的某個點移動。然后鹿使用尋路方式移動過去。
使用集群模擬(Crowd simulation)來躲避樹木和其他鹿。
?
制作時,注意四足動物有特有的難點(按:強烈建議觀察視頻):
?
- 無法原地轉身,而是需要跑出一個曲線
- 加速需要比人類更長的時間
?
所以鹿的動作使用root motion。和傳統的相反,AI告訴鹿移動目標,而鹿的動畫控制其走過去。動畫、狀態機等是在多核上計算的,支持300+的鹿。
?
尋路是一個大問題。尋路網格相比碰撞檢測計算速度快,可以支持更多的動態物體,所以在遠距離的情況下,使用尋路網格來加速計算。到近距離的情況下,AI才使用碰撞檢測。全場景尋路數據如果預計算的話有5G,所以并不進行預計算,都是多核計算按需動態生成的。
動態生成動物群
?
動物群都是靠近后生成的。
群落使用一種簡單的方法生成。世界分成邊長300m的方格,在需要產生群落的時候,群落會生成在格子中最合適的位置。用規則定義各種東西傾向于在什么地方出現,比如鹿喜歡森林或者會走下山谷。各種群落(包括鹿和鳥)有各自的規則。你在世界上移動過程中,這些動物群會動態生成的。
總結
以上是生活随笔為你收集整理的用UE4创造开放世界:Kite 实时演示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity联网游戏基础原理与字节数组
- 下一篇: The world at your fi