研究了一个雪花飘落效果,感觉挺不错的,分享给大家,效果如下:
代码如下:
材质“shadertoy/片”{//https://www.shadertoy.com/view/4d2Xzc {属性 iMouse(“老鼠Pos”,向量)=(100100,0,0) iChannel0 (“iChannel0”、2 d)=鞍咨眥} iChannelResolution0 (“iChannelResolution0向量)=(100100,0,0) } CGINCLUDE # include“UnityCG.cginc” # pragma目标3.0 # pragma glsl #定义vec2 float2 #定义vec3 float3 #定义vec4 float4 #定义mat2 float2x2 #定义iGlobalTime _Time.y #定义mod作用 #定义混合昆虫蜜 #定义:量化 #定义部分裂缝分析 #定义texture2D tex2D//屏幕的尺寸 #定义iResolution _ScreenParams//屏幕中的坐标,以像素为单位 #定义gl_FragCoord ((_iParam.srcPos.xy/_iParam.srcPos.w) * _ScreenParams.xy) #定义PI2 6.28318530718 #定义3.14159265358979π #定义halfpi(π* 0.5) #定义> 浮动dd=150; for (int i=0;i之前
在理解这段代码前,先理解怎么画一个圈,代码如下:
浮动dd=30; for (int i=0;i之前
然后再准备一张贴的图,图片中间是一个白色像素,周围都是黑色
效果如下:
这段代码处于片段着色器中,意味着屏幕上每个点都会进行上述的算法。具体如下,遍历贴图中该点周围的点(上面的代码中为距离该点为20单位的圆上的点),把周围点中最亮的作为该点的颜色。上面的贴图有点特殊,只有一个点是白色,其余点都是黑色的。那么只有距离该点正好为20单位的点才会变成亮色,其余的点都是黑色,如上图的结果。一句话总结上面算法的效果:效果可以参考文末的图片。
接下来理解这段代码:
浮动dd=150; for (int i=0;i之前
输出结果如下:
b)算法向的中量的路径为:
结果就很清晰了,其实这里算法和《【OpenGL】材质实例分析(二)——心》中绘制心形的算法很类似。
最后加上时间就可以实现动画了:
=vec2 vec2 (cos(一个),sin ()) * (1.0 + 0.6 * cos (7.0 * + iGlobalTime)) + vec2 (0.0, iGlobalTime);
第一个iGlobalTime,用来控制雪花的旋转,第二个iGlobalTime使雪花下落。
2)后期颜色等处理
这里可以理解为一种后效处理,具体是如下的代码贡献的效果:
坳=战俘(坳,vec3(1.0, 2.0, 3.0)) *战俘(4.0 * p.y * (1.0 -p.y), 0.2);
),战俘(坳,vec3(1.0, 2.0, 3.0))这句话使得颜色变成暖色调.col值的范围为[0,1],对小数继续战俘运算,次数越高,该值越小,比如:0.5的1次方是0.5,2次方为0.25,3次方为0.125等,所以这句话的作用很明显:红成份不变,绿色变小一些,蓝色变的更小,达到的效果,使得整体颜色会偏向暖色调。