Unity Shader - 一些玩具Shader

壓扁效果

Squash

利用這個可以實(shí)現(xiàn)《跑跑卡丁車》那種被門壓扁然后復(fù)原的效果注益。
主要思路就是從上到下對頂點(diǎn)進(jìn)行偏移。
首先是給出頂和底的Y坐標(biāo)晾匠,以便對所有頂點(diǎn)的Y坐標(biāo)進(jìn)行歸一化:

//Properties
_TopY("Top Y", Float) = 0 //The top Y of the GameObject in world coord
_BottomY("Bottom Y", Float) = 0 
//CGPROGRAM
float GetNormalizedDist(float worldPosY)
{
    float range = _TopY - _BottomY;
    float border = _TopY;

    float dist = abs(worldPosY - border);
    float normalizedDist = saturate(dist / range);
    return normalizedDist;
}
//Vertex
float worldPosY = mul(unity_ObjectToWorld, v.vertex).y;
float normalizedDist = GetNormalizedDist(worldPosY);

然后就是根據(jù)我們的控制值呀癣,讓對應(yīng)的頂點(diǎn)進(jìn)行偏移:

float3 localNegativeY = mul(unity_WorldToObject, float4(0, -1, 0, 1)).xyz;
float val = max(0, _Control - normalizedDist);
v.vertex.xyz += localNegativeY * val;

完整代碼點(diǎn)這里


被門吸收

BornFromY場景

類似被一扇特殊的門給吸收了食磕,或者反過來是從門那里產(chǎn)生球出來。
其實(shí)思路和上面的壓扁效果是相近的答憔,都是對頂點(diǎn)進(jìn)行偏移味赃,只不過這個是向上偏移,并且對超過頂端的部分進(jìn)行clip虐拓。

//vertex
float3 localPositiveY = mul(unity_WorldToObject, float4(0, 1, 0, 1)).xyz;
float normalizedDist = GetNormalizedDist(worldPos.y);
float val = max(0, _Control - normalizedDist);
v.vertex.xyz += localPositiveY * val;
//fragment
clip(_TopY - i.worldPos.y);

完整代碼點(diǎn)這里


黑洞吸收

BlackHole場景

這個是上面[被門吸收]的進(jìn)一步改變心俗,這次頂點(diǎn)的移動方向改為向某個點(diǎn)(即圖中黑洞),然后對X方向超過黑洞的部分clip掉。

//Vertex
float3 toBlackHole = mul(unity_WorldToObject, (_BlackHolePos - worldPos)).xyz;
float normalizedDist = GetNormalizedDist(worldPos.x);
float val = max(0, _Control - normalizedDist);
v.vertex.xyz += toBlackHole * val;
//Fragment
clip(_BlackHolePos.x - i.worldPos.x);

完整代碼點(diǎn)這里


殘影

GhostShader場景

思路是另外用一個Pass來渲染殘影城榛,而殘影有兩個主要實(shí)現(xiàn)點(diǎn)揪利,其一是偏離本位,其二是殘影自身的抖動狠持。
首先是殘影偏離本位疟位,這個比較簡單,向特定方向整體移動殘影即可:

v.vertex += _Offset * cos(_Time.y * _ShakeSpeed) * _ShakeDir; //偏移

然后就是讓殘影抖動喘垂,我這里是讓本地坐標(biāo)十倍x(即原來x的第一位小數(shù))的偶數(shù)部分頂點(diǎn)進(jìn)行偏移:

float yOffset = 0.5 * (floor(v.vertex.x * 10) % 2);
v.vertex += _ShakeLevel * yOffset * sin(_Time.y * _ShakeSpeed) * _ShakeDir; //抖動

渲染殘影的主要代碼如下:

v2f vert(appdata_base v)
{
    float yOffset = 0.5 * (floor(v.vertex.x * 10) % 2);

    v2f o;
    v.vertex += _Offset * cos(_Time.y * _ShakeSpeed) * _ShakeDir * _Control; //偏移
    v.vertex += _ShakeLevel * yOffset * sin(_Time.y * _ShakeSpeed) * _ShakeDir * _Control; //抖動
    o.vertex = UnityObjectToClipPos(v.vertex);

    o.uv = v.texcoord;
    return o;
}

