運行環(huán)境:
Win10 x64
Unity 5.5.4
在場景中創(chuàng)建一個cube,使它的顏色產(chǎn)生簡單的兩種顏色過渡的漸變效果,如下圖:
先說一下CG語言中的lerp函數(shù)
lerp(a, b, w);
a與b為同類形,即都是float或者float2之類的,那lerp函數(shù)返回的結(jié)果也是與ab同類型的值。
w是比重,在0到1之間
當w為0時返回a,為1時返回b,在01之間時,以比重w將ab進行線性插值計算。
功能很簡單,實現(xiàn)也很簡單。
Shader代碼:
Shader "Custom/TestRedYellow" {
Properties{
_MainColor("MainColor", color) = (0,1,0,1) //第一種顏色:綠
_SecondColor("SecondColor", color) = (1,0,0,1) //第二種顏色:紅
_Center("Center", range(-0.51,0.51)) = 0 //中心點y坐標值
_R("R", range(0,1)) = 0.2 //產(chǎn)生漸變的范圍值
}
SubShader {
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
fixed4 _MainColor;
fixed4 _SecondColor;
float _Center;
float _R;
struct v2f {
float4 pos:POSITION;
float y : TEXCOORD0;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.y = v.vertex.y;
return o;
}
fixed4 frag(v2f IN):COLOR
{
float y = IN.y;
float s = y -( _Center - _R/2);
float f = saturate(s / _R);
fixed4 col = lerp(_MainColor, _SecondColor, f);
return col;
}
ENDCG
}
}
}
對y值的判斷和顏色的插值要寫在片斷程序中才能產(chǎn)生圖上的漸變效果,寫在頂點程序中是不行的,因為只有八個角八個頂點,非紅即綠,不會有顏色漸變。
但是要在頂點程序中獲取物體坐標系下的y坐標,所以結(jié)構(gòu)體中定義了y,且在頂點程序中賦值:
o.y = v.vertex.y;
再在片斷程序中獲取:
float y =IN.y;
以_R為范圍,其實是在中心點_Center兩端從-R/2到R/2這個范圍中
這個顏色漸變的范圍的起點應(yīng)該是:(_Center-R/2)。
float s = y -( _Center - _R/2);
(注意:Center-R/2為顏色漸變的范圍的起點y坐標,或者說是范圍的下端點坐標,范圍長度是_R。
這個起點可以根據(jù)需要自己調(diào)整,也可以就是_Center,或者別的值。)
代碼中插值函數(shù)的比重 f為:
float f = saturate(s / _R);
當s<0時,即y坐標在_Center以下,且距_Center大于_R/2的距離,f=0,則返回的顏色為_MainColor,即我們定義的綠。
當s>_R時,即y坐標在_Center以上,且距_Center大于_R/2的距離,f=1,則返回的顏色為_SecondColor,即我們定義的紅。
這樣,最終結(jié)果為,以cube的y坐標_Center為中心,以長度為_R的(_Center-_R/2, _Center+_R/2)為范圍,對_MainColor和_SecondColor進行漸變處理。小于此范圍的顯示_MainColor,大于此范圍的顯示_SecondColor。
Unity的Inspector面板中的材質(zhì):
我們將中心點_Center設(shè)置為0,即cube中心,漸變范圍_R設(shè)置為1
這樣就能實現(xiàn)cube從下至上整體的從綠到紅的顏色漸變了(看起來效果比較明顯)
將_R調(diào)節(jié)至0,即漸變范圍為0,不漸變
綠到紅沒有任何過度,有明確的分界線
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前標題:ShaderLab學習小結(jié)(七)用插值函數(shù)lerp漸變顏色-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://bm7419.com/article28/ighjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站導航、微信公眾號、企業(yè)網(wǎng)站制作、面包屑導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容