WebGPU、WebGL 与 3D 图形学
从 GPU 设备、缓冲区、纹理与着色器开始,通过可运行实验掌握 WebGPU、WebGL 和现代 3D 渲染。
- 36
- 个实验
- 7
- 篇教程
- 7
- 条学习阶段
可运行实验
先确认安全上下文、WebGPU 入口、适配器、可选特性和硬件限制,避免把环境问题误判为代码错误。
进入实验 → Adapter 与 Device:建立 GPU 会话从 Adapter 请求 Device,理解 requiredFeatures、requiredLimits、device.queue 和 device.lost。
进入实验 → Canvas 配置:让 GPU 输出进入页面取得 webgpu 上下文,使用首选画布格式配置,并把一个清屏命令提交到当前交换纹理。
进入实验 → 命令编码:CPU 描述,GPU 批量执行用命令编码器记录多个步骤,结束为不可变 CommandBuffer,再一次性提交给 GPU。
进入实验 → 第一个三角形:完整渲染管线不使用顶点缓冲区,仅靠 vertex_index 在 WGSL 中生成三角形,走完最小渲染流程。
进入实验 → WGSL 基础:类型、结构体、函数与内建值通过一个程序化渐变学习标量、向量、结构体、函数、属性和内建坐标。
进入实验 → 顶点缓冲区:把几何数据送入管线把位置和颜色交错存储在一个 GPUBuffer 中,并用顶点缓冲区布局解释每一段字节。
进入实验 → 索引缓冲区:复用顶点用四个顶点和六个索引画矩形,对比非索引绘制的重复数据。
进入实验 → 插值:顶点输出如何变成每像素输入观察三个顶点颜色在三角形内部自动插值,并切换为 flat 插值理解阶段接口。
进入实验 → Uniform Buffer:小而频繁的全局参数用 uniform 传递时间、颜色和缩放,逐帧更新同一个缓冲区而不重建资源。
进入实验 → Bind Group:资源与着色器的契约把两个 uniform 资源绑定到固定槽位,理解 BindGroupLayout 与 BindGroup 的区别。
进入实验 → 显式 Pipeline Layout:可控的资源接口显式创建两套 BindGroupLayout,组合为 PipelineLayout,并在多个对象间复用。
进入实验 → 纹理上传:从像素数组到 GPUTexture生成棋盘格像素,上传到二维纹理,并在片元着色器中采样显示。
进入实验 → Sampler:寻址与过滤策略并排比较最近邻和线性过滤,并观察 repeat 与 clamp-to-edge 的区别。
进入实验 → Mipmaps:为缩小采样准备多级纹理手动写入多级 mip,显式采样不同 LOD,理解为什么远处纹理需要预过滤。
进入实验 → 矩阵变换:从模型空间到裁剪空间构建旋转立方体,用 MVP 矩阵串起模型、相机和透视投影。
进入实验 → 深度缓冲:正确处理前后遮挡为 3D 场景添加深度附件,让前方表面覆盖后方表面,而不是依赖提交顺序。
进入实验 → 实例化:一次 draw 绘制大量对象把每个实例的位置、比例和颜色放进实例缓冲区,一次 draw 绘制数百个几何体。
进入实验 → 混合与透明:新颜色如何合成到旧颜色绘制重叠半透明形状,比较标准 alpha 混合与加法混合。
进入实验 → MSAA:让几何边缘更平滑创建 4 倍多重采样颜色纹理,渲染后 resolve 到单采样 Canvas 纹理。
进入实验 → 离屏渲染:把上一遍结果当作下一遍输入第一遍渲染到普通纹理,第二遍采样该纹理并施加颜色变换后显示到 Canvas。
进入实验 → Storage Buffer:大规模可读写数据在顶点着色器中从 storage buffer 读取位置与颜色,理解它和 vertex/uniform buffer 的差异。
进入实验 → 第一个计算着色器:并行处理数组把一组数字送入 GPU,每个 invocation 独立执行平方与偏移,再读回结果。
进入实验 → 工作组:局部协作与调度维度把二维调度中的全局、工作组和局部编号写入缓冲区,直观看见线程层级。
进入实验 → GPU 读回:Copy、Map 与行对齐把离屏纹理复制到可映射缓冲区,处理 bytesPerRow 对齐,再从 CPU 读取像素。
进入实验 → 计算 + 渲染:GPU 粒子双缓冲计算着色器更新粒子,渲染管线读取更新后的缓冲区,一次提交完成模拟和显示。
进入实验 → 原子操作与归约:安全汇总并行结果大量 invocation 并行统计随机数据直方图,用 atomicAdd 避免多个线程覆盖同一计数。
进入实验 → Storage Texture:计算着色器直接写图像计算着色器逐像素写入 rgba8unorm 存储纹理,再由渲染管线采样显示。
进入实验 → 动态偏移:一个大缓冲区服务多个对象把多个对象的 uniform 块打包进一个缓冲区,绘制时用动态偏移选择当前对象。
进入实验 → 间接绘制:让 GPU 决定绘制参数计算着色器写入绘制参数缓冲区,随后渲染 pass 用 drawIndirect 消费,无需 CPU 读取。
进入实验 → 查询:测量可见样本与 GPU 工作为两个对象记录遮挡查询,解析到缓冲区并读回;同时检查 timestamp-query 是否可用。
进入实验 → 验证、错误作用域与设备丢失故意创建不合法资源并捕获 GPUValidationError,同时读取 WGSL 编译诊断和模拟设备销毁。
进入实验 → 资源生命周期与性能:复用、批处理、异步完成复用管线、缓冲区和附件,测量命令编码开销,并用 onSubmittedWorkDone 理解提交完成点。
进入实验 → Web Worker 中的 WebGPU在动态 Worker 中请求 WebGPU、运行计算着色器并把结果发回主线程。
进入实验 → 综合项目:可交互 GPU 粒子场把本教程核心概念组合成一个可交互粒子系统:计算更新、双缓冲、实例化四边形、颜色映射和鼠标力场。
进入实验 → WebGL2 对照:同一个三角形,两种 API 心智模型用 WebGL2 重画入门三角形,逐项对照上下文、着色器、顶点输入、渲染状态和提交模型,理解迁移时真正变化的部分。
进入实验 →专题教程
从顶点数据进入 GPU,到光栅化、片段着色与深度测试,搭建完整实时渲染心智模型。
开始阅读 → Three.js 场景、矩阵与拾取穿过 Three.js 抽象层,理解场景渲染、局部/世界矩阵、法线贴图和射线拾取。
开始阅读 → Three.js 实战技巧汇集法线、UV、Raycaster、BatchedMesh、相机矩阵与曲线路径等高频三维问题。
开始阅读 → Three.js 源码阅读方法以 WebGLRenderer 为控制中心,按核心对象、材质、加载器与后处理建立源码阅读顺序。
开始阅读 → 从零实现 Orbit Controller从相机坐标系、球坐标和输入状态机出发,实现旋转、平移、缩放与惯性更新。
开始阅读 → Web Worker 模型加载器把 glTF 解析、几何合并和可转移对象搬到 Worker,降低大模型处理对主线程的阻塞。
开始阅读 → glTF 数据结构沿 Scene → Node → Mesh → Primitive → Accessor → BufferView → Buffer 读懂模型数据。
开始阅读 →