数字矩阵雨

Three.js 数字矩阵雨特效 | 三维可视化 / AI 提示词
📋 AI 提示词
prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
使用 Three.js 实现数字矩阵雨特效,具体要求:
【核心特效】
- 字符矩阵下落
- 拖尾效果
- 网格线叠加
- 颜色模式切换
- 7个实时参数
【场景与光照】
- 深绿径向背景
- 加法混合发光
- 立方体轻微旋转
【交互与控制】
- OrbitControls 阻尼旋转
- GUI 面板实时调节
- 雨速/字符密度/拖尾长度
【技术要求】
- Three.js 版本 (ES Module)
- 自定义 ShaderMaterial
- BoxGeometry 载体
- 伪随机数生成器
🖼️ 效果预览
🎮 案例演示
📖 效果拆解
| 层次 | 视觉效果 | 技术实现 |
|---|---|---|
| 基础 | 矩阵平面 | BoxGeometry |
| 下落 | mod 循环 | mod(y + time * speed, 2.0) - 1.0 |
| 字符 | 随机生成 | random(grid + floor(time)) |
| 拖尾 | 递减强度 | 1.0 - smoothstep(0.0, trailLength, fall) |
| 控制 | GUI 面板 | 7个可调参数 |
🔧 核心技术点
1. 字符下落
用 mod 函数创造无限循环的下落效果。
glsl
1
2
float rainFlow = mod(position.y + uTime * uRainSpeed * 3.0, 2.0) - 1.0;
newPosition.y = rainFlow;
2. 字符拖尾
下落字符有渐变的尾迹效果。
glsl
1
2
3
float fall = mod(grid.y + uTime * uRainSpeed * 5.0, 20.0);
float trail = 1.0 - smoothstep(0.0, uTrailLength * 5.0, fall);
charEffect = char * trail * density;
3. 随机字符
每个网格单元显示不同的随机值。
glsl
1
2
3
4
float random(vec2 st) {
return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);
}
float char = random(grid + floor(uTime * uRainSpeed * 0.5));
4. 颜色方案
三种经典矩阵雨配色。
glsl
1
2
3
if(scheme == 0) return vec3(0.0, 1.0, 0.0); // 经典绿色
else if(scheme == 1) return vec3(0.0, 0.5, 1.0); // 蓝色
else return vec3(0.8, 0.0, 1.0); // 紫色
💡 调试与优化
| 问题类型 | 表现形式 | 解决方案 |
|---|---|---|
| 拖尾过长 | 字符粘连 | 减小 uTrailLength |
| 下落过快 | 动画不流畅 | 减小 uRainSpeed |
| 字符过密 | 看不清 | 减小 uMatrixSize |
🚀 扩展思路
| 变体效果 | 核心改动 | 难度 |
|---|---|---|
| 汉字雨 | 替换字符集 | ⭐ |
| 数字雨 | 仅数字 | ⭐ |
| 垂直管道 | 拖尾更明显 | ⭐ |
| 3D 矩阵 | 多层叠加 | ⭐⭐ |
| 动态背景 | 添加图像 | ⭐⭐ |
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。







京公网安备 11010502038735号
💬 评论区
评论功能即将上线,敬请期待!