GLSL 效果示例

玻璃雨滴:让每颗水珠折射背后的画面

水珠内背景被放大和偏移,水珠之外保持清晰。

在线示例

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

观察什么

水珠内背景被放大和偏移,水珠之外保持清晰。

实现原理

在格子内定义水珠,局部径向向量驱动背景位移,只有水珠附近发生折射。

找到控制效果的代码

vec2 grid=uv*vec2(8.,5.),id=floor(grid),q=fract(grid)-.5;q.y+=sin(u_time*.4+hash(id)*6.)*.2;float d=length(q);vec2 offset=q*exp(-d*d*30.)*.15;c=texture2D(u_texture,uv+offset).rgb;c+=exp(-length(q-vec2(-.08,.08))*70.)*.3;

动手修改

把液滴网格 uv*vec2(8.,5.) 改成 uv*vec2(4.,3.)。更少、更大的液滴格会扭曲带字背景,每滴仍使用自身的局部径向位移形状。

调试与成本

一次背景采样被 q*exp(-d*d*30.)*.15 偏移。把 .15 降到 .05,折射会减弱,小高光与液滴运动不变;这里是按格子构造的图像扭曲,并非水膜模拟。

用到的内置函数

一步步学会这个效果