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);  // 绿色符文
  }
}

技术亮点

  1. 多层符文图案:圆形+星形+复杂图案三层叠加创造神秘感
  2. 顶点激活变形:让圆环产生动态的凹凸变形
  3. 粒子漂浮系统:20个粒子带有独立生命周期
  4. 能量流动动画:定向能量波纹增强动态感
  5. 颜色类型系统:三种颜色区分符文类型

调试技巧

  1. 粒子聚集:增加粒子的随机分布范围避免聚集
  2. 图案失真:增加uPatternComplexity的图案密度
  3. 性能问题:减少粒子数量 (20→10) 提升帧率
  4. 能量流动不自然:增加多层能量波的方向变化

扩展方向

  1. 符文旋转:让符文整体绕轴旋转
  2. 交互式激活:鼠标点击激活或增强符文效果
  3. 多符文组合:添加多个不同颜色和相位的符文
  4. 光晕效果:添加后处理Bloom效果增强魔法感
  5. 音效配合:配合魔法音效增强沉浸感

本文档由 ThreeLab 编辑整理,专注 Three.js 着色器、Web 3D、GIS 可视化技术分享。如需转载,请注明出处。