11.Wave Shader
生活随笔
收集整理的這篇文章主要介紹了
11.Wave Shader
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個shader是在這位博主點擊打開鏈接的文章基礎上進行修改得到的,原作是在shadertoy網站上。不得不說,被shadertoy上的大神們震精了,真的是令我嘆為觀止,啥也不說了,慢慢學吧。
shader的效果:
Shader的代碼如下,甚是短小精悍
Shader "Study/11_Waves" { //see https://www.shadertoy.com/view/4dsGzH Properties{_Color("Main Color", Color) = (1,1,1,0.5)}SubShader{Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" } Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _Color;struct v2f{float4 pos : SV_POSITION;float4 srcPos : TEXCOORD0;};float4 _MainTex_ST;v2f vert(appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.srcPos = ComputeScreenPos(o.pos);return o;}half4 frag(v2f i) : COLOR{fixed3 COLOR1 = fixed3(0.0,0.0,0.3);fixed3 COLOR2 = fixed3(0.5,0.0,0.0);float BLOCK_WIDTH = 0.03;float2 uv = (i.srcPos.xy / i.srcPos.w);fixed3 final_color = fixed3(1,1,1);fixed3 bg_color = fixed3(0,0,0);fixed3 wave_color = fixed3(0,0,0);// TO create the waves float wave_width = 0.01;uv = -1.0 + 2.0*uv;uv.y += 0.1;for (float i = 0.0; i<7.0; i++){uv.y += (0.07 * sin(uv.x + i / 7.0 + _Time.y));wave_width = abs(1.0 / (150.0 * uv.y));wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);}final_color = bg_color + wave_color;return fixed4(final_color, 1.0);}ENDCG}} }這個shader精髓,是數學的魅力,原博主也只是簡單的分析了一下,最精髓的其實是這個for循環里的這三行,其他的就不細說了,參考那位博主的文章吧。
uv.y += (0.07 * sin(uv.x + i / 7.0 + _Time.y)); wave_width = abs(1.0 / (150.0 * uv.y)); wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);這三行只能用精妙來形容。整個shader,不僅僅是位移,連發光效果的顏色都是通過短短這三句來控制的。
第一行,根據uv.x和繪制線的條數來控制uv.y,+=號保證了多條線的間隔。如果是等于號,則相同的uv.x下將得到同樣的color,效果就會類似是一個移動的大長方體:
第二行,根據uv,y計算線的寬度。這又很精妙。。。運用除法運算,1除以uv,y和一個常數的積。當uv,y大于一個常數后,也就是乘積大于1之后,寬度將永遠是0,第三行最后計算出來的color也是背景色,這就是控制顯示范圍和線條寬度變化的地方。
第三行就不說了,根據寬度計算顏色,因為寬度不同,計算出的顏色也會不同。而因為uv,y隨著時間變化,寬度也會變化,所以最終呈現出這么絢麗的效果。
真的,我都驚呆了,給那些大神們獻上膝蓋。
總結
以上是生活随笔為你收集整理的11.Wave Shader的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡没激活怎么注销?注销相关事项必知!
- 下一篇: 汇丰京东铂金卡申请要审核几天?初审通过就