Three.js 热带海洋效果着色器
提示词
创建一个热带海洋效果着色器,包含热带海浪、清澈度、阳光透射和热带色彩渐变效果,支持波浪频率和清澈度调节。
效果描述
这是一个模拟热带海洋的效果着色器,通过热带海浪、清澈度和阳光透射效果创造热带海洋的视觉效果。
效果特性
- 热带海浪:多层海浪效果
- 清澈度效果:清澈海水效果
- 阳光透射:阳光穿透海水
- 热带色彩渐变:基于深度的颜色渐变
- 明亮感:热带海洋的明亮感
参数调节
| 参数 |
默认值 |
范围 |
说明 |
| 波浪频率 |
8.0 |
2.0-15.0 |
海浪的频率 |
| 清澈度 |
0.6 |
0.1-1.0 |
海水的清澈度 |
| 阳光强度 |
0.4 |
0.1-0.8 |
阳光的强度 |
| 海洋颜色 |
#00aaff |
- |
海洋的基础颜色 |
核心代码解析
热带海浪函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
float tropicalWaves(vec2 uv, float time) {
float waves = 0.0;
for (int i = 0; i < 3; i++) {
float layer = float(i) * 0.3;
float frequency = waveFrequency * (1.0 + layer * 0.5);
float speed = 1.0 + layer * 0.8;
float wave = sin(uv.x * frequency + time * speed) *
cos(uv.y * frequency * 0.7 + time * speed * 0.6);
waves += wave * (1.0 - layer * 0.3);
}
return waves * 0.5 + 0.5;
}
清澈度效果
float clarityEffect(vec2 uv, float clarity) {
float clear = sin(uv.x * 25.0 + time * 0.5) *
sin(uv.y * 25.0 + time * 0.5) * 0.1;
return clear * clarity;
}
阳光透射效果
float sunTransmission(vec2 uv, float glow) {
vec2 sunPos = vec2(0.5, 0.3);
float dist = distance(uv, sunPos);
float sunEffect = smoothstep(0.3, 0.0, dist) * glow;
return sunEffect;
}
热带色彩渐变
vec3 tropicalGradient(float depth) {
vec3 shallowColor = vec3(0.0, 0.8, 0.9);
vec3 midColor = vec3(0.0, 0.5, 0.7);
vec3 deepColor = vec3(0.0, 0.3, 0.5);
if (depth < 0.4) {
return mix(shallowColor, midColor, depth / 0.4);
} else {
return mix(midColor, deepColor, (depth - 0.4) / 0.6);
}
}
uniforms: {
time: { value: 0 },
resolution: { value: new THREE.Vector2(_width, _height) },
waveFrequency: { value: 8.0 },
clarity: { value: 0.6 },
sunGlow: { value: 0.4 },
oceanColor: { value: new THREE.Color(0x00aaff) }
}
技术亮点
- 多层海浪:3层不同频率的海浪
- 清澈度:高频sin/cos创造清澈效果
- 阳光透射:smoothstep创造阳光效果
- 热带色彩:三层颜色mix实现渐变
- 明亮感:1.2倍亮度增强明亮感
调试技巧
- 波浪频率:影响海浪的频率
- 清澈度:控制清澈度的强度
- 阳光强度:影响阳光的强度
- 蓝绿色主题:适合热带海洋
- 明亮感:需要较高的亮度
扩展方向
- 热带鱼:添加热带鱼模型
- 珊瑚礁:添加珊瑚礁场景
- 海底世界:添加海底世界
- 阳光效果:增强阳光效果
- 海岛场景:添加海岛背景
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!