魔法符文效果

Three.js 魔法符文效果着色器 | 三维可视化 / AI 提示词
📋 AI 提示词
prompt
1
使用 Three.js 实现魔法符文效果着色器,圆形/星形/复杂图案三层符文叠加,符文激活波动效果,能量流动和脉冲效果,粒子漂浮装饰。
🖼️ 效果预览
🎮 案例演示
效果描述
这是一个魔法符文效果着色器,通过多层符文图案叠加创造神秘的魔法效果,配合粒子和能量流动营造炫酷的视觉体验。
效果特性
- 多层符文图案:圆形+星形+复杂图案三层叠加
- 符文激活波动:激活时的能量波动效果
- 能量流动:定向的能量流动增强动态感
- 粒子漂浮装饰:20个漂浮粒子增加生动感
- 三种符文类型:紫色、蓝色、绿色符文可选
参数调节
| 参数 | 默认值 | 范围 | 说明 |
|---|---|---|---|
| 符文强度 | 0.8 | 0.1-1.2 | 符文变形的强度 |
| 激活速度 | 0.7 | 0.1-1.0 | 符文激活的速度 |
| 图案复杂度 | 0.6 | 0.1-1.0 | 图案的复杂程度 |
| 发光强度 | 1.2 | 0.1-1.8 | 符文发光强度 |
| 能量流动 | 0.8 | 0.1-0.9 | 能量流动的速度 |
| 显示粒子 | true | boolean | 是否显示漂浮粒子 |
核心代码解析
多层符文图案
glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
float runePattern(vec2 uv, float complexity) {
float pattern = 0.0;
// 圆形符文
float circle1 = 1.0 - distance(uv, vec2(0.5, 0.5)) * 2.0;
pattern += circle1 * 0.5;
// 星形符文
float star = sin(atan(uv.y - 0.5, uv.x - 0.5) * 8.0) * 0.3 + 0.7;
pattern += star * 0.3;
// 复杂图案
float complex = sin(uv.x * complexity * 12.0) *
cos(uv.y * complexity * 12.0);
pattern += complex * 0.2;
return pattern;
}
符文激活波动
glsl
1
2
3
4
5
6
7
float rune(vec2 uv, float power) {
float runeField = 0.0;
runeField += sin(uv.x * 6.0 + uTime * 0.3) * cos(uv.y * 8.0 + uTime * 0.5);
runeField += sin(uv.x * 8.0 + uTime * 0.7) * cos(uv.y * 10.0 + uTime * 0.9) * 0.7;
runeField += sin(uv.x * 10.0 + uTime * 1.1) * cos(uv.y * 12.0 + uTime * 1.3) * 0.4;
return runeField * power;
}
粒子漂浮效果
glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float particles(vec2 uv, float density) {
if(!uShowParticles) return 0.0;
float particleField = 0.0;
for(int i = 0; i < 20; i++) {
vec2 particlePos = vec2(
noise(vec2(float(i) * 0.123, 0.456)),
noise(vec2(float(i) * 0.456, 0.789))
);
float dist = distance(uv, particlePos);
float particleLife = mod(uTime * 2.0 + float(i) * 6.0, 6.28);
float particleIntensity = sin(particleLife) * 0.8 + 0.2;
particleField += exp(-dist * 50.0) * particleIntensity * density;
}
return particleField;
}
能量流动效果
glsl
1
2
3
4
5
6
7
float energyFlow(vec2 uv, float flow) {
float energy = 0.0;
energy += sin(uv.x * 8.0 + uTime * flow * 3.0) *
cos(uv.y * 8.0 + uTime * flow * 2.5);
energy += sin(uTime * flow * 4.0) * 0.3;
return energy * 0.4;
}
顶点激活变形
glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uniform float uRunePower;
uniform float uActivationSpeed;
uniform float uPatternComplexity;
void main() {
float activation = sin(position.x * 4.0 + uTime * uActivationSpeed) *
cos(position.y * 5.0 + uTime * uActivationSpeed * 0.8) *
sin(position.z * 4.0 + uTime * uActivationSpeed * 0.6);
float pattern = sin(position.x * uPatternComplexity * 8.0) *
cos(position.y * uPatternComplexity * 10.0) *
sin(position.z * uPatternComplexity * 8.0);
float energy = sin(position.x * 6.0 + uTime * uActivationSpeed * 2.0) *
cos(position.z * 6.0 + uTime * uActivationSpeed * 2.0);
vec3 newPosition = position + normal * (activation + pattern * 0.3 + energy * 0.2) * uRunePower * 0.1;
gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
}
符文类型颜色系统
glsl
1
2
3
4
5
6
7
8
9
vec3 getRuneType(int type) {
if(type == 0) {
return vec3(0.8, 0.2, 1.0); // 紫色符文
} else if(type == 1) {
return vec3(0.2, 0.6, 1.0); // 蓝色符文
} else {
return vec3(0.2, 1.0, 0.4); // 绿色符文
}
}
技术亮点
- 多层符文图案:圆形+星形+复杂图案三层叠加创造神秘感
- 顶点激活变形:让圆环产生动态的凹凸变形
- 粒子漂浮系统:20个粒子带有独立生命周期
- 能量流动动画:定向能量波纹增强动态感
- 颜色类型系统:三种颜色区分符文类型
调试技巧
- 粒子聚集:增加粒子的随机分布范围避免聚集
- 图案失真:增加uPatternComplexity的图案密度
- 性能问题:减少粒子数量 (20→10) 提升帧率
- 能量流动不自然:增加多层能量波的方向变化
扩展方向
- 符文旋转:让符文整体绕轴旋转
- 交互式激活:鼠标点击激活或增强符文效果
- 多符文组合:添加多个不同颜色和相位的符文
- 光晕效果:添加后处理Bloom效果增强魔法感
- 音效配合:配合魔法音效增强沉浸感
本文档由 ThreeLab 编辑整理,专注 Three.js 着色器、Web 3D、GIS 可视化技术分享。如需转载,请注明出处。







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