日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

11.Wave Shader

發布時間:2023/12/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。