UE4風(fēng)格化場(chǎng)景全流程——①項(xiàng)目設(shè)置及地形創(chuàng)建
【中字】虛幻引擎UE4創(chuàng)建風(fēng)格化場(chǎng)景全流程教學(xué)
【UE4風(fēng)格化】【人工翻譯】虛幻4風(fēng)格化環(huán)境制作教程
本文為up學(xué)習(xí)筆記及踩坑記錄,會(huì)結(jié)合我知道的知識(shí)點(diǎn)擴(kuò)展
項(xiàng)目源文件請(qǐng)到上面視頻鏈接的評(píng)論區(qū)下載
歡迎大佬指出我的錯(cuò)誤,若圖片太小請(qǐng)放大觀看(網(wǎng)頁(yè)端縮放瀏覽器)
項(xiàng)目設(shè)置
在編輯-項(xiàng)目設(shè)置中關(guān)閉自動(dòng)曝光,因?yàn)樽詣?dòng)曝光會(huì)根據(jù)相機(jī)位置與視角自動(dòng)改變畫面亮度,導(dǎo)致場(chǎng)景的視覺(jué)變化很大。

接著我們啟用虛擬紋理支持。

再打開(kāi)生成網(wǎng)格體距離場(chǎng),這樣我們就可以訪問(wèn)屏幕空間全局光照(SSGI)這樣的功能,我們可以獲得距離場(chǎng)照明、距離場(chǎng)環(huán)境遮擋等實(shí)時(shí)功能。我們的場(chǎng)景將是完全實(shí)時(shí)的,不會(huì)烘培任何照明信息。

然后根據(jù)提示重啟引擎,引擎會(huì)重建你的距離場(chǎng)和著色器。
接著我們?cè)趦?nèi)容瀏覽器中右鍵新建文件夾,創(chuàng)建Maps文件夾來(lái)存放地圖數(shù)據(jù)(untiy則慣用Scenes文件夾)。再創(chuàng)建RVT文件夾,即實(shí)時(shí)虛擬紋理(Runtime Virtual Texture)。實(shí)時(shí)虛擬紋理是不存在硬盤的紋理,它們由游戲運(yùn)行時(shí)生成,可以讓我們得到一些非??岬幕旌闲ЧS糜诓?、地形和巖石的高度混合。一個(gè)例子就是,草在使用RVTs時(shí)看起來(lái)更蓬松,在不同地形層之間的顏色顯得更加順暢。

RVTs設(shè)置
在RVTs文件夾里右鍵-材質(zhì)和紋理-運(yùn)行時(shí)虛擬紋理, 創(chuàng)建LandscapeColor實(shí)時(shí)虛擬紋理(名字可按照自己的習(xí)慣設(shè)定),這將作為我們的地形顏色紋理。再創(chuàng)建一個(gè)LandscapeHeight。

在LandscapeColor上雙擊,這個(gè)面板可以控制虛擬紋理的大小(以切片計(jì)算)、每個(gè)切片的大小以及每個(gè)切片邊緣的填充(用于切片間的過(guò)渡)。大家可以按照自己的項(xiàng)目需求更改,這里使用的虛擬紋理大小是2K,這是基于網(wǎng)格體分辨率大小,然后我們把切片大小改為512,不動(dòng)邊緣填充。
虛擬紋理內(nèi)容選擇的是所需材質(zhì)的屬性,通常我們就保留默認(rèn)值(底色Base Color、法線Normal、粗糙度Roughness、高光度Specular)四個(gè)通道,如果你想要減少內(nèi)存與性能負(fù)擔(dān),你也可以只用底色,因?yàn)檫@只是用于表達(dá)顏色的紋理,實(shí)際上我們不需要另外三個(gè)通道。

然后雙擊LandscapeHeight,我們進(jìn)行同樣的操作,需要注意的是這里的紋理大小為1024,虛擬紋理的內(nèi)容為場(chǎng)景高度,因?yàn)檫@個(gè)紋理只用來(lái)儲(chǔ)存我們地形的高度信息。

回到場(chǎng)景,我們要?jiǎng)h除原先的地面Floor,并創(chuàng)建一個(gè)RVT文件夾。在放置Actor面板中搜索運(yùn)行時(shí)虛擬紋理體積,并拖入兩個(gè)到場(chǎng)景的RVT文件夾下。重命名一個(gè)為Color,另一個(gè)為Height。重置他們的位置到坐標(biāo)原點(diǎn)(也可以不這么做),并給他們的虛擬紋理分別賦上LandscapeColor和LandscapeHeight。

