Three.js 双向溶解动画 | 三维可视化 / AI 提示词

📋 AI 提示词

prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用 Three.js 实现【双向溶解动画】,具体要求:

【核心特效】
- 基于纹理的溶解效果
- 双向动画(从上到下/从下到上)
- 边缘发光效果

【场景与光照】
- 无光源(自发光效果)
- 深色背景

【交互与控制】
- OrbitControls 轨道控制器
- 自动循环动画

【技术要求】
- Three.js 最新版本
- ShaderMaterial 自定义着色器
- 纹理驱动的溶解

🖼️ 效果预览

双向溶解动画

🎮 案例演示

立即体验


📖 效果拆解

层次 视觉效果 技术实现
基础 立方体模型 BoxGeometry
核心特效 纹理溶解 溶解贴图 + 高度阈值
动画 双向循环 flag 变量控制方向
边缘 发光效果 黄色边缘高亮

🔧 核心技术点

1. 纹理驱动的溶解算法

使用溶解贴图和高度信息实现垂直方向的溶解效果。

glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
float bottom = -2.0;
float top = 2.0;
float yScale = (worldPos.y - bottom) / (top - bottom);

float t;
if(flag) {
  t = fract(time);      // 正向:从下往上
} else {
  t = 1.0 - fract(time); // 反向:从上往下
}

float h = texture2D(dissolveMap, vUv).r;
float dissolveWidth = 4.0;

// 边缘发光
float condition_if_1 = step(h + yScale * dissolveWidth, t * (dissolveWidth + 1.0) + 0.04);
float condition_if_2 = step(h + yScale * dissolveWidth, t * (dissolveWidth + 1.0));

color = mix(color, vec4(1.0, 1.0, 0.0, 1.0), condition_if_1);
color = color * (1.0 - condition_if_2);

2. 双向动画控制

通过 flag 变量切换溶解方向。

javascript
1
2
3
4
5
6
7
8
9
function updateMaterial() {
    dissolveMaterials.map(m => {
        m.uniforms.time.value += 0.005;
        if (m.uniforms.time.value >= 1) {
            m.uniforms.time.value = 0;
            m.uniforms.flag.value = !m.uniforms.flag.value; // 切换方向
        }
    });
}

💡 调试与优化

问题类型 表现形式 解决方案
溶解效果不明显 模型无变化 检查溶解贴图路径
边缘发光过强 黄色过于刺眼 调整 dissolveWidth 参数
性能问题 帧率下降 降低贴图分辨率
动画卡顿 切换不流畅 优化 updateMaterial 函数

🚀 扩展思路

变体效果 核心改动 难度
自定义溶解图案 使用不同的溶解贴图 ⭐⭐
多色边缘 添加颜色渐变 ⭐⭐
粒子效果 溶解时发射粒子 ⭐⭐⭐
3D模型溶解 应用到复杂模型 ⭐⭐⭐

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