GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记
文章目录
- 概览:游戏引擎中的渲染系统
- 四个课时概览
- 一,渲染管线流程
- 二,了解GPU
- SIMD 和 SIMT
- GPU 架构
- CPU到GPU的数据传输
- GPU性能限制
- 三,可见性
- Renderable可渲染对象
- 提高渲染效率
- Visibility Culling 可见性裁剪
- 四,纹理压缩(Texture Compression)
- 五,Cluster-Based Mesh Pipeline
- 总结
概览:游戏引擎中的渲染系统
-
游戏渲染面临的挑战
- 渲染量大、算法复杂、all in one
- 对于不同硬件显卡的适配和优化
- 实时性(60fps、120fps)和分辨率(1080p、4K、8K)要求
- CPU带宽和内存限制(游戏逻辑、网络、动画物理等都是CPU处理的)
-
这块是一个实践性、工程性知识(与纯理论相对),因此技术更新换代非常快
四个课时概览

一,渲染管线流程
流程参照101和图形基础
二,了解GPU
SIMD 和 SIMT
- 单指令多数据SIMD(Single Instruction Multiple Data)运算,对多个数据同时进行同一种运算(指令级并行),一般用于矩阵计算
- 单指令多线程SIMT(Single Instruction Multiple Threads)运算,多线程处理运算(相当于GPU多线程版SIMD),GPU的线程数是比CPU多得多,因此处理简单计算快
GPU 架构
- GPU上的运算是分到一个个的流式多核处理器SM(Streaming Multiprocessor)里计算的,SM用于运行CUDA(并行处理器)。计算时不仅可以并行,相互间还可以交换数据(硬件加速),这是现代GPU最重要的架构
- 最先进的引擎一直在更新,比如逐渐能够使用compute shader、mesh shader等等;以及一些优化比如Tile-Based,这些都跟硬件架构息息相关,如果能先了解下显卡硬件的工作原理,有助于学习这些后续知识~(艺术家也一样)

CPU到GPU的数据传输
- 现代引擎中一般绘制和逻辑是不同步的,但如果某帧绘制需要逻辑运算的数据时,就可能出现不同步的延迟。并且CPU与GPU之间的数据传输非常慢,因此默认原则:尽可能用CPU->GPU的单向传输,而不从GPU读取数据。
- 缓存(Cache)效率在GPU中非常重要,如果计算时要加载数据不在缓存里,就会出现Cache miss(读取到时Cache miss)情况,这时候如果想去内存读取,甚至会花费一百多个时间周期,处理效率大大降低
GPU性能限制
- 内存瓶颈Memory Bounds
- 算术逻辑单元ALU Bounds
- 纹理贴图单元TMU(Texture Mapping Unit) Bound
- 带宽瓶颈BW(Bandwidth) Bound
三,可见性
Renderable可渲染对象
- Mesh:储存每个点的位置、法线、uv、权重等和三角形的点索引
- Materials:经典模型Phong Model、PBR Model等
- Texture:有时候比材质还要重要
- Shaders:shader在引擎中不算是源码,而是“数据”;shader graph连连看
- SubMesh:Mesh根据材质不同分为不同子网格,即SubMesh
提高渲染效率
- 多个模型的多个submesh重复了怎么提高效率呢?
- 可以建立一个资源池(Resource Pool),将同一种资源储存到统一的资源池中,并建立缓存;
- Instance(实例化)相当于先定义一个物体的Renderable,然后再将该数据实例化并渲染
- 游戏中相同材质的submesh,也可以把场景物体按照材质排序,把相同材质的物体group到一起,然后只需设置一次材质(减少GPU等待数据);再进一步GPU Barch Rendering可以在一次drawcall里一次性设置并渲染大量同材质物体
Visibility Culling 可见性裁剪
- 基础原理是通过包围盒判断,优化用BVH Culling之类的算法(尤其是动态东西很多的时候)或者PVS思想。
- PVS(Potential Visibility Set):先用BSP-tree将空间进行划分,每个小格子之间用Portal(传送门)连接,绘制时只绘制当前各自及其能看到的其他格子的内容即可(用于动态载入场景),并且每个格子的可见性是预设好的
- 随着硬件升级,更多使用的是GPU Culling,用GPU快速计算出每个物体的包围盒是否可见,搭配preZ等技术