fixed4 frag(v2f i) : SV_Target
{
    return fixed4(tex2D(_MainTex, i.uv).rgb * _GhostColor, _GhostAlpha);
}

完整代碼點(diǎn)這里


折紙

PaperFold場景

思路是對頂點(diǎn)以折疊處為中心進(jìn)行旋轉(zhuǎn)甜刻。如果只是折疊一邊,則只旋轉(zhuǎn)一邊正勒;如果折疊兩邊得院,則兩邊一起旋轉(zhuǎn)
主要代碼如下:

float angle = _FoldAngle;
float r = _FoldPos - v.vertex.x;

#if ENABLE_DOUBLE
  if(r <= 0)
    angle = 360 - _FoldAngle;
#else
  if(r <= 0)
    angle = 180;
#endif

v.vertex.x = _FoldPos + r * cos(angle * UNITY_PI / 180);
v.vertex.y = r * sin(angle * UNITY_PI / 180);

完整代碼點(diǎn)這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市章贞,隨后出現(xiàn)的幾起案子尿招,更是在濱河造成了極大的恐慌,老刑警劉巖阱驾,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件就谜,死亡現(xiàn)場離奇詭異,居然都是意外死亡里覆,警方通過查閱死者的電腦和手機(jī)丧荐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧枷,“玉大人虹统,你說我怎么就攤上這事∷砩酰” “怎么了车荔?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長戚扳。 經(jīng)常有香客問我忧便,道長,這世上最難降的妖魔是什么帽借? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任珠增,我火速辦了婚禮,結(jié)果婚禮上砍艾,老公的妹妹穿的比我還像新娘蒂教。我一直安慰自己,他們只是感情好脆荷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布凝垛。 她就那樣靜靜地躺著懊悯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梦皮。 梳的紋絲不亂的頭發(fā)上炭分,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音届氢,去河邊找鬼欠窒。 笑死覆旭,一個胖子當(dāng)著我的面吹牛退子,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播型将,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼寂祥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了七兜?” 一聲冷哼從身側(cè)響起丸凭,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腕铸,沒想到半個月后惜犀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狠裹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年虽界,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛菠。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡莉御,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俗冻,到底是詐尸還是另有隱情礁叔,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布迄薄,位于F島的核電站琅关,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讥蔽。R本人自食惡果不足惜死姚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勤篮。 院中可真熱鬧都毒,春花似錦、人聲如沸碰缔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瀑焦,卻和暖如春腌且,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榛瓮。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工铺董, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禀晓。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓精续,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粹懒。 傳聞我的和親對象是個殘疾皇子重付,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,839評論 25 707
  • 可能是特有的冬天綜合癥吧 最近也是矯情的要死 感覺心口好悶 快要喘不過氣來 宿舍六個倔強(qiáng)的女子到現(xiàn)在也不打算開空調(diào)...
    酷到骨子里的七七閱讀 333評論 0 0
  • 忙忙碌碌十來天過去了,女兒去西安也有近半月了凫乖。擋不住的思念在心頭蔓延确垫。每一次拿起電話撥打女兒電話,聽著電話那頭嘟嘟...
    任亞閱讀 192評論 0 0
  • 如果你愛上一個姑娘 你從未計(jì)算過與她相遇的概率 你也沒能預(yù)料與她的結(jié)局 你會第一次手足無措 你會流露我從沒看到的溫...
    一盎司妖怪閱讀 288評論 0 2
  • 阿里對農(nóng)村合伙人有何要求帽芽? 合格的人選必須是年輕的本地人删掀、大專以上文化程度、有相關(guān)經(jīng)驗(yàn)导街、能扎根農(nóng)村披泪。年輕才有創(chuàng)意,...
    村淘充電寶閱讀 224評論 0 0