当前位置: 首页 > news >正文

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题等差数列划分

题目&#xff1a; 题解&#xff1a; func numberOfArithmeticSlices(nums []int) (ans int) {n : len(nums)if n 1 {return}d, t : nums[0]-nums[1], 0// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for i : 2; i < n; i {if nums[i-1]-nums[i] d {t}…...

汽车总线之----FlexRay总线

Introduction 随着汽车智能化发展&#xff0c;车辆开发的ECU数量不断增加&#xff0c;人们对汽车系统的各个性能方面提出了更高的需求&#xff0c;比如更多的数据交互&#xff0c;更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性&#xff0c;像ABS防抱死系统&a…...

前端代替后端做分页操作

如果后端没有分页api&#xff0c;前端如何做分页一、使用computed 这个变量应该是计算之后的值&#xff0c;是一个状态管理变量&#xff0c;跟onMounted类似import {computed} from vue // 定义ref储存rolelist&#xff0c;这里是原始数据 const roleList ref([])// 定义页码…...

L3 逻辑回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…...

Flink系列知识之:Checkpoint原理

Flink系列知识之&#xff1a;Checkpoint原理 在介绍checkpoint的执行流程之前&#xff0c;需要先明白Flink中状态的存储机制&#xff0c;因为状态对于检查点的持续备份至关重要。 State Backends分类 下图显示了Flink中三个内置的状态存储种类。MemoryStateBackend和FsState…...

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代&#xff0c;智算中心作为人工智能和大数据技术的核心支撑设施&#xff0c;正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定&#xff0c;卓振思众动环监控应运而生&#xff0c;成为智算中心管理的重要组成部分…...

PyTorch VGG16手写数字识别教程

手写数字识别教程&#xff1a;使用PyTorch和VGG16 1. 环境准备 确保你已安装以下库&#xff1a; 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辅料数据库在线免费查询-药用辅料

在药物制剂的研制过程中&#xff0c;需要确定这些药用辅料的安全用量。而美国食品药品监督管理局&#xff08;FDA&#xff09;的辅料数据库&#xff08;IID&#xff09;提供了其制剂研发中的关键参考资源&#xff0c;使得更多的医药研发相关人员及企业单位节省试验环节及时间成…...

git pull 报错 refusing to merge unrelated histories

这个对我来说非常常见&#xff0c;因为我都是先由本地项目&#xff0c;再想着传到github上去。 在本地项目中执行 git init git add . git commit -m “xxx” 在github上创建项目&#xff0c;添加了 README.md 文件。 git remote add origin https://github.com/raoxiaoya/x…...

STM32G431RBT6(蓝桥杯)串口(发送)

一、基础配置 (1) PA9和PA10就是串口对应在单片机上的端口 注意&#xff1a;一定要先选择PA9的TX和PA10的RX&#xff0c;再去打开异步的模式 (2) 二、查看单片机的端口连接至电脑的哪里 &#xff08;1&#xff09;此电脑->右击属性 &#xff08;2&#xff09;找到端…...

使用 typed-rest-client 进行 REST API 调用

typed-rest-client 是一个用于 Node.js 的库&#xff0c;它提供了一种类型安全的方式来与 RESTful API 进行交互。其主要功能包括&#xff1a; 安装 typed-rest-client 要使用 typed-rest-client&#xff0c;首先需要安装它&#xff0c;可以通过 npm 来安装&#xff1a; $ n…...

在Ubuntu 14.04上安装Solr的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Solr 是基于 Apache Lucene 的搜索引擎平台。它用 Java 编写&#xff0c;并使用 Lucene 库来实现索引。可以通过各种 REST API&am…...

LabVIEW提高开发效率技巧----使用LabVIEW工具

LabVIEW为开发者提供了多种工具和功能&#xff0c;不仅提高工作效率&#xff0c;还能确保项目的质量和可维护性。以下详细介绍几种关键工具&#xff0c;并结合实际案例说明它们的应用。 1. VI Analyzer&#xff1a;自动检查代码质量 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电脑&#xff0c;电脑上有N多用户&#xff0c;使用人员登录时选择相应的账号登录即可。但在某次使用脚本加固后&#xff0c;发现之前显示的用户都不能显示了。检查加固脚本&#xff0c;是脚本启用了“交互式登录&#xff1a;不显示上次登录”策略。因此&am…...

