GPU硬件如何实现光栅化?
版权声明
- 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
- 文章内容不得删减、修改、演绎
- 本文视频版本:见文末
引言
大家好,我是老雷,今天我想从GPU硬件原理出发,给大家分享在图形渲染流水线中,光栅化步骤的硬件原理,从而帮助大家更好的理解图形学的底层原理以及渲染优化的底层逻辑。
好,废话不多说,我们先来整体看一下渲染流水线,以及光栅化在渲染流水线中的位置和作用。
图形渲染流水线

光栅化,英文Rasterization,是图形渲染流水线中非常重要的一个步骤,它位于顶点计算之后,像素着色之前,目的就是把顶点构成的三角形映射到屏幕的一个个像素点上。
但是在一个游戏场景中,光栅化的压力是很大的。
我们知道,游戏场景是由很多游戏元素构成,例如:玩家、怪物、宠物、道具、地形、植被、树木、房子等等,这些模型少则几十、几百个三角面,多则几千、上万个三角面,每个三角面在经过光栅化以后,又会被填充到多个屏幕像素上,
因此光栅化的开销很大!
但是不用怕,我们的GPU就是为大规模计算而生的,那么GPU是如何做到快速的光栅化计算的呢?
这就需要掌握一些GPU底层的知识了。下面我将带着你一步一步揭开光栅化的底层面纱~
GPU架构

先看这幅图:这是我们的GPU,它由显存和许多计算单元组成。
显存(Global Memory)主要指的是在GPU主板上的DRAM,类似于CPU的内存,特点是容量大但是速度慢,CPU和GPU都可以访问。
计算单元通常是指SM(Stream Multiprocessor,流多处理器),这些SM在不同的显卡上组织方式还不太一样。作为执行计算的单元,其内部还有自己的控制模块、寄存器、缓存、指令流水线等部件。
GPC

GPU包含若干个GPC(它是Graphics Processing Cluster,图形处理簇的缩写)
不同架构的GPU包含的GPC数量不一样。以Maxwell架构为例,它是由4个GPC组成
SM

Maxwell的1个GPC有4个SM

不过这不是我们本次分享的重点,大家要重点关注的是GPC里连接各个SM计算单元的光栅化引擎(Raster Engine)。另外,连接每个GPC靠的是Crossbar,例如某一个GPC计算完的数据需要另外GPC来处理,这个分配就是靠的Crossbar。
光栅化跟GPU硬件的关系

再回到我们的问题:那么光栅化跟上面的硬件有什么具体关系呢?
首先,为了平衡光栅化的负载压力,Crossbar会根据一定策略,将屏幕划分成多个区域块,并重新分配给每一个GPC。这是Crossbar为屏幕划分区域块的示意图。
这里GPC接收到分配的区域后,就交给光栅化引擎来负责这些三角形像素信息的生成。同时还会处理其他的一些渲染流水线步骤,包括:三角形裁剪、背面剔除以及Early-Z(相关知识可以参考我的TA全栈项目)。
GPU架构和渲染管线

接下来光栅化引擎将将Vertex Shader计算后存放在L1和L2缓存里面的数据加载出来

将插值好的数据转交给PolyMorph Engine的Attribute Setup模块

经过插值的数据填充到Pixel Shader的寄存器里,供SM的运算核心做像素计算的时候使用
上面提到Crossbar会根据一定策略划分区域块,实际上的划分可能比上图更加复杂,我们来看一个实验
实验:渲染SM_ID

