用Shader Graph的Flipbook節(jié)點實現(xiàn)水花效果

一個有趣的教程

昨天看了一個老外的視頻教程:Rain Drop Ripples惨远,教程用 Shader Graph 實現(xiàn)了游戲中常見的下雨天地面的水花效果。

視頻中水花動畫的實現(xiàn)和我們游戲的實現(xiàn)方式有所不同话肖,他通過 Shader GraphFlipbook 節(jié)點實現(xiàn)了水花的 序列圖 動畫:

image

上圖中的 Flipbook 節(jié)點對應的代碼如下:

float2 _Flipbook_Invert = float2(FlipX, FlipY);

void Unity_Flipbook_float(float2 UV, float Width, float Height, float Tile, float2 Invert, out float2 Out)
{
    Tile = fmod(Tile, Width * Height);
    float2 tileCount = float2(1.0, 1.0) / float2(Width, Height);
    float tileY = abs(Invert.y * Height - (floor(Tile * tileCount.x) + Invert.y * 1));
    float tileX = abs(Invert.x * Width - ((Tile - Width * floor(Tile * tileCount.x)) + Invert.x * 1));
    Out = (UV + float2(tileX, tileY)) * tileCount;
}

代碼比較好理解北秽,根據(jù)當前動畫的幀號 Tile 換算出對應的紋理坐標。

以下面這張 4x4 的水花序列圖(需轉(zhuǎn)為法帖)為例狼牺,傳入 Width = 4羡儿,Height = 4Tile = _Time.x * AnimSpeed是钥,我們就能算出 Out UV掠归。

image

有了 Out UV后缅叠,我們解碼水花法帖得到當前幀水花法線,再和地表的法線 混合虏冻,就大功告成了肤粱,如下圖:

image

當然,這只是最簡單的效果厨相,下面我們看一下更多的細節(jié)领曼。

更多細節(jié)

關于UV的frac操作

Unity_Flipbook_float 的代碼可知,傳入的參數(shù) UV 必須在 [0,1] 之間蛮穿,而我們一般會對 UVTiling 操作庶骄,Tiling 的結(jié)果往往是超過1的。

這時践磅,我們需要對 Tiling 的結(jié)果做一個 frac 操作单刁,只保留小數(shù)部分,否則動畫會抽風府适。

image

多層水花疊加和加入噪音

為了讓水花更加自然羔飞,一般我們會根據(jù) Tiling 不同至少做 2層水花疊加,并且會引入 噪聲 讓它的變化不那么規(guī)律檐春。

這里作者通過 Voronoi noise 來控制兩層水花的 法線強度

image

效果如下:

image

混合水花和水流

單獨有水花還是不夠的逻淌,水花配合水流 才是王道。

水流的實現(xiàn)可以參考前文 潮濕效果之水紋疟暖。

此外卡儒,有的時候,美術(shù)并不希望水流有明顯的流向誓篱,這個時候我們可以做2張水流貼圖朋贬,讓他UV動畫對沖,示意代碼如下:

half3 SGameWetBump(float3 worldPos, half3 worldNormal)
{
    half2 flowUV = half2(worldPos.x, worldPos.z);

    half3 flowBump1 = tex2D(_SG_WetBumpMap1, flowUV * _SG_WetBumpTilingOffset1.xy + _SG_WetBumpTilingOffset1.zw * _Time.y);
    half3 flowBump2 = tex2D(_SG_WetBumpMap2, flowUV * _SG_WetBumpTilingOffset2.xy + _SG_WetBumpTilingOffset2.zw * _Time.y);

    half3 flowBump = flowBump1 - flowBump2;
    half3 bumpNormal = lerp(half3(0,0,1), flowBump, _SG_WetFactor);

    return bumpNormal;
}    

這樣窜骄,我們的水花只做一層锦募,效果也能接受,如下圖:

image

個人主頁

本文的個人主頁鏈接:https://baddogzz.github.io/2020/03/16/Flipbook-Ripples/邻遏。

好了糠亩,拜拜!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末准验,一起剝皮案震驚了整個濱河市赎线,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糊饱,老刑警劉巖垂寥,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡滞项,警方通過查閱死者的電腦和手機狭归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來文判,“玉大人过椎,你說我怎么就攤上這事∠凡郑” “怎么了疚宇?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赏殃。 經(jīng)常有香客問我敷待,道長,這世上最難降的妖魔是什么仁热? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任讼撒,我火速辦了婚禮,結(jié)果婚禮上股耽,老公的妹妹穿的比我還像新娘。我一直安慰自己钳幅,他們只是感情好物蝙,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著敢艰,像睡著了一般诬乞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钠导,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天震嫉,我揣著相機與錄音,去河邊找鬼牡属。 笑死票堵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逮栅。 我是一名探鬼主播悴势,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼措伐!你這毒婦竟也來了特纤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤侥加,失蹤者是張志新(化名)和其女友劉穎捧存,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡昔穴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年镰官,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻咖。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋魔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卿操,到底是詐尸還是另有隱情警检,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布害淤,位于F島的核電站扇雕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窥摄。R本人自食惡果不足惜镶奉,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崭放。 院中可真熱鬧哨苛,春花似錦、人聲如沸币砂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽决摧。三九已至亿蒸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掌桩,已是汗流浹背边锁。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留波岛,地道東北人茅坛。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像则拷,于是被迫代替她去往敵國和親灰蛙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容