01-Mac OS系统如何下载安装Python解释器

目录 Mac安装Python的教程 mac下载并安装python解释器 如何下载和安装最新的python解释器 访问python.org&#xff08;受国内网速的影响&#xff0c;访问速度会比较慢&#xff0c;不过也可以去我博客的资源下载&#xff09; 打开历史发布版本页面 进入下载页 鼠标拖到页面…...

2025届学术党必备的五大AI论文平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对AI写作工具标题的创作&#xff0c;要精准去把握目标客户的核心需求&#xff0c;目标客户…...

5分钟快速上手:使用免费在线EPUB编辑器制作专业电子书

5分钟快速上手&#xff1a;使用免费在线EPUB编辑器制作专业电子书 【免费下载链接】EPubBuilder 一款在线的epub格式书籍编辑器 项目地址: https://gitcode.com/gh_mirrors/ep/EPubBuilder 你是否梦想过出版自己的电子书&#xff0c;却被复杂的EPUB格式和技术门槛吓退&a…...

告别Provider嵌套!用Naive UI的createDiscreteApi一键管理message、dialog、loadingBar

告别Provider嵌套&#xff01;用Naive UI的createDiscreteApi一键管理全局反馈组件 在构建现代Vue 3应用时&#xff0c;全局反馈机制如消息提示(message)、对话框(dialog)、通知(notification)和加载条(loadingBar)是不可或缺的交互元素。传统方案需要在组件树中层层嵌套Provid…...

STM32体重秤电子秤称重超重报警Proteus仿真资源包

STM32体重秤电子秤称重超重报警Proteus仿真资源包 【下载地址】STM32体重秤电子秤称重超重报警Proteus仿真资源包 本资源包提供了基于STM32单片机的体重秤电子秤称重超重报警系统的完整解决方案。资源内容包括源代码、Proteus仿真文件以及全套相关资料&#xff0c;帮助用户快速…...

告别SAP GUI!Notepad++配置ABAP语法高亮,离线查看代码更高效

告别SAP GUI&#xff01;Notepad配置ABAP语法高亮&#xff0c;离线查看代码更高效 对于ABAP开发者而言&#xff0c;代码阅读和分析是日常工作中不可或缺的部分。然而&#xff0c;传统的SAP GUI环境并非总是最便捷的选择——无论是通勤途中、客户现场无系统访问权限&#xff0c;…...

从0开始详解网络安全自学全流程!附对应的视频教程和学习笔记

从0开始详解网络安全自学全流程&#xff01;附对应的视频教程和学习笔记 今天给大家梳理了从0开始详解网络安全自学全流程&#xff01;对应的视频教程和学习笔记也都整理好了&#xff0c;大家去文末自取就行。 第一步&#xff1a;刑法 为什么学&#xff1a;划清合法与违法的红…...

从总线到片上网络:高性能SoC互连架构演进与实战解析

1. 从“堵车”的总线到“高速公路网”&#xff1a;为什么我们需要NoC&#xff1f;记得我刚入行做芯片设计那会儿&#xff0c;一个SoC里塞进去几十个IP模块&#xff0c;大家共用一条总线&#xff0c;感觉已经挺“先进”了。那时候的芯片&#xff0c;就像一个小镇&#xff0c;只有…...

ESP32 Arduino核心开发终极指南:构建专业级物联网控制系统

ESP32 Arduino核心开发终极指南&#xff1a;构建专业级物联网控制系统 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 还在为物联网项目开发中的硬件兼容性、开发环境复杂…...

扛住十万并发的“冷面保安”:一文扒透限流的四大经典算法与代码实战

在高并发架构中&#xff0c;如果说缓存和 MQ 是替服务器扛伤害的“防弹衣”&#xff0c;那么限流&#xff08;Rate Limiting&#xff09;就是守在系统大门外的“冷面保安”。他的核心逻辑极其冷酷&#xff1a;不管外面排队的人有多急&#xff0c;只要超过了系统的最大接待能力&…...

ImageToSTL:将二维图片转化为可打印三维模型的艺术

ImageToSTL&#xff1a;将二维图片转化为可打印三维模型的艺术 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项…...