ODOShader

ODOS丨整点儿五彩斑斓的黑

by ERIN.Z, 2022-02-03


微信图片_20220206110741.png

唠唠

噪声效果的应用篇。今天牙不疼了,跑来周师的慢闪公园,结果被小孩儿吵的脑仁儿疼🤬🤬🤬🔪 杀人不犯法的话我立马变身沙僧挂一串小孩脑袋🤬🤬🔪

PSRDnoise

之后的噪声效果都采用PSRDnoise,算法参照MIT协议开源。 它的噪声函数有四个参数(以2D为例)。 float psrdnoise(vec2 x, vec2 period, float alpha, out vec2 gradient)

  • vec2 x:纹理坐标;
  • vec2 period:可平铺单元尺寸。如果设为0则禁用tiling; period
  • float alpha:弧度制,每个随机的gradient都旋转alpha度。令alpha=time则每个gradient会匀速转动,alpha=0则生成静态噪声。
  • out vec2 gradient:out关键字说明这是一个只写参数。它将返回噪声的倒数。 gradient

简单来说,psrd最大的优势在于2维的噪声就可以实现基本动画和四方连续性。基础的fbm与turbulence效果如下。 psrdnoise

干扰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)); distort

今日水水

刷pin看到这张图,简单模仿一下。 poster 其实分析一下就是一张美丽色图乘上一个层状的蒙板,这个很熟悉了,fract()就可以实现。 float n1= fract(5.fbm(uv1.3,2.,g));//mask col =n1; mask 整点色图: 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); color 两个乘起来就基本有这样的效果啦: 1layer 观察了一下原图是两层,又加了一层青色为主的: col = mix(col,vec3(0,.9,.6)pattern2(uv+vec2(0.876,0.1873)).yn,n-.2); 2layer 调整了一下mask,增强层的感觉...啊 颜色好难改,好想拉曲线....... 字是ps加的( finished 歇了!拜拜👋 ➡️完整代码,包含前面fbm、turbulence、warping的尝试。

ODOS —— One Day One Shader 努力日更的学习计划。 包括但不限于基于[Shadertoy][22]、UnityShaderLab等平台的shader学习笔记

by ERIN.Z

2024 © typecho & elise