那么问题来了:
如果给每个SM分配一个[0,SM_COUNT-1]的WARP_ID
并将每个像素根据SM_ID渲染为不同亮度的红色:SM_ID / (SM_COUNT-1),
你认为会得到什么渲染结果呢?(图中的绿色暂时忽略)
这里我们以Geforce1080为例,它有20个SM,如果我们用不同亮度的红色表示不同的线程ID,并且渲染由两个三角形构成的四边形面片,就会得到这样的像素块效果。
在这里有几点值得注意:
第一,图中有20个亮度色阶,说明有20个不同编号的SM
第二,像素颜色不是连续变化的,说明SM的划分并不是按编号顺序简单地依次划分,而是由Crossbar重组后被光栅化器调度执行的
第三,同一个色块内的像素如果分属不同三角形,就会分给不同的SM进行处理。如果三角形越细碎,分配SM的次数就会越多,调度开销越大。
第四,这里一个色块是8×8,也就说明一个SM里运行了256个线程束
那么,什么是线程束呢?
什么是线程束

线程束英文WARP,为了和线程数加以区分,在容易产生歧义的地方,我们统一用英文WARP,而不用中文术语(线程束)
那么光栅化以后的像素是如何被并行计算(也就是逐像素渲染)的呢?
在逻辑上,一个线程执行一个Pixel Shader的核心函数,也就是一个线程处理一个像素。
GPU将屏幕分成一个一个的2×2的像素块,因为逻辑上一个Warp包含了32个线程,也就是说一个Warp处理的是8个像素块,这就解释了为什么上面我们看到的色块是8*8的。
思考:如果渲染WARP_ID…

同理,我们再以WARP_ID渲染为例,你认为如果将每个像素根据SM_ID渲染为不同亮度的红色,会得到什么结果?
大家可以思考一下
思考题答案以及代码片段请回复“光栅化”获取
我是优梦创客的老雷,一个14年经验的游戏公司主程和引擎架构师,同时也是一位爱分享的游戏开发技术UP主
我会保持更新每月不少于2集、每年不少于26小时的干货视频
也欢迎你保持关注,以获取我的最新更新
当然,我也准备了几百个小时的技术美术教程分享,欢迎了解
小结

最后,我们对今天的分享做一个小结。今天我们:
- 了解了光栅化在图形渲染流水线中的地位和作用
- 知道了GPU、GPC、SM的关系
- 也知道了SM、Warp、Thread的关系
- 并且通过实践理解了光栅化在GPU中是如何被调度的
进阶

