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,折射会减弱,小高光与液滴运动不变;这里是按格子构造的图像扭曲,并非水膜模拟。