Shader特效——“雪花飞舞 ”的实现 【GLSL】

来源:互联网 发布:剑三成女脸型数据下载 编辑:程序博客网 时间:2024/05/05 14:02


效果图:



是不是有点 “落雪无声掩尘嚣”的感觉~


GLSL 代码:


#define _SnowflakeAmount 400   // 雪花数#define _BlizardFactor 0.25           // 风的大小#define fragCoord gl_FragCoord#define fragColor gl_FragColoruniform float iGlobalTime;uniform sampler2D tex;float rnd(float x){   return fract(         sin(               dot(vec2(x + 47.49, 38.2467 / (x + 2.3)),                     vec2(12.9898, 78.233))) * (43758.5453));}float drawCircle(vec2 uv, vec2 center, float radius){   return 1.0 - smoothstep(0.0, radius, length(uv - center));}const vec2 iResolution = vec2(512., 512.);void main(){   vec2 uv = fragCoord.xy / iResolution.x;   vec4 color = texture2D(tex, uv);      //fragColor = vec4(0.808, 0.89, 0.918, 1.0);   fragColor = color;      float j;   // 生成若干个圆,当前uv依次与这些圆心计算距离,未落在圆域内则为黑色,落在圆域内则为白色   for (int i = 0; i < _SnowflakeAmount; i++)   {      j = float(i);      // 控制了不同雪花的下落速度 和 雪花的大小      float speed =             0.3                  + rnd(cos(j))                        * (0.7                              + 0.5                                    * cos(                                          j                                                / (float(                                                       _SnowflakeAmount) // _SnowflakeAmount                                                      * 0.25)));                // Test                                                      //vec2 center = vec2(cos(iGlobalTime + sin(j)),        //                     cos(iGlobalTime + cos(j)));              vec2 center = vec2(            // x坐标 左右环绕分布的范围            (-0.25 + uv.y) * _BlizardFactor + rnd(j)                  + 0.1 * cos(iGlobalTime + sin(j)),            // y坐标  随着时间下降                mod(                  rnd(j)                        - speed                              * (iGlobalTime * 1.5                                    * (0.1 + _BlizardFactor)),                  0.95) );      fragColor += vec4(0.9 * drawCircle(uv, center, 0.001 + speed * 0.012)); // 输出是这些圆的颜色叠加   }}


1 0
原创粉丝点击