最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

UnityShader3實(shí)現(xiàn)波浪效果

 更新時(shí)間:2020年04月29日 11:49:43   作者:宏哥1995  
這篇文章主要為大家詳細(xì)介紹了UnityShader3實(shí)現(xiàn)波浪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了UnityShader3實(shí)現(xiàn)波浪效果展示的具體代碼,供大家參考,具體內(nèi)容如下

參考鏈接: 【OpenGL】Shader實(shí)例分析(一)-Wave

效果圖:

1.首先,實(shí)現(xiàn)格子背景圖

Shader "Custom/Curve"
{
 Properties
 {
 _BackgroundColor ("BackgroundColor", Color) = (1, 1, 1, 1)
 _BackgroundColor2 ("BackgroundColor2", Color) = (0, 0, 0, 1)
 _Space ("Space", Range(0, 1)) = 0.2
 _XOffset ("XOffset", Range(-1, 1)) = 0.15
 _YOffset ("YOffset", Range(-1, 1)) = 0.05
 }
 SubShader
 {
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #include "UnityCG.cginc"
 
 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };
 
 struct v2f
 { 
 float4 vertex : SV_POSITION;
 float2 uv : TEXCOORD0;
 };
 
 //格子背景
 fixed4 _BackgroundColor;
 fixed4 _BackgroundColor2;
 fixed _Space;
 fixed _XOffset;
 fixed _YOffset;
 
 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = v.uv;
 
 return o;
 }
 
 fixed4 frag (v2f i) : SV_Target
 {
 //fmod(x, y):x/y的余數(shù),和x有同樣的符號(hào) 
 //step(a, x):如果x<a,返回0;如果x>=a,返回1
 
 //得到一個(gè)小于_Space的余數(shù),即a的范圍為[0, _Space)
 fixed a = fmod(i.uv.x + _XOffset, _Space);
 //有1/2概率返回0,有1/2概率返回1,從而形成間隔效果
 a = step(0.5 * _Space, a);
 
 fixed b = fmod(i.uv.y + _YOffset, _Space);
 b = step(0.5 * _Space, b);
 
 return _BackgroundColor * a * b + _BackgroundColor2 * (1 - a * b);
 }
 ENDCG
 }
 }
}

2.在中間添加一條直線

Shader "Custom/Curve"
{
 Properties
 {
 _BackgroundColor ("BackgroundColor", Color) = (1, 1, 1, 1)
 _BackgroundColor2 ("BackgroundColor2", Color) = (0, 0, 0, 1)
 _Space ("Space", Range(0, 1)) = 0.2
 _XOffset ("XOffset", Range(-1, 1)) = 0.15
 _YOffset ("YOffset", Range(-1, 1)) = 0.05
 }
 SubShader
 {
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #include "UnityCG.cginc"
 
 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };
 
 struct v2f
 { 
 float4 vertex : SV_POSITION;
 float2 uv : TEXCOORD0;
 };
 
 //格子背景
 fixed4 _BackgroundColor;
 fixed4 _BackgroundColor2;
 fixed _Space;
 fixed _XOffset;
 fixed _YOffset;
 
 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = v.uv;
 
 return o;
 }
 
 fixed4 frag (v2f i) : SV_Target
 {
 //fmod(x, y):x/y的余數(shù),和x有同樣的符號(hào) 
 //step(a, x):如果x<a,返回0;如果x>=a,返回1
 
 //得到一個(gè)小于_Space的余數(shù),即a的范圍為[0, _Space)
 fixed a = fmod(i.uv.x + _XOffset, _Space);
 //有1/2概率返回0,有1/2概率返回1,從而形成間隔效果
 a = step(0.5 * _Space, a);
 
 fixed b = fmod(i.uv.y + _YOffset, _Space);
 b = step(0.5 * _Space, b);
 
 fixed4 bgCol = _BackgroundColor * a * b + _BackgroundColor2 * (1 - a * b);
 
 
 //范圍(1, 51),乘上100是擴(kuò)大差距(中間最亮其他兩邊基本不亮),加上1是防止0作為除數(shù),同時(shí)確保最中間最亮
 float v = abs(i.uv.y - 0.5) * 100 + 1;
 v = 1 / v;
 fixed4 lineCol = fixed4(v, v, v, 1);
 
 return bgCol + lineCol;
 }
 ENDCG
 }
 }
}

3.直線變曲線