接著我們?cè)谝暣暗哪J侥沁M(jìn)入地形模式,我們可以在地形面板中控制地形的分段大小(一塊地形的分辨率)、每個(gè)組件的分段(一個(gè)組件有幾塊地形)、組件的數(shù)量(大地形由幾塊組件拼成)、整體的分辨率。我們創(chuàng)建一個(gè)1×1總分辨率在128的地形。

這里解釋一下,引擎提示光照需要重建,指的是場(chǎng)景中的靜態(tài)光,靜態(tài)光照是沒(méi)有實(shí)時(shí)陰影的。

如果你拖入一個(gè)立方體并移動(dòng),你會(huì)發(fā)現(xiàn)陰影是跟隨立方體的,這是實(shí)時(shí)陰影。而在細(xì)節(jié)面板我們可以看到,天光和立方體是靜態(tài)的,方向光是固定的。此時(shí)我們構(gòu)建光照,引擎提示消失,再拖動(dòng)立方體,就會(huì)發(fā)現(xiàn)地上多了一個(gè)陰影,就是之前烘培到光照貼圖的陰影,且立方體還有個(gè)跟隨著它的實(shí)時(shí)陰影,因?yàn)橐嬲J(rèn)為立方體是靜態(tài)的且這個(gè)陰影沒(méi)有烘培到光照貼圖,所以又彈出了提示,這通常是引擎優(yōu)化的方法,以減少實(shí)時(shí)運(yùn)算。

這個(gè)項(xiàng)目中我們不考慮優(yōu)化,所以不使用烘培照明,在細(xì)節(jié)面板將天光和方向光改為可移動(dòng)的,會(huì)發(fā)現(xiàn)之前烘培的陰影消失了。這種方法比較吃性能。

同時(shí)我們?cè)诖翱陂_(kāi)啟世界場(chǎng)景設(shè)置面板,在面板中找到強(qiáng)制無(wú)預(yù)計(jì)算光照打開(kāi),這會(huì)阻止引擎烘培任何類型光照。我們?cè)僦匦聵?gòu)建一次光照,會(huì)發(fā)現(xiàn)場(chǎng)景亮度不一樣了,這是因?yàn)橹拔覀冇蓄A(yù)先計(jì)算的光照信息,現(xiàn)在就是完全的實(shí)時(shí)光照?qǐng)鼍?。(記得刪除測(cè)試用的立方體)

我們?cè)冱c(diǎn)RVT文件夾下的Color,你可以看到這是一個(gè)沒(méi)有實(shí)體但有原點(diǎn)位置的對(duì)象,我們?cè)诩?xì)節(jié)面板的從邊界構(gòu)造變換中設(shè)置之前創(chuàng)建的地形Landscape為邊緣對(duì)齊Actor,并點(diǎn)擊設(shè)置邊界,Height同理。

接著我們點(diǎn)擊Landscape,在細(xì)節(jié)面板中找到虛擬紋理,添加2數(shù)組元素并賦上我們創(chuàng)建好的LandscapeColor和LandscapeHeight,這是為了保證我們能寫入虛擬紋理。

我們?cè)賱?chuàng)建一個(gè)材質(zhì)文件夾Materials,在其下創(chuàng)建一個(gè)Landscape文件夾放我們地形的材質(zhì),再在其下創(chuàng)建一個(gè)LandscapeMasterMatertial材質(zhì)。

雙擊這個(gè)材質(zhì),在編輯面板右鍵找到Runtime Virtual Texture Output,我們需要這個(gè)材質(zhì)輸出實(shí)時(shí)虛擬紋理到我們的文件中。我們先右鍵找到絕對(duì)世界位置(Absolute?World Position),這個(gè)世界坐標(biāo)有XYZ三個(gè)通道,但我們只需要高度,所以我們右鍵找到遮罩,遮罩的RGB分別對(duì)應(yīng)了XYZ,我們只需要B通道,設(shè)置好后將其連接到WorldHeight上,他會(huì)輸出世界的高度。

保存后我們點(diǎn)擊地形Landscape,將這個(gè)材質(zhì)賦給細(xì)節(jié)-地形-地形材質(zhì),并進(jìn)入地形模式隨便繪制點(diǎn)高度(我做的時(shí)候不知為何無(wú)法進(jìn)入地形編輯模式,一直提示我無(wú)法創(chuàng)建地形,且世界大綱地圖多了一堆莫名其妙的組件,重啟項(xiàng)目后可以正常進(jìn)入地形編輯模式,但卻顯示需要構(gòu)建光照,天光和方向光以及場(chǎng)景的光照設(shè)置全都還原了,RVT和Landscape虛擬紋理的綁定也不見(jiàn)了,只能重新操作,且在沒(méi)有重新構(gòu)建光照的時(shí)候地面會(huì)呈現(xiàn)一個(gè)白色的圓形)。