四,纹理压缩(Texture Compression)
常见的图片格式如JPG、PNG等都是一种压缩格式,它们压缩率高,但是无法实现随机访问,且算法复杂。而在引擎中的纹理需要有高效压缩和解压、随机访问、压缩率高质量好的特性,因此一般采用块压缩(Block Compression)的技术,比如bxt格式是把图片分为4X4的小格子,并且只记录像素最大最小值和各个像素在这两个值之间的插值。「相当于用64位表示原本需要384位(24*16)的16个像素:32位用565格式记录2个颜色,32位记录每个像素的索引,除两个像素颜色外只支持2种插值,共4种,用10的组合作为索引记录,其他颜色丢失」
- 在PC上常用BC7(最新)和DXTC格式,手机上常用ASTC(最新)和ETC/PVRTC格式

五,Cluster-Based Mesh Pipeline
随着发展玩家在一个场景里对模型精度、细节要求越来越高,带来的GPU渲染负荷也增大,因此引擎侧逐渐向Cluster-Based Mesh Pipeline方向发展。
- 管线核心思想:将非常精细的模型分为一个个的小Cluster,比如64个三角形分一个,然后以Cluster为单位进行渲染,剔除和深度排序也是基于Cluster bound而不是整个物体。(natine就是该思想拓展细分到像素级别)(想想曲面细分不就是一个三角形分成更多个然后统一渲染吗)这也对程序员提出了更高的要求。
总结
- 游戏引擎的设计与硬件架构密不可分,要做好一个图形程序,就得了解显卡架构
- 游戏引擎的一个核心问题是Mesh、Materials等数据之间的关系,submesh就是一个很好的解决方法
- 大师:do nothing—用Culling算法使得引擎绘制尽可能少的东西,CPU、GPU做的事越少越好
- GPU代替CPU计算–GPU Driven
相关文章:
GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记
文章目录 概览:游戏引擎中的渲染系统四个课时概览 一,渲染管线流程二,了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三,可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四,纹理压…...
Visual Studio 中的键盘快捷方式
1. Visual Studio 中的键盘快捷方式 1.1. 可打印快捷方式备忘单 1.2. Visual Studio 的常用键盘快捷方式 本部分中的所有快捷方式都将全局应用(除非另有指定)。 “全局”上下文表示该快捷方式适用于 Visual Studio 中的任何工具窗口。 生成࿱…...
K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法
当K8S中的某个容器突然出现内存和CPU占用过高的情况时,可以采取以下步骤进行处理: 观察和分析: 使用kubectl top pods命令查看集群中各个Pod的CPU和内存占用情况,找出占用资源高的Pod。使用kubectl describe pod <pod-name>…...
Pointnet++改进即插即用系列:全网首发GLSA聚合和表示全局和局部空间特征|即插即用,提升特征提取模块性能
简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入GLSA,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.理论介…...
如何选择适合自己的虚拟化技术?
虚拟化技术已成为现代数据中心和云计算环境的核心组成部分。本文将帮助您了解如何选择适合自己需求的虚拟化技术,以实现更高的效率、资源利用率和灵活性。 理解虚拟化技术 首先,让我们了解虚拟化技术的基本概念。虚拟化允许将一个物理服务器划分为多个虚…...
Spring动态代理详解
一,动态代理 我发现Spring框架中的动态代理是一种非常强大的机制,它可以在运行时为接口或类创建动态代理,然后通过这些代理在方法调用前后添加额外的行为。在后续Spring的AOP(面向切面编程)支持中扮演了关键角色。 二…...
Java微服务架构中的消息总线设计
Java微服务架构中的消息总线设计 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java微服务架构中的消息总线设计。 一、什么是消息总线&…...
51单片机项目-点亮第一个LED灯(涉及:进制转换表、创建项目、生成HEX文件、下载程序到单片机、二极管区分正负极)
目录 新建项目选择型号添加新文件到该项目设置字体和utf-8编码二极管如何区分正负极原理:CPU通过寄存器来控制硬件电路 用P2寄存器的值控制第一个灯亮进制转换编译查看P2寄存器的地址生成HEX文件把代码下载到单片机中下载程序到单片机 新建项目 选择型号 stc是中国…...
安全管理中心测评项
安全管理中心 系统管理 应对系统管理员进行身份鉴别,只允许其通过特定的命令或操作界面进行系统管理操作,并对这些操作进行审计; 应通过系统管理员对系统的资源和运行进行配置、控制和管理,包括用户身份、系统资源配置、系统加…...
word 转pdf 中图片不被压缩的方法
word 转pdf 中图片不被压缩的方法 法1: 调节word 选项中的图片格式为不压缩、高保真 法2: 1: word 中的图片尽可能使用高的分辨率,图片存为pnd或者 tif 格式(最高清) 2: 转化为pdf使用打印机器,参数如下…...
Springboot+Vue3开发学习笔记《1》
SpringbootVue3开发学习笔记《1》 博主正在学习SpringbootVue3开发,希望记录自己学习过程同时与广大网友共同学习讨论。 一、前置条件 博主所用版本: IDEA需要破解,破解工具链接容易挂,关注私聊我单发。 Spring Boot是Spring提…...
grpc编译
1、cmake下载 Download CMakehttps://cmake.org/download/cmake老版本下载 Index of /fileshttps://cmake.org/files/2、gprc源码下载,发现CMAKE报错 3、使用git下载 1)通过git打开一个目录:如下grpc将放在D盘src目录下 cd d: cd src2&am…...
echarts-wordcloud:打造个性化词云库
前言 在当今信息爆炸的时代,如何从海量的文本数据中提取有用的信息成为了一项重要的任务。词云作为一种直观、易于理解的数据可视化方式,被广泛应用于文本分析和可视化领域。本文将介绍一种基于 echarts-wordcloud 实现的词云库,通过其丰富的…...
VMware虚拟机安装CentOS7.9 Oracle 11.2.0.4 RAC+单节点RAC ADG
目录 一、参考资料 二、RAC环境配置清单 1.主机环境 2.共享存储 3.IP地址 4.虚拟机 三、系统参数配置 1. 配置网卡 1.1 配置NAT网卡 1.2 配置HostOnly网卡 2. 修改主机名 3. 配置/etc/hosts 4. 关闭防火墙 5. 关闭Selinux 6. 配置内核参数 7. 配置grid、oracle…...
iOS 视图实现渐变色背景
需求 目的是要实现视图的自定义的渐变背景色,实现一个能够随时使用的工具。 实现讨论 在 iOS 中,如果设置视图单一的背景色,是很简单的。可是,如果要设置渐变的背景色,该怎么实现呢?其实也没有很是麻烦&…...
hive命令和参数
一.命令行模式 hive命令行 hive -H 查询hive的可用参数 hive -e "" 在hive命令中直接执行简单的sql语句 在hive命令中执行sql文件 hive -f 文件地址 在hive命令中新建hive变量 hive --hivevar mykey"myvalue" beeline命令行 先得启动hiveserver…...
『MySQL 实战 45 讲』22 - MySQL 有哪些“饮鸩止渴”提高性能的方法?
MySQL 有哪些“饮鸩止渴”提高性能的方法? 需求:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内、临时性地提升一些性能 短连接风暴 短连接模式:执行很少的 SQL 语句就断开,…...
创建kset
1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…...
实战:基于Java的大数据处理与分析平台
实战:基于Java的大数据处理与分析平台 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何利用Java构建高效的大数据处理与分析平台。…...
构建安全稳定的应用:Spring Security 实用指南
前言 在现代 Web 应用程序中,安全性是至关重要的一个方面。Spring Security 作为一个功能强大且广泛使用的安全框架,为 Java 应用程序提供了全面的安全解决方案。本文将深入介绍 Spring Security 的基本概念、核心功能以及如何在应用程序中使用它来实现…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
