🎯 提示词

PROMPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
使用 Three.js 实现【递归分形网格着色器】,具体要求:

【核心特效】
- 递归分形图案生成
- 动态色彩变化
- 指数衰减的距离场效果

【场景与光照】
- 网格辅助线
- 环境光照明

【交互与控制】
- OrbitControls 轨道控制器

【技术要求】
- Three.js 最新版本
- ShaderMaterial 自定义着色器
- 数学函数调色板

📖 效果拆解

层次 视觉效果 技术实现
基础 平面几何体 PlaneGeometry(10, 10, 100, 100)
核心特效 递归分形 循环迭代UV坐标
增强细节 动态色彩 余弦调色板函数
背景 网格辅助 GridHelper

🔧 核心技术点

1. 余弦调色板函数

使用余弦函数组合生成平滑的色彩渐变,这是 shader art 中常用的调色技术。

GLSL
1
2
3
4
5
6
7
vec3 palette(float t){
    vec3 a = vec3(0.5, 0.5, 0.5);
    vec3 b = vec3(0.5, 0.5, 0.5);
    vec3 c = vec3(1.0, 1.0, 1.0);
    vec3 d = vec3(0.263, 0.416, 0.557);
    return a + b * cos(PI * 2.0 * (c * t + d));
}

2. 递归分形距离场

通过迭代缩放UV坐标并计算距离场,生成复杂的分形图案。

GLSL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vec4 mainImage(){
    vec3 finalColor = vec3(0.0);
    vec2 uuv = vUv * 2.0 - 1.0;
    vec2 uv = vUv * 2.0 - 1.0;
    
    for(float i = 0.0; i < 4.0; i++){
        uv = fract(uv * 1.5) - 0.5;          // 缩放并偏移UV
        float d = length(uv) * exp(-length(uuv));  // 指数衰减距离
        
        vec3 col = palette(length(uuv) + i * 0.4 + iTime * 0.4);
        
        d = sin(d * 8.0 + iTime) / 8.0;      // 添加时间波动
        d = abs(d);
        d = pow(0.01 / d, 1.2);              // 对比度增强
        
        finalColor += col * d;
    }
    return vec4(finalColor, 1.0);
}

3. 模块化架构

使用 ES6 class 封装 Three.js 应用逻辑,提高代码可维护性。

JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Base {
    constructor() {
        this.init();
        this.main();
    }
    
    init() {
        this.clock = new THREE.Clock();
        this.renderer = new THREE.WebGLRenderer({ antialias: true });
        // ... 初始化相机、场景、控制器
    }
    
    animate() {
        this.controls.update();
        this.renderer.render(this.scene, this.camera);
        this.material.uniforms.iTime.value += 0.01;
    }
}

💡 调试与优化

问题类型 表现形式 解决方案
分形图案重复 迭代次数不足 增加循环迭代次数
性能问题 复杂分形导致帧率下降 减少迭代次数或降低几何体细分
颜色过渡不自然 调色板参数不合适 调整 palette 函数中的 a/b/c/d 参数
边缘锯齿 图案边缘有明显锯齿 增加几何体细分或使用抗锯齿

🚀 扩展思路

变体效果 核心改动 难度
3D分形 将2D UV改为3D坐标,使用 raymarching ⭐⭐⭐
自定义调色板 添加 GUI 控制调色板参数 ⭐⭐
鼠标交互 添加鼠标位置影响分形图案 ⭐⭐
模糊效果 添加高斯模糊后处理 ⭐⭐⭐

本文档由 ThreeLab 编辑整理,如需转载,请注明出处。