Shader "Custom/Curve"
{
 Properties
 {
 //調(diào)整背景
 _BackgroundColor ("BackgroundColor", Color) = (1, 1, 1, 1)
 _BackgroundColor2 ("BackgroundColor2", Color) = (0, 0, 0, 1)
 _Space ("Space", Range(0, 1)) = 0.2
 _XOffset ("XOffset", Range(-1, 1)) = 0.15
 _YOffset ("YOffset", Range(-1, 1)) = 0.05
 
 //調(diào)整曲線的波動(dòng)
 _Frequency ("Frequency", Range(0, 100)) = 10//頻率
 _Amplitude ("Amplitude", Range(0, 1)) = 0.1//振幅
 _Speed ("Speed", Range(0, 100)) = 10//速度
 }
 SubShader
 {
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #include "UnityCG.cginc"
 
 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };
 
 struct v2f
 { 
 float4 vertex : SV_POSITION;
 float2 uv : TEXCOORD0;
 };
 
 //格子背景
 fixed4 _BackgroundColor;
 fixed4 _BackgroundColor2;
 fixed _Space;
 fixed _XOffset;
 fixed _YOffset;
 
 half _Frequency;
 half _Amplitude;
 half _Speed;
 
 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = v.uv;
 
 return o;
 }
 
 fixed4 frag (v2f i) : SV_Target
 {
 //fmod(x, y):x/y的余數(shù),和x有同樣的符號(hào) 
 //step(a, x):如果x<a,返回0;如果x>=a,返回1
 
 //得到一個(gè)小于_Space的余數(shù),即a的范圍為[0, _Space)
 fixed a = fmod(i.uv.x + _XOffset, _Space);
 //有1/2概率返回0,有1/2概率返回1,從而形成間隔效果
 a = step(0.5 * _Space, a);
 
 fixed b = fmod(i.uv.y + _YOffset, _Space);
 b = step(0.5 * _Space, b);
 
 fixed4 bgCol = _BackgroundColor * a * b + _BackgroundColor2 * (1 - a * b);
 
 
 //范圍(1, 51),乘上100是擴(kuò)大差距(中間最亮其他兩邊基本不亮),加上1是防止0作為除數(shù),同時(shí)確保最中間最亮
 //float y = i.uv.y + sin(_Time.y);掃描線效果
 float y = i.uv.y + sin(i.uv.x * _Frequency + _Time.y * _Speed) * _Amplitude;//可以看成一條y的關(guān)于x的方程式
 float v = abs(y - 0.5) * 100 + 1;
 v = 1 / v;
 fixed4 lineCol = fixed4(v, v, v, 1);
 
 return bgCol + lineCol;
 }
 ENDCG
 }
 }
}

注釋掉的是掃描線效果:

4.多曲線。其實(shí)就是for循環(huán),然后在頻率和振幅上加些變量,即可形成多條不同的曲線。

