前言:由於被刪兩次,這次把圖截清一點,並且把代碼發出來吧,就不放外部鏈接了。本文僅做心得分享,偏美術向審美向,不保證能適用於任何項目,不保證低性能消耗,不建議直接用在商業項目;本文也不是商業教程,也只能是盡量闡述製作過程和思路,不打包票能學會。

目標效果:

之前無意中在花瓣看到了這張圖,就想在虛幻4裡面以這個圖作為效果參考,實現一下類似效果。

圖片出處Australian artist Tanya Schultz works as Pip & Pop to create immersive installations and artworks from an eclectic range of materials including sugar, glitter, candy, plastic flowers, everyday craft materials and all sorts of objects she finds on her travels.?

www.pipandpop.com.au

  • Part1前期製作

模型製作:

設定島的大小
彩虹環,先用一個面片把UV鋪平,通過樣條線變形凹成環形
用球刪掉一大半做小沙丘
彩虹島基礎形狀,盡量圓潤一點,讓整體圓滑些,不需要分展UV

貼圖製作:

在SD裡面使用漸變和噪波混合一下映射一下漸變,顏色找不著準可以去吸色然後減點,挑幾個好看的顏色做漸變映射,可以再用tiling處理一下隨機性和連續性。

從Substance Painter導出來的暗花法線和別的地方找的法線

用於模擬糖粒或者砂礫朝個方向的法線,之前做的時候找了很多素材還是這張好使
這個圖就隨意了,看個人喜好來加,只是為了增加點細節罷了

Part2:引擎部分

1、先做個世界位置投射的材質函數,做成材質函數為了方便後面通用,需要調整的一些參數都放在了材質參數集裏,確保在別的地方調用的時候tiling值是一致;

2、島基材質,島基不需要做特殊處理,就把上面做的材質函數連到材質球的pin口上,創建實例附到島上即可;

效果預覽

3、小沙丘材質製作

首先需要在項目設置裏先把距離場打開

材質全圖

①、先一通計算距離場的蒙版,如果需要打破蒙版的呆板可以用vertex color在模型上畫一下;

預覽效果

②、算出來的蒙版經過DiterTemporalAA讓一些像素往後偏移;

③、騷操作來了,我們小沙丘的模型是一個小突起,如果直接放到場景裏是這樣的,在與地面銜接的地方會有明顯的邊界,即使加了上面的像素深度偏移,

小沙丘和地面的法線方向

我們從世界法線方向的角度去考慮問題,就需要像接的地方的法嚮往上掰,然後和原本的世界法線方向進行插值,於是,我們把切線法線貼圖轉換到世界法線再和切線法線混合,切線法線如果直接用在世界法線上剛好就是一個朝上的方向,(alpha連接的是距離場蒙版)

原理同:

如果沒有法線貼圖參與的話是這麼個思路,alpha依然是連接的距離場蒙版
原理圖解

一通計算之後我發現陰影有點重又混合了0.5的(0,0,1)然後normalize一下直接輸出到法線上,因為計算時使用的是世界法線,所以我們要在材質的屬性裡面吧使用切線法線的勾去掉,當然你也可以先自己transfrom一下,

去掉√
一通計算之後我們得到的世界法線是這樣子的

④、法線計算完了,我們開始做基礎顏色部分,我希望小沙丘是隨機顏色的,而這個顏色又是和底下的顏色不違和的,於是我就想

顏色貼圖上隨機隨機查找一點作為我們沙丘的顏色,然後我想了一下,好像沒有現成的random float的節點,於是我們就可以去UE的usf,ush裡面找一找,在

引擎版本EngineShadersPrivate裏有一個Random.ush

在vscode打開於是我找到這個

家裡的VScode沒有關聯ush和usf,如何配置可以去參考摳腳大佬知乎的文章

這函數可以直接在custom裡面調用,我觀察了一下貼圖u=v查找的顏色應該也夠用了(相當於是在對角線上查找顏色),所以就沒把uv拆開,如果你的圖顏色分佈不那麼均勻或者別的話可以U和V輸入分別調用這個函數一次並輸入不同的seed;

小沙丘基本計算完畢,創建實例調參

效果預覽

4、糖果材質製作

糖果這裡幾乎沒什麼特殊的計算技巧,主要還是分享一個思路吧

①、新建一個材質球,shading model改為 Two Sided Foilage

②、用菲尼爾同時控制次表面的不透明度和和自發光,這個菲涅算出來邊緣是黑的,也就是說邊緣越薄越透光,中間透光度低,但是同時會增加自發光的比重;

③、調參,我們通常畫畫的時候為了表現一個東西很透亮,會把亮部顏色壓下去,把暗部邊緣的顏色純度提高;在這種繪畫思想指導下所以我們把基礎顏色的明度調壓暗,在低明度的Diffuse下IBL效果也會弱化,自發光給一點,就想氣球果凍一類的膠體應該會受到四面八方的來的光再從體內散發出去因為乘了一下菲尼爾相當於是光線從一頭射向另一頭的時候已經衰減了,光的能量累加衰減balbala???(我瞎想的反正就是加個菲尼爾x自發光顏色好看,調這個色的時候注意搭配就行),把SubsfaceColor調純亮一點點,然後把整體不透明度在菲尼爾控制下整體壓低一點但是要保留一點菲尼爾的效果,粗糙度要給一點不然會太光滑,期初的目的是為了調類似橡皮糖一樣的效果有點粗糙,有點透光,亮部暗,暗部亮,有高光;

如果你調不出來可以吸色拿這個參數調

5、流流糖漿

主要分成兩個思路,一個是位置偏移,一個是法線縮放,

表面和次表面和糖果相同

①、先算出約束偏移的蒙版,因為有些地方你並不需要他動得太多,你可以通過各種方法計算,手繪貼圖或者頂點著色都可以只是個蒙版不用糾結;

②、算個縮放噪波和法線

通過time+世界位置去更新噪波position,並通過PreparPerturbNormalHQ和PreturbNormalHQ把function轉換成法線

Aplpha連的約束蒙版,也可以換成距離場,這裡原理和上面做小沙丘的原理類似,就是根據蒙版來把法線往上掰,掰彎轉成切線法線
高亮的Alpha連的前面計算的noise

③、世界位置偏移計算

這一步我也忘記為什麼沒用了反正,可以用本地的,你們可以自己試試
來一些蜜汁常數,各種panner, append,算出三個差異化較大的噪波,然後appen在一起
上面計算的結果歸一化一下,乘個偏移強度,alpha依舊是連第一步計算的蒙版,讓某些地方不要偏移太厲害,指直接lerp 0讓某些地方動弱一點

④、把上面兩個結果lerp一下

和②的第三張圖位置是一樣的,然後連接到世界位置

然後調調參數

5、水波紋糖漿

最開始用了極坐標去算波紋但是效果不理想,最後是在max裏把圓柱兩頭的面刪掉,然後把一一頭所有點壓在一起,然後把整個柱子壓扁,然後在SubstanceDesinger裏算了兩張波紋圖,用UV動畫實現;

稍微地編一下,加點素材,房子樹木用的是LowpolyStyle,天空球用的UltraDynamicSky

視頻封面

01:05
推薦閱讀:
相關文章