Three.js 马赛克滤镜效果 | 三维可视化 / AI 提示词

📋 AI 提示词

prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用 Three.js 实现【马赛克滤镜效果】,具体要求:

【核心特效】
- UV坐标量化实现马赛克
- 可调节马赛克块大小
- 实时预览效果

【场景与光照】
- 深色背景
- 无需光源(纹理自发光)

【交互与控制】
- OrbitControls 轨道控制器
- GUI 面板调节马赛克尺寸

【技术要求】
- Three.js 最新版本
- ShaderMaterial 自定义着色器
- TextureLoader 加载图片

🖼️ 效果预览

马赛克滤镜效果

🎮 案例演示

立即体验


📖 效果拆解

层次 视觉效果 技术实现
基础 平面几何体 PlaneGeometry(1, 1)
核心特效 马赛克效果 UV坐标量化取整
交互 参数调节 lil-gui 控制面板
响应式 自适应图片比例 根据纹理尺寸调整平面缩放

🔧 核心技术点

1. 马赛克算法核心

通过量化UV坐标实现像素化效果,将连续的UV坐标转换为离散的块状坐标。

glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
    vec2 vUv2 = vUv;

    // X方向量化 - 将UV坐标按马赛克大小取整
    vUv2.x = floor(vUv2.x * vScreenSize.x / fMosaicScale) /
             (vScreenSize.x / fMosaicScale) +
             (fMosaicScale / 2.0) / vScreenSize.x;

    // Y方向量化
    vUv2.y = floor(vUv2.y * vScreenSize.y / fMosaicScale) /
             (vScreenSize.y / fMosaicScale) +
             (fMosaicScale / 2.0) / vScreenSize.y;

    // 从处理后的UV坐标采样纹理颜色
    vec4 color = texture2D(tDiffuse, vUv2);
    gl_FragColor = color;
}

2. 纹理加载与错误处理

使用 TextureLoader 的完整回调机制处理加载状态。

javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
textureLoader.load(
    `/files/author/AivoGenX.png`,
    (texture) => {
        uniforms.tDiffuse.value = texture;
        loadingIndicator.classList.add("hidden");
    },
    (xhr) => {
        const percent = Math.round((xhr.loaded / xhr.total) * 100);
        loadingIndicator.textContent = `加载中: ${percent}%`;
    },
    (error) => {
        console.error("图片加载错误:", error);
        loadingIndicator.textContent = "图片加载失败";
    }
);

3. 自适应图片比例

在着色器编译前根据纹理尺寸调整平面比例。

javascript
1
2
3
4
5
6
7
material.onBeforeCompile = (shader) => {
    if (uniforms.tDiffuse.value) {
        const aspect = uniforms.tDiffuse.value.image.width /
                      uniforms.tDiffuse.value.image.height;
        mesh.scale.set(aspect, 1, 1);
    }
};

💡 调试与优化

问题类型 表现形式 解决方案
马赛克效果异常 图案扭曲或错位 检查 vScreenSize 是否正确更新
图片加载失败 画面黑色 检查图片路径或使用绝对URL
性能问题 大尺寸图片帧率下降 使用较小分辨率图片
马赛克边缘锯齿 块边缘不平滑 调整 fMosaicScale 为偶数或添加抗锯齿处理

🚀 扩展思路

变体效果 核心改动 难度
动态马赛克 添加时间变量控制块大小变化 ⭐⭐
不规则马赛克 使用噪声函数生成不规则块 ⭐⭐⭐
边缘保留 添加边缘检测,边缘处使用小色块 ⭐⭐⭐
像素艺术风格 添加颜色量化,减少颜色数量 ⭐⭐

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