这里还有一些可以进阶学习的知识点,在这里列出,供同学们参考:
GPU如何处理像素运算?
在输出到渲染目标前,GPU还会做哪些事情?
移动平台的GPU跟桌面端有哪些不同?
如何针对移动端GPU做优化?
CPU和GPU在计算上有什么本质区别?
如何编写高效能Shader代码?
相关文章:
GPU硬件如何实现光栅化?
版权声明 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本:见文末 引言 大家好,我是老雷,今天我想从GPU硬件原理出发,给大家分享在图形渲…...
Python写入文件内容:从入门到精通
在日常编程工作中,我们常常会遇到需要将数据保存至磁盘的需求。无论是日志记录、配置文件管理还是数据持久化,掌握如何有效地使用Python来写入文件内容都是必不可少的一项技能。本文将从基础语法开始,逐步深入探讨Python中写入文件内容的各种…...
相亲交易系统源码详解与开发指南
随着互联网技术的发展,越来越多的传统行业开始寻求线上转型,其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求,因此,开发一款基于Web的相亲交易系统显得尤为重要开发者h17711347205。本文将详细介绍如何使用…...
Golang | Leetcode Golang题解之第413题等差数列划分
题目: 题解: func numberOfArithmeticSlices(nums []int) (ans int) {n : len(nums)if n 1 {return}d, t : nums[0]-nums[1], 0// 因为等差数列的长度至少为 3,所以可以从 i2 开始枚举for i : 2; i < n; i {if nums[i-1]-nums[i] d {t}…...
汽车总线之----FlexRay总线
Introduction 随着汽车智能化发展,车辆开发的ECU数量不断增加,人们对汽车系统的各个性能方面提出了更高的需求,比如更多的数据交互,更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性,像ABS防抱死系统&a…...
前端代替后端做分页操作
如果后端没有分页api,前端如何做分页一、使用computed 这个变量应该是计算之后的值,是一个状态管理变量,跟onMounted类似import {computed} from vue // 定义ref储存rolelist,这里是原始数据 const roleList ref([])// 定义页码…...
L3 逻辑回归
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…...
Flink系列知识之:Checkpoint原理
Flink系列知识之:Checkpoint原理 在介绍checkpoint的执行流程之前,需要先明白Flink中状态的存储机制,因为状态对于检查点的持续备份至关重要。 State Backends分类 下图显示了Flink中三个内置的状态存储种类。MemoryStateBackend和FsState…...
智算中心动环监控:构建高效、安全的数字基础设施@卓振思众
在当今快速发展的数字经济时代,智算中心作为人工智能和大数据技术的核心支撑设施,正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定,卓振思众动环监控应运而生,成为智算中心管理的重要组成部分…...
PyTorch VGG16手写数字识别教程
手写数字识别教程:使用PyTorch和VGG16 1. 环境准备 确保你已安装以下库: pip install torch torchvision2. 导入必要的库 import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms import tor…...
安卓13删除下拉栏中的设置按钮 android13删除设置按钮
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。 2.问题分析…...
FDA辅料数据库在线免费查询-药用辅料
在药物制剂的研制过程中,需要确定这些药用辅料的安全用量。而美国食品药品监督管理局(FDA)的辅料数据库(IID)提供了其制剂研发中的关键参考资源,使得更多的医药研发相关人员及企业单位节省试验环节及时间成…...
git pull 报错 refusing to merge unrelated histories
这个对我来说非常常见,因为我都是先由本地项目,再想着传到github上去。 在本地项目中执行 git init git add . git commit -m “xxx” 在github上创建项目,添加了 README.md 文件。 git remote add origin https://github.com/raoxiaoya/x…...
STM32G431RBT6(蓝桥杯)串口(发送)
一、基础配置 (1) PA9和PA10就是串口对应在单片机上的端口 注意:一定要先选择PA9的TX和PA10的RX,再去打开异步的模式 (2) 二、查看单片机的端口连接至电脑的哪里 (1)此电脑->右击属性 (2)找到端…...
使用 typed-rest-client 进行 REST API 调用
typed-rest-client 是一个用于 Node.js 的库,它提供了一种类型安全的方式来与 RESTful API 进行交互。其主要功能包括: 安装 typed-rest-client 要使用 typed-rest-client,首先需要安装它,可以通过 npm 来安装: $ n…...
在Ubuntu 14.04上安装Solr的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Solr 是基于 Apache Lucene 的搜索引擎平台。它用 Java 编写,并使用 Lucene 库来实现索引。可以通过各种 REST API&am…...
LabVIEW提高开发效率技巧----使用LabVIEW工具
LabVIEW为开发者提供了多种工具和功能,不仅提高工作效率,还能确保项目的质量和可维护性。以下详细介绍几种关键工具,并结合实际案例说明它们的应用。 1. VI Analyzer:自动检查代码质量 VI Analyzer 是LabVIEW提供的一款强大的工…...
Pyspark dataframe基本内置方法(4)
文章目录 Pyspark sql DataFrame相关文章RDDrepartition 重新分区replace 替换sameSemantics dataframe是否相等sample 采样sampleBy 分层采样schema 显示dataframe结构select 查询selectExpr 查询semanticHash 获取哈希值show 展示dataframesort 排序sortWithinPartitions 分区…...
配置win10开电脑时显示可登录账号策略
有1台公用的windows10电脑,电脑上有N多用户,使用人员登录时选择相应的账号登录即可。但在某次使用脚本加固后,发现之前显示的用户都不能显示了。检查加固脚本,是脚本启用了“交互式登录:不显示上次登录”策略。因此&am…...
01-Mac OS系统如何下载安装Python解释器
目录 Mac安装Python的教程 mac下载并安装python解释器 如何下载和安装最新的python解释器 访问python.org(受国内网速的影响,访问速度会比较慢,不过也可以去我博客的资源下载) 打开历史发布版本页面 进入下载页 鼠标拖到页面…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