之后我們回到RVT下的Height再點(diǎn)一下設(shè)置邊界,能看到虛擬紋理上多了一塊小白點(diǎn),就是我們剛剛繪制的高度(感覺(jué)這里有Bug,我重做后不用再點(diǎn)設(shè)置邊界能就能直接顯示)

這個(gè)方向我們可以看到紋理上的像素塊,說(shuō)明紋理的分辨率不夠高,但這樣會(huì)非常消耗資源。

勘誤:我們需要?jiǎng)h除這個(gè)球形反光捕捉器,似乎這就是之前我看到紋理上有一個(gè)白色圓形的原因(這不是必須刪除的)。同樣之前我說(shuō)有Bug的地方,通常設(shè)置材質(zhì)好后繪制高度會(huì)直接更新在高度RVT中,如果沒(méi)有更新說(shuō)明沒(méi)有正常運(yùn)行,請(qǐng)檢查一下設(shè)置邊界按鈕。

我們回到剛剛的地形材質(zhì),這個(gè)案例中我們只用純色,而通常地形材質(zhì)的制作比這難。先右鍵搜索地形層混合(LandscapeLayerBlend),它將混合細(xì)節(jié)面板中的圖層。將它的輸出連到RVT輸出的基礎(chǔ)顏色(Base Color)和地形材質(zhì)的基礎(chǔ)顏色,無(wú)論何時(shí)你想將連接到地形材質(zhì)的屬性通過(guò)虛擬紋理表現(xiàn)出來(lái),都要記得再連接到RVT節(jié)點(diǎn),大部分我們場(chǎng)景中使用的效果都是由RVT實(shí)現(xiàn)的。

我們地形會(huì)有多個(gè)由我們繪制的圖層,就像是PS的圖層,會(huì)顯示在左邊細(xì)節(jié)的圖層面板里,這里我們添加4個(gè)層,每個(gè)層的名字、混合類型和權(quán)重都不同。第一次我們命名為Ground(地面),第二次命名為Grass(草),為了做出層次,第三層命名為GrassDark(深顏色的草),第四層命名為GrassDarker(更深顏色的草)。

之后我們給它賦予顏色,創(chuàng)建一個(gè)三維變量,快捷鍵是鍵盤數(shù)字3+鼠標(biāo)左鍵,再右鍵轉(zhuǎn)換為參數(shù)(也可以直接v+鼠標(biāo)左鍵),并命名為GrassColor,我們給這個(gè)參數(shù)分組為BaseColor以便于管理,再將它輸出到Layer Grass。這里說(shuō)明下材質(zhì)實(shí)例,材質(zhì)實(shí)例是你在材質(zhì)上右鍵創(chuàng)造的副本,也可以認(rèn)為是父子層,它可以避免反復(fù)編譯以優(yōu)化性能。

復(fù)制兩個(gè)這個(gè)參數(shù)并改名為GrassDarkColor和GrassDarkerColor(或自己創(chuàng)建,需要注意三個(gè)參數(shù)都在同一分組),給這三個(gè)參數(shù)從淺到深賦值并連上層混合節(jié)點(diǎn)。

再?gòu)?fù)制兩個(gè)參數(shù)分別命名為GroundColor_1和GroundColor_2,取相近色從淺到深賦值。按住L+鼠標(biāo)左鍵創(chuàng)建Lerp節(jié)點(diǎn),將這兩個(gè)參數(shù)分別輸出到Lerp的A、B。Lerp即為線性插值(linear interpolation),它會(huì)基于權(quán)重顯示輸入的內(nèi)容,即通過(guò)透明度Alpha通道控制兩張圖的顯隱,可用于構(gòu)建平滑的過(guò)度,順帶一提Flowmap也是這種方法。

