唠唠
噪声效果的应用篇。今天牙不疼了,跑来周师的慢闪公园,结果被小孩儿吵的脑仁儿疼🤬🤬🤬🔪 杀人不犯法的话我立马变身沙僧挂一串小孩脑袋🤬🤬🔪
PSRDnoise
之后的噪声效果都采用PSRDnoise,算法参照MIT协议开源。 它的噪声函数有四个参数(以2D为例)。 float psrdnoise(vec2 x, vec2 period, float alpha, out vec2 gradient)
- vec2 x:纹理坐标;
- vec2 period:可平铺单元尺寸。如果设为0则禁用tiling;
- float alpha:弧度制,每个随机的gradient都旋转alpha度。令alpha=time则每个gradient会匀速转动,alpha=0则生成静态噪声。
- out vec2 gradient:out关键字说明这是一个只写参数。它将返回噪声的倒数。
简单来说,psrd最大的优势在于2维的噪声就可以实现基本动画和四方连续性。基础的fbm与turbulence效果如下。
干扰uv
通过噪声对干扰uv采样,形成画面扰动的效果。可以用于伪折射、热蒸汽等等。
这里复现了the book of shader里的木纹效果~
//lines
vec2 uv3 = vec2(uv.x.5+sin(uv.y),uv.y3.);
n = psrdnoise(uv3, p, alpha0.1, g);
uv3 = rotate2d(n0.4 )*uv3;
col = vec3(lines(uv3.yx,.5));
今日水水
刷pin看到这张图,简单模仿一下。
其实分析一下就是一张美丽色图乘上一个层状的蒙板,这个很熟悉了,fract()就可以实现。
float n1= fract(5.fbm(uv1.3,2.,g));//mask
col =n1;
整点色图:
vec3 col = mix(vec3(0.,0.3,1.),vec3(1.,.1,.1),
psrdnoise(uv.5+vec2(.23,.67), p, alpha, g)0.5+0.5);
col += vec3(0.,.6,0.)(psrdnoise(uv.4+vec2(.092,.137), p, alpha+2., g)0.5+.2);
两个乘起来就基本有这样的效果啦:
观察了一下原图是两层,又加了一层青色为主的:
col = mix(col,vec3(0,.9,.6)pattern2(uv+vec2(0.876,0.1873)).yn,n-.2);
调整了一下mask,增强层的感觉...啊 颜色好难改,好想拉曲线.......
字是ps加的(
歇了!拜拜👋
➡️完整代码,包含前面fbm、turbulence、warping的尝试。
ODOS —— One Day One Shader 努力日更的学习计划。 包括但不限于基于[Shadertoy][22]、UnityShaderLab等平台的shader学习笔记