Visual LabINTERACTIVE LEARNING
阶段 3 · 3D基础18 分钟

MSAA:让几何边缘更平滑

多重采样附件与 Resolve

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

LEARNING GOALS

先明确本课目标

1

创建 sampleCount: 4 的附件

2

让 pipeline.multisample 一致

3

使用 resolveTarget

MENTAL MODEL · 再建立心智模型

MSAA 在一个像素内保存多个覆盖样本,渲染结束时把它们解析成一个展示像素。

MINIMAL EXAMPLE

MSAA 为什么能让三角形边缘更平滑?

MSAA 在一个像素内保存多个覆盖样本,边缘像素因部分样本被几何覆盖而得到中间颜色;Resolve 再把多样本结果合成为单采样 Canvas 纹理。

最小例子javascript
const msaaTexture = device.createTexture({
  size: [canvas.width, canvas.height],
  sampleCount: 4,
  format,
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
});

colorAttachments: [{
  view: msaaTexture.createView(),
  resolveTarget: context.getCurrentTexture().createView(),
}]
  1. Pipeline 也设 4 multisample.count、颜色附件 sampleCount 必须一致。
  2. 只改善几何覆盖 MSAA 主要平滑边缘,不会自动消除纹理缩小锯齿。
  3. Resolve 到 Canvas Canvas 通常是单采样纹理,不能直接作为 4× MSAA 写入目标。

边缘像素由多个覆盖样本平均得到更连续的亮度变化。

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

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

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

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

本课挑战

实现尺寸变化时复用或重建 MSAA 附件的管理器。

DEEP DIVE · 实验之后

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

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

CORE IDEA

核心讲解

01

它主要改善几何边缘

MSAA 对三角形覆盖边缘有效,但不会自动解决着色器内部高频图案或纹理闪烁。

02

附件与管线必须一致

多重采样纹理的 sampleCount、渲染管线的 multisample.count 必须匹配,最后通过 resolveTarget 输出到单采样纹理。

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

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

展开⌄
API COMPARISON

多样本覆盖原理相同;WebGPU 显式拥有多样本附件和 resolve 目标。

WebGL

默认 framebuffer 可由上下文 antialias 隐式提供;离屏时用 multisample renderbuffer 再 blit。

WebGPU

创建 sampleCount>1 的纹理,Pipeline 使用相同 count,pass 指定 resolveTarget。

WebGL 默认画布的 antialias 不等于可复用的 MSAA 附件;迁移时画出真实资源关系。