目標(biāo):弄個(gè)草帽團(tuán)的海盜旗,通過shader讓它有飄揚(yáng)的效果,因?yàn)槲乙蔀楹Y\王(不是他的男人)
最終效果如下:
其實(shí)效果還差的很遠(yuǎn),就大概有這么個(gè)意思吧,好歹讓它先動(dòng)起來
旗子用的是plane,不要用cube,這是基于頂點(diǎn)計(jì)算的,cube算來算去只有八個(gè)頂點(diǎn),根本飄不起來
而且我們把plane繞x軸轉(zhuǎn)90度把它立起來
所以它本身的坐標(biāo)是:
x軸水平向右,z軸垂直向下,y軸垂直向里
shader代碼:
//1.
Shader "Custom/SKFlag" {
Properties{
_MainTex("Main",2D)=""{}
_A("A",range(0.1,3))=1
_F("F",range(0.1,2))=1
_Edge("Edge",range(-10,10))=0
_TimeScale("TimeScale",range(0,20))=2
}
SubShader {
pass{
cull off //2.
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float _A;
float _F;
float _TimeScale;
float _Edge;
struct v2f{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos=v.vertex;
if(o.pos.x>_Edge) //3.
{
o.pos.y+=_A*0.8*sin(_F*(o.pos.x+o.pos.z)+_Time.y*_TimeScale*0.6); //4.
o.pos.z+=_A*0.3*sin(_F*(o.pos.x+o.pos.y)+_Time.y*_TimeScale*0.6); //5.
}
if(o.pos.x>-1)
{
o.pos.y+=_A*0.3*sin(_F*(o.pos.x+o.pos.z)+_Time.y*_TimeScale*0.8);
}
if(o.pos.x>1)
{
o.pos.y+=_A*0.8*sin(_F*(o.pos.x+o.pos.z)+_Time.y*_TimeScale*0.8);
o.pos.x+=_A*0.2*sin(_F*(o.pos.z+o.pos.y)+_Time.y*_TimeScale*0.3);
}
if(o.pos.x>3)
{
o.pos.y+=_A*0.8*sin(_F*(o.pos.x+o.pos.z)+_Time.y*_TimeScale*0.2);
}
o.pos=mul(UNITY_MATRIX_MVP,o.pos);
o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
fixed4 frag(v2f IN):COLOR
{
fixed4 col=tex2D(_MainTex,IN.uv);
return col;
}
ENDCG
}
}
}
先看一個(gè)函數(shù):f(x)=Asin(ωx+φ)
A:振幅,函數(shù)大值為A,最小值為-A;ω:角頻率 ;φ:初相,即x=0時(shí)的相位ωx+φ
再看我們的代碼
定義的屬性中有主材質(zhì),放海盜旗的圖
_A:振幅
_F:角頻率
_TimeScale:時(shí)間函數(shù)乘上的系數(shù)
_Edge:這個(gè)是x方向坐標(biāo)的邊界后面說明
cull off
默認(rèn)是剔除背面
cull back
也就是plane只能看到一面,而看不到另一面的原因,改成cull off,不剔除背面,則兩面都是旗子
這里是第一個(gè)判斷處
if(o.pos.x>_Edge) //3.
縱觀整個(gè)代碼,旗子在三個(gè)方向都會(huì)有波動(dòng),但是,如果旗子是插在旗桿上的話,那與旗桿的連接處是不應(yīng)該有波動(dòng)的
也就是圖中旗子在x軸方向上的最左側(cè),即x值最小處
經(jīng)過試驗(yàn),這個(gè)值應(yīng)該是 -5,所以我設(shè)置的_Edge為 -4.9,那么只有在x坐標(biāo)大于這個(gè)值的部分,plane才會(huì)波動(dòng)
這些,還有下面的那些就是讓plane產(chǎn)生波動(dòng)的計(jì)算了
_A是波動(dòng)(飄揚(yáng))的大幅度,_Time是時(shí)間向量,好像也是四維的,xyzw
_Time.y*_TimeScale
這個(gè)可以看作是波動(dòng)的頻率快慢吧
調(diào)整_TimeScale的值越大,波動(dòng)的越快
而_F*(...)呢,我的理解是影響波長(zhǎng),_F越大,波長(zhǎng)越小,同一時(shí)間旗子上的波峰波谷越多,反之越少
不知道理解的正不正確,反正出來的效果差不多是這樣
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞名稱:ShaderLab學(xué)習(xí)小結(jié)(十七)草帽團(tuán)的旗子-創(chuàng)新互聯(lián)
標(biāo)題來源:http://aaarwkj.com/article28/dpjjjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、搜索引擎優(yōu)化、Google、服務(wù)器托管、用戶體驗(yàn)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容