Visual LabINTERACTIVE LEARNING
阶段 6 · 项目高级45–90 分钟

综合项目:可交互 GPU 粒子场

Compute + Render + Ping-Pong + Uniform + Pointer

把本教程核心概念组合成一个可交互粒子系统:计算更新、双缓冲、实例化四边形、颜色映射和鼠标力场。

LEARNING GOALS

先明确本课目标

1

设计共享数据结构

2

组织每帧 compute→render 命令

3

处理输入、尺寸、资源复用和调试

MENTAL MODEL · 再建立心智模型

完整 WebGPU 应用是一张资源与 pass 的数据流图:CPU 只维护少量控制参数,主要状态与工作留在 GPU。

MINIMAL EXAMPLE

怎样把多个 Pass 和资源关系组织成完整一帧?

Frame Graph 用节点表示 Pass,用边表示资源读写依赖。先描述“谁读谁写”,再决定执行顺序、资源复用和同步,比按 API 调用堆代码更容易扩展。

最小例子javascript
// 本项目一帧的数据流
updateInputBuffer();

// Pass 1: particlesA -> Compute -> particlesB
encodeSimulationPass(encoder);

// Pass 2: particlesB -> Render -> canvasTexture
encodeParticleRenderPass(encoder);

device.queue.submit([encoder.finish()]);
  1. 输入更新 CPU 只写指针、时间等小型参数。
  2. Compute 节点 读取上一帧粒子状态,写入下一帧状态。
  3. Render 节点 读取新状态并写 Canvas,依赖 Compute 已结束。

当 Pass 增多时,仍能从资源依赖看清执行顺序和 Ping-Pong 角色。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

加入 GPU 端空间分桶与邻域交互,做一个简化 Boids。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

项目结构

粒子状态常驻两个 storage buffer;compute pass 从 A 读向 B 写;render pass 将 B 解释为实例数据;下一帧交换角色。

02

可继续扩展

加入空间网格、碰撞、尾迹纹理、Bloom、间接绘制和 Worker 后,它可以成长为更完整的 GPU 模拟框架。

OPTIONAL · 迁移时查阅WebGPU 与 WebGL2 对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

同一个粒子系统能体现两代 API 的核心差异:借用渲染管线,还是直接表达计算图。

WebGL

Transform Feedback 更新粒子 Buffer,Ping-Pong 交换后用 instanced draw 或 POINTS 呈现。

WebGPU

Compute Pass 更新 Storage Buffer,Render Pass 直接消费新状态,统一在 CommandBuffer 中排序。

迁移时可以保留粒子结构与 Ping-Pong,但应重新设计资源绑定和 workgroup 调度。