GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记

devtools/2024/9/23 14:31:32/

文章目录

  • 概览:游戏引擎>游戏引擎中的渲染系统
    • 四个课时概览
  • 一,渲染管线流程
  • 二,了解GPU
    • SIMD 和 SIMT
    • GPU 架构
    • CPU到GPU的数据传输
    • GPU性能限制
  • 三,可见性
    • Renderable可渲染对象
    • 提高渲染效率
    • Visibility Culling 可见性裁剪
  • 四,纹理压缩(Texture Compression)
  • 五,Cluster-Based Mesh Pipeline
  • 总结


概览:游戏引擎>游戏引擎中的渲染系统

  • 游戏渲染面临的挑战

    1. 渲染量大、算法复杂、all in one
    2. 对于不同硬件显卡的适配和优化
    3. 实时性(60fps、120fps)和分辨率(1080p、4K、8K)要求
    4. 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性能限制

  1. 内存瓶颈Memory Bounds
  2. 算术逻辑单元ALU Bounds
  3. 纹理贴图单元TMU(Texture Mapping Unit) Bound
  4. 带宽瓶颈BW(Bandwidth) Bound

三,可见性

Renderable可渲染对象

  • Mesh:储存每个点的位置、法线、uv、权重等和三角形的点索引
  • Materials:经典模型Phong Model、PBR Model等
  • Texture:有时候比材质还要重要
  • Shaders:shader在引擎中不算是源码,而是“数据”;shader graph连连看
  • SubMesh:Mesh根据材质不同分为不同子网格,即SubMesh

提高渲染效率

  • 多个模型的多个submesh重复了怎么提高效率呢?
    1. 可以建立一个资源池(Resource Pool),将同一种资源储存到统一的资源池中,并建立缓存;
    2. Instance(实例化)相当于先定义一个物体的Renderable,然后再将该数据实例化并渲染
    3. 游戏中相同材质的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

http://www.ppmy.cn/devtools/57171.html

相关文章

数据库测试数据准备厂商 Snaplet 宣布停止运营

上周刚获知「数据库调优厂商 OtterTune 宣布停止运营」。而今天下班前,同事又突然刷到另一家海外数据库工具商 Snaplet 也停止运营了。Snaplet 主要帮助开发团队在数据库中生成仿真度高且合规的测试数据。我们在年初还撰文介绍过它「告别手搓!Postgres 一…

linux的安全技术和防火墙

一、安全技术 1.入侵检测系统:特点式不阻断网络访问,主要式提供报警和事后监督,不主动介入,默默的看着你(相当于360安全卫士) 2.入侵防御系统:透明模式工作,对数据包,网…

phpexcel导入导出

前言&#xff1a; 如果你到处的excel软件打开有问题&#xff0c;下面有介绍解决办法 导入 1. composer init 初始化 2. 下载phpspreadsheet 这里需要注意php版本&#xff0c;需要大于7.2 composer require phpoffice/phpspreadsheet3. 编写代码 <?php require vendo…

Matlab|分时电价环境下用户负荷需求响应分析方法

主要内容 本程序复现《分时电价环境下用户负荷需求响应分析方法》文献中的方法&#xff0c;通过用户对不同时间下用电需求的自弹性和交叉弹性系数分析获得用户需求响应矩阵&#xff0c;进而利用该矩阵对用户在实行基于电价的需求侧管理后的负荷变化情况进行快速分析。 1.1…

mysql8.0-学习

文章目录 mysql8.0基础知识-学习安装mysql_8.0登录mysql8.0的体系结构与管理体系结构图连接mysqlmysql8.0的 “新姿势” mysql的日常管理用户安全权限练习查看用户的权限回收:revoke角色 mysql的多种连接方式socket显示系统中当前运行的所有线程 tcp/ip客户端工具基于SSL的安全…

itext生成pdf文件demo示例

需求 在PDF文件中植入一些信息&#xff08;pdf模版&#xff09; 制作模版 可以看到下面红色箭头标注位置&#xff0c;这都是我们需要动态写入数据的表单域&#xff0c;可以使用wps等工具来制作 点击编辑表单&#xff0c;可以给对应空间添加表单域&#xff0c;表单域名称是ke…

LLM端侧部署系列 | 手机上运行47B大模型?上交推理框架PowerInfer-2助力AI手机端侧部署

0. 引言 黄梅时节家家雨&#xff0c;青草池塘处处蛙。 有约不来过夜半&#xff0c;闲敲棋子落灯花。 当下&#xff0c;在移动设备上部署大型模型的趋势是愈演愈烈。Google推出了AI Core&#xff0c;使得Gemini Nano可以在智能手机上部署。此外&#xff0c;近期传闻苹果在iOS …

Chirp信号生成(FPGA、基于cordic IP核)

一、Chirp生成模块介绍 采用Verilog 生成Chirp&#xff0c;实现输入使能电平&#xff0c;模块输出Chirp信号&#xff0c;Chirp信号频率范围&#xff0c;时间宽度&#xff0c;连续Chirp信号数量可配置。 二、模块例化方法示例 parameter FL d20_000 ; parameter FH…