最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何用 UE 高效生成細(xì)節(jié)豐富的《重生邊緣》野外場景(上)

2022-03-01 17:20 作者:NExTStudios  | 我要投稿

“過程化內(nèi)容生成”也叫“程序內(nèi)容生成”(Procedural Content Generation=PCG),是一種自動為游戲、模擬或電影創(chuàng)建數(shù)字資產(chǎn)的方式,可以大大提高內(nèi)容生成的效率。

NExT Studios 在使用虛幻引擎4開發(fā)《重生邊緣》(SYNCED:Off-Planet)的過程中,在過程化生成場景方面進(jìn)行了一些嘗試:除了介紹各種生成內(nèi)容的思路外,還分享了針對過程化生成工具加入場景制作后,如何解決新的工具在實際工作中遇到的各種問題,以及一些實驗性工作分享

招聘在文末,帶你職場重生?(? ???)??


直達(dá)現(xiàn)場

? 視頻來自Unreal Open Day 2021虛幻引擎技術(shù)開放日現(xiàn)場演講:《重生邊緣》中的過程化內(nèi)容生成



00:52 《重生邊緣》Trailer搶先看

02:19 主地圖曝光!最初只有3個場景美術(shù),作為中途加入者,會遇到哪些問題?如何提高過程化生成工具的工作效率?


《重生邊緣》主地圖

主地圖3x3公里,大約有 20 個 POI、16 層地表、9 萬多棵樹、30 多種植被、 20 公里長的路和 6 公里的河流。最初除了Unreal Editor之外,我們沒有過程化生成的積累,在加入過程化生成內(nèi)容的時候,也不能覆蓋已有的 prototype 關(guān)卡,同時需要兼顧關(guān)卡美術(shù)和關(guān)卡策劃的操作習(xí)慣(他們在Unreal Editor中進(jìn)行數(shù)據(jù)編輯工作,但過程化生成算法是在Houdini中實現(xiàn),需要導(dǎo)入導(dǎo)出數(shù)據(jù)),各個生成元素之間有一定數(shù)據(jù)依賴關(guān)系(比如河流改動會影響地形的高度圖和材質(zhì)層,地形高度圖改動也會影響到植被的分布等)......我們面臨許多挑戰(zhàn)。

我們開發(fā)了約30個工具,但因為場景中每個 POI 的風(fēng)格和設(shè)計都非常不一樣,較難提取統(tǒng)一的理性規(guī)律,所以工具的目的是調(diào)整關(guān)卡布局時,加速周邊環(huán)境的修改,大部分的生成內(nèi)容集中在野外區(qū)域。

場景結(jié)構(gòu)


05:01 地表侵蝕的作用?地表材質(zhì)層的權(quán)重分布如何計算?

把mask轉(zhuǎn)成地形后做侵蝕美化是基礎(chǔ)功能,侵蝕會改變高度圖的表現(xiàn),也會生成地表材質(zhì)層的權(quán)重分布。

侵蝕前后地形對比

地表權(quán)重圖是在Houdini當(dāng)中進(jìn)行計算的,大概原理是:根據(jù)高度圖的斜率計算出大體分布,然后配合例如雨水沖刷的效果,根據(jù)每一層的石頭和沙地的規(guī)則,定義出不同的權(quán)重圖,然后導(dǎo)入引擎,就可以得到混合好的地表效果。


混合好的地表效果

05:56 垂直面地表崖壁巖石如何生成?如何在地表上呈現(xiàn)更豐富的細(xì)節(jié)?人物卡進(jìn)mesh里如何處理?