這我們需要構(gòu)建一張灰度圖(灰度遮罩),當(dāng)灰度圖全黑的時(shí)候就會(huì)顯示第一個(gè)顏色,全白的時(shí)候就會(huì)顯示第二個(gè)顏色。右鍵添加絕對(duì)世界位置,將其連到相除Divide節(jié)點(diǎn)(直接輸出拖至空白處搜索或d+鼠標(biāo)左鍵創(chuàng)建節(jié)點(diǎn)),s+鼠標(biāo)左鍵直接創(chuàng)建一維參數(shù)(或數(shù)字1+鼠標(biāo)左鍵后右鍵轉(zhuǎn)化為參數(shù)),命名為GroundMaskSize,默認(rèn)值為2000,我們用這個(gè)參數(shù)控制世界絕對(duì)位置貼圖的尺寸,即這個(gè)遮罩能覆蓋多大的地形,我們只輸出XY軸坐標(biāo),即UV坐標(biāo),所以再創(chuàng)建一個(gè)只有RG通道的遮罩(RG對(duì)應(yīng)XY軸),連接后輸出至Texture Sample。

回到內(nèi)容瀏覽器,我們新建一個(gè)Textures文件夾用于存放貼圖,下載項(xiàng)目文件搜索uniformcloud并拷貝到自己的文件夾,回到材質(zhì)編輯器選用剛剛的貼圖。

將Lerp連至Layer Ground,再創(chuàng)建一個(gè)默認(rèn)值為1的Roughness參數(shù),用于控制粗糙度。我們把GoundMaskSize(地面遮罩大?。┓纸M至ColorVariation(顏色變化),Roughness(粗糙度)分組至MaterialParameters(材質(zhì)參數(shù))。

回到場(chǎng)景進(jìn)入地形編輯模式,點(diǎn)擊繪制,會(huì)發(fā)現(xiàn)之前的設(shè)置的層已經(jīng)出現(xiàn)在了左側(cè)目標(biāo)層里。(視頻中失敗了,他給材質(zhì)創(chuàng)建了個(gè)材質(zhì)實(shí)例重新賦值給了地形,若有人失敗了可以嘗試這么做)

我們?cè)贚andscape下創(chuàng)建一個(gè)Layerinfos文件夾用于儲(chǔ)存層信息,在目標(biāo)層中選擇一層點(diǎn)加號(hào),創(chuàng)建權(quán)重混合層(法線),這和我們?cè)诓馁|(zhì)編輯器Layer Blend中看到的混合類型一樣。為每一層都創(chuàng)建層信息,會(huì)發(fā)現(xiàn)地形變?yōu)榱薌round層顏色,簡(jiǎn)單繪制后如圖下。當(dāng)你選中一層進(jìn)行繪制的時(shí)候,它會(huì)為你畫的每一個(gè)物體編譯一個(gè)著色器(我做的時(shí)候目標(biāo)層材質(zhì)預(yù)覽會(huì)突然消失,不知道是不是在編譯shader的緣故),所以你需要為每一層畫上幾筆讓引擎編譯好全部著色器。

可以看到邊緣有明顯的鋸齒,這是因?yàn)槲覀兊匦畏直媛什桓?,我們可以在地形工具設(shè)定里勾選使用目標(biāo)值讓它一定程度上更光滑,不過(guò)當(dāng)?shù)匦味间伾喜葸@些瑕疵就不容易看出來(lái)了。我們也可以調(diào)整工具強(qiáng)度,試著畫幾筆,可以看到它在顏色混合上非常強(qiáng)大,使用不同強(qiáng)度繪畫時(shí),變化是緩慢而穩(wěn)定的,這對(duì)我們草的顏色有很大的影響(現(xiàn)實(shí)中草的顏色變化往往是一塊一塊緩慢而又連續(xù)的)。你也可以打開(kāi)材質(zhì)實(shí)例調(diào)整GroundMaskSize改變地面遮罩大小,200~500(最終設(shè)置)看看有什么變化(我是看不出來(lái)[/doge])。

拓展內(nèi)容:在Textures文件夾下新建Noise文件夾,用來(lái)儲(chǔ)存噪波紋理,將之前的uniformclouds移動(dòng)到里面,在下載的項(xiàng)目中找到alph_1復(fù)制到這個(gè)文件夾下。因?yàn)橐曨l中是UE4.26且用了舊的窗口UI,所以功能位置會(huì)有些不一樣。我們?cè)诘匦卫L制模式下點(diǎn)擊視窗上方的循環(huán),改為Alpha,即為根據(jù)透明通道進(jìn)行繪制,選擇我們剛剛導(dǎo)入的alph_1作為紋理。可以看到筆刷形狀已經(jīng)發(fā)生改變了,可以用這種方法自定義不同的筆刷,但清晰度還是取決于我們的地形分辨率。

