WebGPU Tile Field —— 鼠标驱动的刚性金属瓦片场
原作者:aengel 原始 Link:https://mesh3d.gallery/experiment/webgpu-tile-field
项目在线地址:https://lab.aengel.io/webgpu-tilefield

一、项目简介(编译自原文)
该项目是一面由大量刚性金属瓦片组成的墙体,整体会跟随鼠标光标方向倾斜。它使用 WebGPU 与 Three.js TSL 构建,支持在五种不同的瓦片形状之间切换;当鼠标悬停时,表面会产生局部变形;点击则会从点击点向整个瓦片场发送一圈涟漪扩散。
原页面结构化描述:
A wall of rigid metal tiles that tilts to follow your cursor, built with WebGPU and Three.js TSL. Five tile shapes to switch between, hover deforms the surface and clicking sends a ripple across the field.
项目标签:WebGPU、Shader、Procedural。

二、核心交互与技术栈
| 项目 | 内容 |
|---|---|
| 渲染 API | WebGPU |
| 着色层 | Three.js TSL(Three.js Shading Language) |
| 主要交互 | 光标跟踪倾斜、悬停变形、点击涟漪扩散 |
| 图形类型 | 程序化金属瓦片场,支持 5 种瓦片形状切换 |
| 渲染特点 | 大量瓦片组成,需高效处理每片瓦片的姿态变化 |
需要特别说明:原页面是 Next.js 服务端渲染后的 HTML,没有直接暴露 WGSL/GLSL 着色器源码,因此下文会从项目描述和技术栈出发,推断其核心实现与优化要点。

三、3 个核心优化要点
-
GPU 实例化 + 着色器内程序化变形
大量瓦片不可能每帧由 CPU 计算并上传矩阵。合理做法是使用InstancedMesh或类似实例化方案,将每片瓦片的旋转、位移等变换放在顶点着色器中,根据瓦片网格坐标与鼠标位置实时计算,避免 CPU 侧逐实例更新矩阵带来的带宽和计算瓶颈。 -
交互状态以 Uniform 传递,减少 JS 每帧开销
鼠标悬停变形和点击涟漪的衰减参数(如点击时间、强度、传播半径)只需作为少量uniform或存储缓冲写入 GPU。着色器内部通过距离函数(如smoothstep、指数衰减)将鼠标影响叠加到瓦片法线或偏移上,JavaScript 侧每帧仅更新少量标量,几乎零开销。 -
五种瓦片形状共享同一 TSL 材质,减少着色器变体与绘制调用
五种瓦片形状不应对应五个独立材质。更优方案是在同一个 TSL 着色节点中传入“形状参数”,用程序化 SDF(有符号距离场)或 UV 重映射切换外形。这样既能减少着色器编译次数与draw call,又能充分利用 WebGPU 的并行计算能力,保持高帧率。

四、GLSL/WebGL 专业术语检查
原始页面并未出现直接的 GLSL 代码,相关术语使用正确,仍需注意以下几点:
- WebGPU:下一代 Web 图形 API,着色语言为 WGSL,而不是 GLSL。不要将 WebGPU 着色器简单称为 GLSL。
- Three.js TSL:即 Three.js Shading Language,是 Three.js 的节点式着色语言,可编译为 WGSL(用于 WebGPURenderer)或 GLSL(用于 WebGLRenderer)。中文语境建议保留缩写 TSL,并译为“Three.js 着色语言”。
- Shader:着色器,英文保留更常见。
- Procedural:程序化,指通过算法生成形状/纹理,而非依赖外部模型或贴图。
- SDF(Signed Distance Field):有符号距离场,常用于程序化形状定义与平滑过渡。
- InstancedMesh / Instancing:实例化渲染,适合大量相似几何体。
- Draw Call:绘制调用,越少越利于性能。
如果项目同时兼容 WebGL2,则对应着色器为 GLSL ES;但本项目明确基于 WebGPU,因此核心着色语言应为 WGSL,经由 TSL 抽象后生成。

五、核心代码保留
原页面没有提供可读的 WGSL/GLSL 着色器源码。为了保留有价值的信息,以下是页面结构化数据中嵌入的核心元数据 JSON-LD(已格式化),可用于理解项目归属与描述:
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "WebGPU Tile Field",
"description": "A wall of rigid metal tiles that tilts to follow your cursor, built with WebGPU and Three.js TSL. Five tile shapes to switch between, hover deforms the surface and clicking sends a ripple across the field.",
"url": "https://mesh3d.gallery/website/webgpu-tile-field",
"image": "https://cdn.mesh3d.gallery/previews/1787296337838-kxfbjxj-lab.aengel.io_webgpu-tilefield.webp",
"datePublished": "2026-08-21T07:13:24.945294+00:00",
"dateModified": "2026-08-21T07:13:25.134021+00:00",
"mainEntity": {
"@type": "WebSite",
"name": "WebGPU Tile Field",
"url": "https://lab.aengel.io/webgpu-tilefield",
"description": "A wall of rigid metal tiles that tilts to follow your cursor, built with WebGPU and Three.js TSL. Five tile shapes to switch between, hover deforms the surface and clicking sends a ripple across the field."
},
"author": {
"@type": "Person",
"name": "aengel",
"url": "https://lab.aengel.io/"
},
"keywords": "WebGPU, Shader, Procedural"
}
这段元数据完整保留了原作者、项目地址、核心描述与技术关键词,可作为项目溯源依据。