我們當(dāng)時參考了一些業(yè)界資料,比如《孤島驚魂5》(Far Cry 5)、《刺客信條》(Assassin's Creed)。一開始我們根據(jù)地形的坡度,提取它的區(qū)域轉(zhuǎn)成mesh,然后生成UV,貼上我們想要的紋理后,用displacement map模擬了巖石表面的凹凸,但是近看的效果不理想。于是我們嘗試了另外一種方案——mesh貼片。像貼瓦片一樣,把固定的mesh往所需區(qū)域里重復(fù)粘貼,這樣可以用比較低的面數(shù)達(dá)到更好的效果,因為它的幾何細(xì)節(jié)會更多一些。

mesh貼片效果

在生成崖壁的mesh的時候,崖壁下方和與地表過渡的地方,可以用與巖石紋理類似的地表材質(zhì)來表現(xiàn),因此生成了相應(yīng)的地表材質(zhì)權(quán)重層。還需要處理生成的巖石與地表的過渡:生成mesh的時候,把權(quán)重寫到了頂點色里面,然后采樣地形的紋理做柔和地過渡。巖石下方我們可以生成一些碎石或砂石,這樣會有更具細(xì)節(jié)的地表表現(xiàn)。

增加細(xì)節(jié)前后的巖壁對比

在實際運(yùn)用中還會遇到一些尷尬的問題,例如人物有時會卡在生成的mesh里。這是因為Unreal根據(jù)不規(guī)則的mesh默認(rèn)生成的碰撞體有很大瑕疵,這時我們會針對這些不是閉包類的mesh生成特殊碰撞體,然后再一起導(dǎo)入引擎。

08:27 如何計算獲得視覺均勻的植被分布?植被間距如何考量?如何進(jìn)行撒點操作?

我們參考了《孤島驚魂5》(Far Cry 5),這幾乎是業(yè)界最詳細(xì)的分享。我們的整體生態(tài)和植被組成是不一樣的,我們選擇的是溫帶針葉林。具體做法是:我們根據(jù)高度圖生成各種各樣的mask,再配合噪聲模擬隨機(jī)分布。在此之上,我們可以把光照、風(fēng)向和氣候影響也考慮在內(nèi),生成更多的mask,通過運(yùn)算得到我們想要的分布。

有了植被的區(qū)域后,我們可以在區(qū)域中進(jìn)行撒點操作:一種操作是直接在區(qū)域中進(jìn)行隨機(jī)撒點,另一種是圍繞某個目標(biāo)點周圍進(jìn)行隨機(jī)撒點。我們可以在第二種情況下生成伴生的灌木,一般情況下我們不可能一次只生成一種植被。


兩種撒點方法

我們針對每種植被定義了三種半徑,用來防止樹與樹之間的重合。根據(jù)這些規(guī)則,我們量化這些點的位置,讓離得較近的點更易被判斷。如果這些點都被包圍的時候,我們無法移動把它排除掉,我們就刪掉它。

通過這樣不斷迭代,我們可以獲得非常均勻、沒有互相穿插的效果。但在不同的樹種之間(例如高大的樹木和低矮的灌木間),其實可以有一定的穿插,這是我們定義外半徑和內(nèi)半徑的原因。對于大地圖上的不同的區(qū)域,會有不同的生態(tài)分布。我們可以通過全地圖刷mask來區(qū)分我們每一部分使用怎樣的生成規(guī)則。比如說在海邊,我們會以一些草地沙石為主,山上則以森林為主。

10:55 河流如何生成?下游比上游還要高如何處理?轉(zhuǎn)折度大的河流如何處理平滑?生成完河道之后,地表的紋理細(xì)節(jié)如何調(diào)整?

在《重生邊緣》中,河流是表現(xiàn)類的效果,不影響游戲的玩法,所以過高的高度差、過深的水面都是策劃和美術(shù)不想要的,所以我們希望做很淺的溪流。我們算法上也學(xué)習(xí)過《地平線》(Horizon)的分享,整個生成過程大概分成:

??我們先有大概的曲線,根據(jù)地形高度圖做自然滑落。相當(dāng)于把一條繩子扔在地表上,它會自然地彎曲;

??有些地方地勢比較高,我們可以挖一條河道,這時會改變地形的高度;

??因為我們不想生成過大高度差,從高地往低地過渡時,我們需要形成多級小瀑布;

??然后我們根據(jù)河流的地形地勢分布和彎曲度,生成河面河道寬度的變化。

??最后我們在河道里撒上一些碎石和水花去裝飾,并生成河流的流向。


河流生成過程

河道生成的其他問題:

??支流跟主流交叉的地方,可能高度并不一樣,我們需要對齊高度;

??有可能下游高于上游高度,這時候需要用下游的高度去往上游去做修正;

??轉(zhuǎn)折度較大和多個支流交叉的區(qū)域,我們不可能生成很多層的河面的mesh,所以做平滑處理,從平滑后的河道形狀提取出河面,再對河面mesh進(jìn)行切割和減面,這樣對性能的優(yōu)化很有幫助。

13:49 如何減少河面流向圖的內(nèi)存占用?如何編輯河流的走向和效果?

對于河面的流向圖,如果用全地圖的flow map一張紋理來覆蓋的話,會浪費非常多的UV空間。考慮到更高效性能和更低內(nèi)存占用,我們把流向信息寫到頂點色里,只需占用兩個通道。

生成完河道后,地表的紋理會隨之變化,我們可以鋪設(shè)鵝卵石,或在河岸邊緣生成潮濕泥沙的效果增加河岸表現(xiàn),生成相應(yīng)的植被分布增加細(xì)節(jié)等。

我們使用Unreal Landscape Spline的內(nèi)置功能來對河流進(jìn)行曲線編輯,因為它比較符合美術(shù)的操作習(xí)慣。我們先拖拽出河流經(jīng)過的區(qū)域,然后編輯各個支流大致的路徑,設(shè)置每條支流的起始點,之后一鍵生成。這時候我們可以根據(jù)地勢做自然彎曲,挖出河道、生成地表的紋理,生成河面的mesh,還有河面流向的數(shù)據(jù),包括水花、石頭等等。

16:08 裂縫長草、土路破損、路口過渡、車輪印記等道路上的“細(xì)節(jié)加分項”如何實現(xiàn)?多層貼花的優(yōu)先級如何制定?

游戲當(dāng)中的道路基本是關(guān)卡策劃在編輯,它對玩法是有一定影響的,當(dāng)我們加入做生成工具的時候,路網(wǎng)已有大約百分之八九十的完成度,所以我們并不是生成道路本身的路網(wǎng),而是選擇去增加一些細(xì)節(jié)“加分項”。比如裂縫長草、公路破損、不同道路之間的過渡、交叉口的車輪印記等。

實現(xiàn)的思路就是使用海量貼花(在 GDC 2017 的 Ghost Recon Wildlands: Terrain Tools and Technology 中有類似分享)來實現(xiàn),包括路面的破損、道路中間的車輪印、車道標(biāo)記、水跡效果、路邊的落葉的塵土的效果,都是通過貼花的方式來實現(xiàn)的。但裂縫里長的草不是貼花,是在生成裂縫貼花的時候,順便把裂縫草的位置一起計算出來。

還有一個比較實用的功能,用Unreal Landscape Spline做道路的時候并不能很好地處理交叉口,我們生成了任意角度交叉口的貼花,掩蓋了銜接處的接縫問題。

道路交叉口貼花

有了多層貼花,我們需要定義呈現(xiàn)層次的優(yōu)先級問題,所以我們制定了“同級融合,高級覆蓋低級”的貼花規(guī)則。全體的半透明材質(zhì)的貼花數(shù)量加起來有數(shù)萬個,有很重的overdraw,會帶來非常嚴(yán)重的性能問題。所以我們使用了 Unreal 的Runtime Virtual Texture 來進(jìn)行優(yōu)化,把地表混合的結(jié)果跟道路和貼花混合的結(jié)果緩存到了一張巨大的虛擬紋理上面,可以大大降低地表繪制的開銷。

另外我們在道路曲線計算完畢之后,可以根據(jù)道路曲線的分布來調(diào)整地表的權(quán)重分布。比如我們可以在道路的周邊去生成相應(yīng)地表的過渡效果(裂縫、草、破損塵土、水跡、路口交叉口車輪的印記),另外還有道路的附屬物(比如護(hù)欄、電線桿)等。

針對工具加入場景制作后,如何解決新的工具在實際工作中遇到的各種問題,以及更多實驗性工作的分享,敬請期待下期推送!



??高級技術(shù)美術(shù) (過程化生成)

??游戲引擎工程師 (Engine Programmer)

??UE4 引擎研發(fā)高級工程師

??UE4 Gameplay高級工程師

??UE4 高級技術(shù)美術(shù)

??資深3D角色美術(shù)師


掃碼并點擊菜單欄「招聘」,查看更多職位!




如何用 UE 高效生成細(xì)節(jié)豐富的《重生邊緣》野外場景(上)的評論 (共 條)

分享到微博請遵守國家法律
浦城县| 大洼县| 澎湖县| 南汇区| 镇安县| 陕西省| 黔西县| 澄迈县| 吴川市| 无为县| 永宁县| 新绛县| 垫江县| 谢通门县| 交城县| 石景山区| 姜堰市| 神农架林区| 汾西县| 那曲县| 通江县| 开江县| 西宁市| 平阴县| 且末县| 东阿县| 苗栗市| 拉孜县| 德昌县| 上饶县| 金堂县| 宜都市| 岳西县| 施秉县| 南皮县| 城口县| 湟中县| 宁都县| 桑植县| 神木县| 长丰县|