Visual LabINTERACTIVE LEARNING
阶段 2 · 数据流基础18 分钟

Bind Group:资源与着色器的契约

@group/@binding、布局与可复用资源集合

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

LEARNING GOALS

先明确本课目标

1

读取自动布局

2

创建多个 BindGroup

3

在同一管线下切换资源集合

MENTAL MODEL · 再建立心智模型

BindGroupLayout 是插座规格,BindGroup 是插入插座的具体资源;WGSL 的 @group/@binding 是插座编号。

MINIMAL EXAMPLE

着色器里的资源槽位怎样连接到真实 Buffer?

@group(n) @binding(m) 声明资源接口地址;GPUBindGroup 按同一 binding 编号装入真实资源。Pipeline 使用时通过 setBindGroup(n, group) 绑定整组资源。

最小例子wgsl
@group(0) @binding(0) var<uniform> transform: mat4x4f;
@group(0) @binding(1) var<uniform> material: vec4f;

// JavaScript:
// entries: [
//   { binding: 0, resource: { buffer: transformBuffer } },
//   { binding: 1, resource: { buffer: materialBuffer } },
// ]
  1. group 是资源集合 常按更新频率拆分,例如场景、材质、对象各一组。
  2. binding 是组内槽位 编号和资源类型必须与 BindGroupLayout/WGSL 一致。
  3. 绑定不等于复制 BindGroup 保存资源引用,setBindGroup 不会把 Buffer 内容复制一遍。

一个 BindGroup 可复用多帧;切换对象时只需绑定另一个兼容的资源组。

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

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

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

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

本课挑战

设计帧、材质、对象三层绑定组并说明各自更新频率。

DEEP DIVE · 实验之后

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

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

CORE IDEA

核心讲解

01

绑定组减少重复设置

把一组经常一起使用的资源预先打包,绘制时只需 setBindGroup。布局验证在创建阶段完成。

02

如何分组

常见做法是 group 0 放帧级资源、group 1 放材质、group 2 放对象。这样可按变化频率复用。

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

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

展开⌄
API COMPARISON

WebGL 把资源散落在多个全局槽位,WebGPU 把一组资源预先封装成可验证对象。

WebGL

Program、uniform、UBO binding point、texture unit 与 sampler 状态分别设置。

WebGPU

BindGroupLayout 定义插座,BindGroup 一次性绑定符合布局的资源集合。

不要按 WebGL 调用顺序设计 Bind Group;按帧、材质、对象的更新频率分组。