Three.js 雨滴涟漪效果着色器
提示词
创建一个雨滴涟漪效果着色器,包含雨滴位置生成、单个涟漪、雨滴冲击和多雨滴涟漪系统,支持雨滴密度和涟漪速度调节。
效果描述
这是一个模拟雨滴落在水面产生涟漪的效果着色器,通过多雨滴涟漪系统创造逼真的雨滴涟漪效果。
效果特性
- 雨滴位置生成:伪随机数生成雨滴位置
- 单个涟漪:单个雨滴产生的涟漪
- 雨滴冲击:雨滴冲击水面的效果
- 多雨滴涟漪系统:多个雨滴的涟漪叠加
- 水面波动:基础水面波动
- 涟漪边缘发光:涟漪边缘的高光效果
参数调节
| 参数 |
默认值 |
范围 |
说明 |
| 雨滴密度 |
0.5 |
0.1-1.0 |
雨滴的数量密度 |
| 涟漪速度 |
1.0 |
0.3-3.0 |
涟漪传播的速度 |
| 波幅强度 |
0.3 |
0.1-0.8 |
涟漪的波幅强度 |
| 水面颜色 |
#4a90e2 |
- |
水面的基础颜色 |
核心代码解析
雨滴位置生成器
vec2 generateRaindropPosition(float seed) {
float x = fract(sin(seed * 78.233) * 43758.5453);
float y = fract(sin(seed * 12.9898) * 43758.5453);
return vec2(x, y);
}
单个涟漪效果
float singleRipple(vec2 uv, vec2 center, float time, float speed) {
float dist = distance(uv, center);
float ripple = sin(dist * 20.0 - time * speed * 5.0);
float attenuation = 1.0 / (1.0 + dist * 10.0);
return ripple * attenuation * waveAmplitude;
}
雨滴冲击效果
float raindropImpact(vec2 uv, vec2 center, float time, float speed) {
float dist = distance(uv, center);
float impact = sin(dist * 30.0 - time * speed * 10.0) *
exp(-dist * 15.0);
return impact * 0.5;
}
多雨滴涟漪系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
float multiRippleSystem(vec2 uv, float time, float density) {
float totalRipple = 0.0;
int numDrops = int(density * 20.0);
for (int i = 0; i < 15; i++) {
if (i >= numDrops) break;
float seed = float(i) * 123.456;
vec2 dropPos = generateRaindropPosition(seed);
float timeOffset = sin(seed * 45.678) * 10.0;
float ripple = singleRipple(uv, dropPos, time + timeOffset, rippleSpeed);
float impact = raindropImpact(uv, dropPos, time + timeOffset, rippleSpeed);
totalRipple += ripple + impact;
}
return totalRipple;
}
uniforms: {
time: { value: 0 },
resolution: { value: new THREE.Vector2(_width, _height) },
dropDensity: { value: 0.5 },
rippleSpeed: { value: 1.0 },
waveAmplitude: { value: 0.3 },
waterColor: { value: new THREE.Color(0x4a90e2) }
}
技术亮点
- 伪随机数:fract和sin生成随机位置
- 涟漪传播:sin函数模拟涟漪传播
- 衰减效果:1/(1+dist)实现距离衰减
- 多雨滴系统:最多15个雨滴的涟漪叠加
- 蓝色主题:#4a90e2营造水面氛围
调试技巧
- 雨滴密度:控制雨滴的数量
- 涟漪速度:影响涟漪传播的速度
- 波幅强度:影响涟漪的波幅
- 蓝色主题:适合水面效果
- 分辨率:128x128细分保证细节
扩展方向
- 真实雨滴:添加雨滴模型
- 雨景场景:添加雨景背景
- 水面反射:添加反射效果
- 雨声效果:添加雨声
- 暴风雨:添加暴风雨效果
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!