Visual LabINTERACTIVE LEARNING
WEB GRAPHICS · WEBGPU · WEBGL

WebGPU、WebGL 与 3D 图形学

从 GPU 设备、缓冲区、纹理与着色器开始,通过可运行实验掌握 WebGPU、WebGL 和现代 3D 渲染。

36
个实验
7
篇教程
7
条学习阶段
适合谁Web 图形、3D 与 GPU API 学习者
推荐顺序图形学概念 → WebGPU 实验 → WebGL 对照
最终产出独立组织渲染、计算与资源生命周期
CURRICULUM

可运行实验

起步12 分钟 环境体检:浏览器是否真的能跑 WebGPU?

先确认安全上下文、WebGPU 入口、适配器、可选特性和硬件限制,避免把环境问题误判为代码错误。

进入实验 →
起步15 分钟 Adapter 与 Device:建立 GPU 会话

从 Adapter 请求 Device,理解 requiredFeatures、requiredLimits、device.queue 和 device.lost。

进入实验 →
起步16 分钟 Canvas 配置:让 GPU 输出进入页面

取得 webgpu 上下文,使用首选画布格式配置,并把一个清屏命令提交到当前交换纹理。

进入实验 →
起步18 分钟 命令编码:CPU 描述,GPU 批量执行

用命令编码器记录多个步骤,结束为不可变 CommandBuffer,再一次性提交给 GPU。

进入实验 →
起步22 分钟 第一个三角形:完整渲染管线

不使用顶点缓冲区,仅靠 vertex_index 在 WGSL 中生成三角形,走完最小渲染流程。

进入实验 →
数据流18 分钟 WGSL 基础:类型、结构体、函数与内建值

通过一个程序化渐变学习标量、向量、结构体、函数、属性和内建坐标。

进入实验 →
数据流18 分钟 顶点缓冲区:把几何数据送入管线

把位置和颜色交错存储在一个 GPUBuffer 中,并用顶点缓冲区布局解释每一段字节。

进入实验 →
数据流18 分钟 索引缓冲区:复用顶点

用四个顶点和六个索引画矩形,对比非索引绘制的重复数据。

进入实验 →
数据流18 分钟 插值:顶点输出如何变成每像素输入

观察三个顶点颜色在三角形内部自动插值,并切换为 flat 插值理解阶段接口。

进入实验 →
数据流18 分钟 Uniform Buffer:小而频繁的全局参数

用 uniform 传递时间、颜色和缩放,逐帧更新同一个缓冲区而不重建资源。

进入实验 →
数据流18 分钟 Bind Group:资源与着色器的契约

把两个 uniform 资源绑定到固定槽位,理解 BindGroupLayout 与 BindGroup 的区别。

进入实验 →
数据流18 分钟 显式 Pipeline Layout:可控的资源接口

显式创建两套 BindGroupLayout,组合为 PipelineLayout,并在多个对象间复用。

进入实验 →
3D18 分钟 纹理上传:从像素数组到 GPUTexture

生成棋盘格像素,上传到二维纹理,并在片元着色器中采样显示。

进入实验 →
3D18 分钟 Sampler:寻址与过滤策略

并排比较最近邻和线性过滤,并观察 repeat 与 clamp-to-edge 的区别。

进入实验 →
3D18 分钟 Mipmaps:为缩小采样准备多级纹理

手动写入多级 mip,显式采样不同 LOD,理解为什么远处纹理需要预过滤。

进入实验 →
3D18 分钟 矩阵变换:从模型空间到裁剪空间

构建旋转立方体,用 MVP 矩阵串起模型、相机和透视投影。

进入实验 →
3D18 分钟 深度缓冲:正确处理前后遮挡

为 3D 场景添加深度附件,让前方表面覆盖后方表面,而不是依赖提交顺序。

进入实验 →
3D18 分钟 实例化:一次 draw 绘制大量对象

把每个实例的位置、比例和颜色放进实例缓冲区,一次 draw 绘制数百个几何体。

进入实验 →
3D18 分钟 混合与透明:新颜色如何合成到旧颜色

绘制重叠半透明形状,比较标准 alpha 混合与加法混合。

进入实验 →
3D18 分钟 MSAA:让几何边缘更平滑

创建 4 倍多重采样颜色纹理,渲染后 resolve 到单采样 Canvas 纹理。

进入实验 →
3D18 分钟 离屏渲染:把上一遍结果当作下一遍输入

第一遍渲染到普通纹理,第二遍采样该纹理并施加颜色变换后显示到 Canvas。

进入实验 →
计算18 分钟 Storage Buffer:大规模可读写数据

在顶点着色器中从 storage buffer 读取位置与颜色,理解它和 vertex/uniform buffer 的差异。

进入实验 →
计算18 分钟 第一个计算着色器:并行处理数组

把一组数字送入 GPU,每个 invocation 独立执行平方与偏移,再读回结果。

进入实验 →
计算18 分钟 工作组:局部协作与调度维度

把二维调度中的全局、工作组和局部编号写入缓冲区,直观看见线程层级。

进入实验 →
计算18 分钟 GPU 读回:Copy、Map 与行对齐

把离屏纹理复制到可映射缓冲区,处理 bytesPerRow 对齐,再从 CPU 读取像素。

进入实验 →
计算18 分钟 计算 + 渲染:GPU 粒子双缓冲

计算着色器更新粒子,渲染管线读取更新后的缓冲区,一次提交完成模拟和显示。

进入实验 →
计算18 分钟 原子操作与归约:安全汇总并行结果

大量 invocation 并行统计随机数据直方图,用 atomicAdd 避免多个线程覆盖同一计数。

进入实验 →
计算18 分钟 Storage Texture:计算着色器直接写图像

计算着色器逐像素写入 rgba8unorm 存储纹理,再由渲染管线采样显示。

进入实验 →
进阶24 分钟 动态偏移:一个大缓冲区服务多个对象

把多个对象的 uniform 块打包进一个缓冲区,绘制时用动态偏移选择当前对象。

进入实验 →
进阶24 分钟 间接绘制:让 GPU 决定绘制参数

计算着色器写入绘制参数缓冲区,随后渲染 pass 用 drawIndirect 消费,无需 CPU 读取。

进入实验 →
进阶22 分钟 查询:测量可见样本与 GPU 工作

为两个对象记录遮挡查询,解析到缓冲区并读回;同时检查 timestamp-query 是否可用。

进入实验 →
进阶22 分钟 验证、错误作用域与设备丢失

故意创建不合法资源并捕获 GPUValidationError,同时读取 WGSL 编译诊断和模拟设备销毁。

进入实验 →
进阶25 分钟 资源生命周期与性能:复用、批处理、异步完成

复用管线、缓冲区和附件,测量命令编码开销,并用 onSubmittedWorkDone 理解提交完成点。

进入实验 →
进阶24 分钟 Web Worker 中的 WebGPU

在动态 Worker 中请求 WebGPU、运行计算着色器并把结果发回主线程。

进入实验 →
项目45–90 分钟 综合项目:可交互 GPU 粒子场

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

进入实验 →
WebGL24 分钟 WebGL2 对照:同一个三角形,两种 API 心智模型

用 WebGL2 重画入门三角形,逐项对照上下文、着色器、顶点输入、渲染状态和提交模型,理解迁移时真正变化的部分。

进入实验 →
DEEP READING

专题教程