Three.js极光效果着色器 - 大气光学现象详解

简介
本示例展示如何使用Three.js实现极光(Aurora)效果,模拟地球南北极地区的大气光学现象。通过多层噪声叠加和颜色渐变,创造出流动、变幻的极光效果。
在线演示地址 | 完整源代码
核心技术栈
| 技术 |
说明 |
难度等级 |
| Three.js |
WebGL 3D渲染引擎 |
⭐⭐⭐ |
| ShaderMaterial |
自定义着色器材质 |
⭐⭐⭐ |
| FBM噪声 |
分形布朗运动 |
⭐⭐⭐⭐ |
| 颜色渐变 |
极光配色 |
⭐⭐⭐ |
| 时间动画 |
流动效果 |
⭐⭐⭐ |
算法原理解析
1. 极光颜色渐变
极光的颜色取决于大气中不同气体和高度:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vec3 auroraGreen = vec3(0.2, 0.9, 0.3);
vec3 auroraBlue = vec3(0.2, 0.3, 0.9);
vec3 auroraRed = vec3(0.9, 0.2, 0.2);
vec3 getAuroraColor(float altitude, float intensity) {
vec3 color;
if (altitude < 0.3) {
color = auroraBlue;
} else if (altitude < 0.6) {
color = mix(auroraBlue, auroraGreen, (altitude - 0.3) / 0.3);
} else {
color = mix(auroraGreen, auroraRed, (altitude - 0.6) / 0.4);
}
return color * intensity;
}
2. 极光噪声动画
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
uniform float uTime;
float auroraNoise(vec3 p) {
float value = 0.0;
float amplitude = 0.5;
float frequency = 1.0;
for (int i = 0; i < 6; i++) {
value += amplitude * noise(p * frequency);
amplitude *= 0.5;
frequency *= 2.0;
}
return value;
}
void main() {
vec2 uv = vUv;
float altitude = uv.y;
float wave1 = auroraNoise(vec3(uv.x * 3.0, uTime * 0.2, 0.0));
float wave2 = auroraNoise(vec3(uv.x * 5.0 + 100.0, uTime * 0.3, 1.0));
float waves = (wave1 + wave2) * 0.5;
float aurora = smoothstep(0.2, 0.8, waves);
aurora *= smoothstep(0.0, 0.3, altitude);
aurora *= smoothstep(1.0, 0.5, altitude);
vec3 color = getAuroraColor(altitude, aurora);
float flicker = noise(vec3(uv.x * 10.0, uv.y * 5.0, uTime * 3.0));
color *= (0.8 + 0.2 * flicker);
gl_FragColor = vec4(color, aurora * 0.8);
}
3. 星空背景
vec3 starfield(vec2 uv) {
vec3 stars = vec3(0.0);
float starNoise = random(uv * 500.0);
if (starNoise > 0.98) {
float brightness = (starNoise - 0.98) * 50.0;
stars = vec3(brightness);
}
return stars;
}
学习要点
入门级知识点
- FBM噪声:叠加多层噪声创造复杂效果
- 颜色混合:基于位置和强度的颜色渐变
- 透明度控制:极光的半透明效果
进阶级知识点
- 多层波动:不同频率的波动叠加
- 闪烁效果:高频噪声创造闪烁
- 大气颜色:基于物理的极光颜色
高级知识点
- 体积极光:3D空间中的极光模拟
- 光线投射:大气散射效果
- 性能优化:噪声计算的优化
相关学习资源
结语
极光着色器展示了噪声函数在创造自然现象方面的强大能力。通过本示例的学习,你将掌握多层噪声叠加和颜色渐变的技巧,为创建更复杂的自然特效打下基础。
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!