简单理解GPU一个点的渲染过程

渲然过程概述

主要分为以下五个大阶段,每个阶段下面都涉及到更复杂的算法

顶点着色器=>图元装配=>光栅化=>片元着色器=>深度模板测试

如图所示,我们想绘制一个点在画布上,看看整个渲染过程

1、顶点着色器

一个单独的点的坐标进行输入,顶点着色器对每个坐标进行处理,gpu就知道了 这个点的位置在哪。因此我们定好这个点坐标

const vertex= 0.5,0.5,0,1,r,g,b,a

less 复制代码
@vertex
fn vertex_main(@location(0) position: vec4f,
               @location(1) color: vec4f) -> VertexOut
{
  var output : VertexOut;
  output.position = position;
  output.color = color;
  return output;
}

2、图元装配阶段

图元这个东西容易误解为图形,图元确实和图形息息相关,但是图元强调的是,用什么方式去将一系列点连接成为一个图形。

对于一个点的情况,图元只有一种,无法做连接操作,最终连接的就是一个点。

对于多个点,可以连接的方式就有很多了,比如多个点、多条线、多个三角形、多个三角扇。

在webgpu里对应的就是渲染管线的一个配置

css 复制代码
primitive: {
        topology: "triangle-strip", //绘制的原始类型,三角形  triangle-list
}

3、光栅化(图元=>片元)

前面装配了图元,光栅化就是把图元转换成片元。

片元是什么?

片元就是在设备屏幕上的x,y坐标

简单来说,假如我有一台移动设备 像素19201080,光栅化就是计算出 设备19201080的数组中,每个坐标的位置。

在三维场景中,存在物体的坐标系,世界坐标系,相机对应的坐标系,屏幕坐标系,裁剪坐标系。从物体坐标到屏幕坐标,中间需要进行矩阵变换。

4、片元着色器

片元已经解释了是屏幕空间中的xy坐标位置,那么片元着色器就更好理解了,就是计算最终的颜色。

@fragment

fn fragment_main(fragData: VertexOut) -> @location(0) vec4f

{

return fragData.color;

}

5、深度模板测试

深度测试和模板测试,都是为了测试哪个图形离屏幕中心最近的。

离得近的会放进颜色缓冲区,颜色缓冲区最终会渲染到屏幕上。

在三维开发中,会涉及到模型、光照、阴影等更复杂的情况,所以会做这么多测试。

学习上的感悟:

人的大脑的学习,更善于从a,b,c学习推导到d,在abc不了解的情况下,直接学习d,大脑会觉得很难,无法理解。所以有的时候对一个事物理解不了,不代表这个事物本身很难,而是直接从d开始了学习。

没有很难的事物,只有缺少科学的学习方法。

相关推荐
IT_陈寒1 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰2 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
山河木马2 小时前
渲染管线-计算得到gl_Position(顶点着色器)之后续GPU流程
javascript·webgl·图形学
竹林8182 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12274 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪4 小时前
Vue3-生命周期
前端
莪_幻尘4 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4535 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅5 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端