GLSL 效果示例

Bayer 有序抖动:用点阵模拟灰阶渐变

同一灰阶条分屏显示直接量化和点阵抖动。

在线示例

修改右侧代码,左侧预览会实时更新。

观察什么

同一灰阶条分屏显示直接量化和点阵抖动。

实现原理

使用固定的 4×4 阈值图案把灰阶转成黑白点阵。改变像素块大小只放大点阵,不改变输入亮度。

找到控制效果的代码

vec3 src=texture2D(u_texture,uv).rgb;float gray=dot(src,vec3(.2126,.7152,.0722));vec2 q=mod(floor(gl_FragCoord.xy/(1.+floor(u_parameter*3.))),4.);float row=mod(q.y,2.)*2.+mod(floor(q.y/2.),2.)*.5;float b=mod(q.x,2.)*2.+mod(floor(q.x/2.),2.)*.5;float threshold=mod((b*2.+row),4.)/4.+floor(b)/4.;c=vec3(step(fract(threshold),gray));

动手修改

把 u_parameter 从 0 调到 1,1.+floor(u_parameter*3.) 会让每个阈值格从一个屏幕像素变成四个。黑白图案会放大,但不会增加灰色输出级别。

调试与成本

该滤镜只读一次原图,再用算术生成 4×4 阈值图案。把最后 step 调用里的 gray 改为 0.5,就能独立查看固定半亮度图案,不再受彩色测试图影响。

深入理解

用到的内置函数

一步步学会这个效果