Shader "Custom/Curve"
{
 Properties
 {
 //調(diào)整背景
 _BackgroundColor ("BackgroundColor", Color) = (1, 1, 1, 1)
 _BackgroundColor2 ("BackgroundColor2", Color) = (0, 0, 0, 1)
 _Space ("Space", Range(0, 1)) = 0.2
 _XOffset ("XOffset", Range(-1, 1)) = 0.15
 _YOffset ("YOffset", Range(-1, 1)) = 0.05
 
 //調(diào)整曲線的波動(dòng)
 _Frequency ("Frequency", Range(0, 100)) = 10//頻率
 _Amplitude ("Amplitude", Range(0, 1)) = 0.1//振幅
 _Speed ("Speed", Range(0, 100)) = 10//速度
 }
 SubShader
 {
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #include "UnityCG.cginc"
 
 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };
 
 struct v2f
 { 
 float4 vertex : SV_POSITION;
 float2 uv : TEXCOORD0;
 };
 
 //格子背景
 fixed4 _BackgroundColor;
 fixed4 _BackgroundColor2;
 fixed _Space;
 fixed _XOffset;
 fixed _YOffset;
 
 half _Frequency;
 half _Amplitude;
 half _Speed;
 
 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = v.uv;
 
 return o;
 }
 
 fixed4 frag (v2f i) : SV_Target
 {
 //fmod(x, y):x/y的余數(shù),和x有同樣的符號(hào) 
 //step(a, x):如果x<a,返回0;如果x>=a,返回1
 
 //得到一個(gè)小于_Space的余數(shù),即a的范圍為[0, _Space)
 fixed a = fmod(i.uv.x + _XOffset, _Space);
 //有1/2概率返回0,有1/2概率返回1,從而形成間隔效果
 a = step(0.5 * _Space, a);
 
 fixed b = fmod(i.uv.y + _YOffset, _Space);
 b = step(0.5 * _Space, b);
 
 fixed4 bgCol = _BackgroundColor * a * b + _BackgroundColor2 * (1 - a * b);
 
 
 //范圍(1, 51),乘上100是擴(kuò)大差距(中間最亮其他兩邊基本不亮),加上1是防止0作為除數(shù),同時(shí)確保最中間最亮
 //float y = i.uv.y + sin(_Time.y);掃描線效果
 
 fixed4 lineCol;
 
 for(int count = 0;count < 3;count++)
 {
 float y = i.uv.y + sin(i.uv.x * _Frequency * count * 0.1 + _Time.y * _Speed) * (_Amplitude + count * 0.1);//可以看成一條y的關(guān)于x的方程式
 y = saturate(y);//重新映射到(0, 1)范圍
 float v = abs(y - 0.5) * 100 + 1;
 v = 1 / v;
 lineCol += fixed4(v, v, v, 1);//注意是"+"操作,對(duì)顏色進(jìn)行疊加
 }
 
 return bgCol + lineCol;
 }
 ENDCG
 }
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#一個(gè)方法返回多個(gè)值示例

    C#一個(gè)方法返回多個(gè)值示例

    這篇文章主要介紹了C#一個(gè)方法返回多個(gè)值示例,需要的朋友可以參考下
    2014-02-02
  • 兩路歸并的數(shù)組與鏈表的實(shí)現(xiàn)方法

    兩路歸并的數(shù)組與鏈表的實(shí)現(xiàn)方法

    本篇文章對(duì)兩路歸并的數(shù)組與鏈表的實(shí)現(xiàn)方法進(jìn)行了分析介紹。需要的朋友參考下
    2013-05-05
  • C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法

    C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法

    這篇文章主要給大家介紹了關(guān)于C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C#中async/await之線程上下文工作原理

    C#中async/await之線程上下文工作原理

    這篇文章主要為大家介紹了C#中async/await之線程上下文工作原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-05-05
  • C#讀寫(xiě)配置文件方式(config.ini)入門(mén)

    C#讀寫(xiě)配置文件方式(config.ini)入門(mén)

    這篇文章主要介紹了C#讀寫(xiě)配置文件方式(config.ini)入門(mén),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#串口通信模塊使用方法示例

    C#串口通信模塊使用方法示例

    這篇文章主要介紹了C#串口通信模塊使用方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • C#實(shí)現(xiàn)強(qiáng)制關(guān)閉當(dāng)前程序進(jìn)程

    C#實(shí)現(xiàn)強(qiáng)制關(guān)閉當(dāng)前程序進(jìn)程

    這篇文章主要介紹了C#實(shí)現(xiàn)強(qiáng)制關(guān)閉當(dāng)前程序進(jìn)程,本文直接給出實(shí)現(xiàn)代碼,可以實(shí)現(xiàn)完全Kill掉不留痕跡,需要的朋友可以參考下
    2015-06-06
  • C#從控制臺(tái)讀取字符串的方法

    C#從控制臺(tái)讀取字符串的方法

    這篇文章主要介紹了C#從控制臺(tái)讀取字符串的方法,實(shí)例分析了ReadLine方法的基本使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#控制臺(tái)程序的開(kāi)發(fā)與打包為一個(gè)exe文件實(shí)例詳解

    C#控制臺(tái)程序的開(kāi)發(fā)與打包為一個(gè)exe文件實(shí)例詳解

    所謂控制臺(tái)程序,就是沒(méi)有界面,運(yùn)行程序后只有一個(gè)黑色的類似cmd窗口,通過(guò)這個(gè)窗口進(jìn)行交互,下面這篇文章主要給大家介紹了關(guān)于C#控制臺(tái)程序的開(kāi)發(fā)與打包為一個(gè)exe文件的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • C# 多線程對(duì)資源讀寫(xiě)時(shí)如何控制的方法

    C# 多線程對(duì)資源讀寫(xiě)時(shí)如何控制的方法

    這篇文章主要介紹了C# 多線程對(duì)資源讀寫(xiě)時(shí)如何控制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

西丰县| 阿坝县| 洮南市| 武宣县| 蓝山县| 绥棱县| 鄂伦春自治旗| 金坛市| 扎赉特旗| 罗山县| 苍山县| 安义县| 绩溪县| 博湖县| 九江市| 农安县| 勐海县| 蓬安县| 兴宁市| 澜沧| 清水河县| 泰宁县| 榆社县| 健康| 涡阳县| 余江县| 松溪县| 阳高县| 庆城县| 新巴尔虎右旗| 柯坪县| 新平| 宽城| 潞城市| 长汀县| 石城县| 开封市| 麟游县| 都安| 雅安市| 福州市|