Three.js 深海漩涡效果着色器
提示词
创建一个深海漩涡效果着色器,模拟深海中的漩涡流动,包含涡旋场、深海颜色映射和泡沫效果,支持涡旋强度和深度强度调节。
效果描述
这是一个模拟深海漩涡流动的效果着色器,通过极坐标变换和深度颜色映射创造逼真的深海漩涡视觉效果。
效果特性
- 涡旋场效果:极坐标变换创造的旋转涡旋
- 深海颜色映射:基于深度的颜色渐变
- 泡沫效果:动态的白色泡沫纹理
- 深度发光:深处的发光效果
- PlaneGeometry:128x128高分辨率平面几何
参数调节
| 参数 |
默认值 |
范围 |
说明 |
| 涡旋强度 |
0.8 |
0.1-2.0 |
漩涡的旋转强度 |
| 深度强度 |
1.5 |
0.5-3.0 |
深度颜色变化的强度 |
| 流动速度 |
1.0 |
0.1-3.0 |
漩涡流动的速度 |
| 深海颜色 |
#3366ff |
- |
深海的基础颜色 |
核心代码解析
涡旋场函数
vec2 vortexField(vec2 uv, float time) {
vec2 center = vec2(0.5, 0.5);
vec2 dir = uv - center;
float dist = length(dir);
float angle = atan(dir.y, dir.x);
angle += sin(dist * 15.0 + time * flowSpeed) * vortexStrength;
dist *= 1.0 + sin(angle * 5.0 + time * 2.0) * 0.2;
return center + vec2(cos(angle), sin(angle)) * dist;
}
深海颜色映射
vec3 deepSeaColor(float depth) {
vec3 surfaceColor = vec3(0.0, 0.3, 0.6);
vec3 midColor = vec3(0.0, 0.1, 0.3);
vec3 deepColor = vec3(0.0, 0.05, 0.15);
if (depth < 0.3) {
return mix(surfaceColor, midColor, depth / 0.3);
} else {
return mix(midColor, deepColor, (depth - 0.3) / 0.7);
}
}
泡沫效果
float foamEffect(vec2 uv, float time) {
float foam = sin(uv.x * 30.0 + time * 3.0) * sin(uv.y * 30.0 + time * 3.0);
return max(0.0, foam) * 0.1;
}
uniforms: {
time: { value: 0 },
resolution: { value: new THREE.Vector2(_width, _height) },
vortexStrength: { value: 0.8 },
depthIntensity: { value: 1.5 },
flowSpeed: { value: 1.0 },
deepColor: { value: new THREE.Color(0x3366ff) }
}
技术亮点
- 极坐标变换:使用atan和length实现极坐标转换
- 深度颜色渐变:三层颜色mix实现深度感知
- 涡旋扭曲:角度和距离的同时变换
- 高分辨率平面:128x128细分保证细节
- 深色背景:#001122背景营造深海氛围
调试技巧
- 涡旋强度:影响旋转角度和距离变化
- 深度强度:控制颜色渐变的速度
- 流动速度:影响所有动画的时间参数
- 分辨率:高分辨率平面需要更多计算资源
- 颜色选择:深蓝色适合深海效果
扩展方向
- 海底地形:添加海底山脉和峡谷
- 海洋生物:添加鱼类和海洋生物
- 上升流:添加从深部上升的水流
- 声纳效果:添加声纳扫描效果
- 深海探险:添加潜水艇视角
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!