游戏引擎架构#4 低阶渲染器(1)

已发布在微信公众号上,点击跳转

背景:

作为游戏开发从业者,从业务到语言到框架到引擎,积累了一些知识和经验,特别是在看了几遍《游戏引擎架构》后对引擎架构的理解又深入了些。

近段时间有对引擎剖析的想法,正好借这书本对游戏引擎架构做一个完整分析。

此书用简明、清楚的方式覆盖了游戏引擎架构的庞大领域,巧妙地平衡了广度与深度,并且提供了足够的细节。

我将借助《游戏引擎架构》这本书、结合引擎源码和自己的经验,深入分析游戏引擎的历史、架构、模块,最后通过实践简单引擎开发来完成对引擎知识的掌握。

游戏引擎知识面深而广,所以对这系列的文章书编写范围做个保护,即不对细节进行过多的阐述,重点剖析的是架构、流程以及模块的运作原理。

同时《游戏引擎架构》中部分知识太过陈旧的部分,会重新深挖后总结出自己的观点。

概述:

本系列文章对引擎中的重要的模块和库进行详细的分析,我挑选了十五个库和模块来分析:

  1. 时间库
  2. 自定义容器库
  3. 字符串散列库
  4. 内存管理框架
  5. RTTI与反射模块
  6. 图形计算库
  7. 资产管理模块
  8. 低阶渲染器
  9. 剔除与合批模块
  10. 动画模块
  11. 物理模块
  12. UI底层框架
  13. 性能剖析器的核心部分
  14. 脚本系统
  15. 视觉效果模块

本篇内容为列表中的第8个部分。

正文:

简单回顾下前文

前文简单提了下C++编译过程、C++内存布局、文件内核读取原理、图形计算的常用库内容,以及大篇幅的引擎资产管理。

引擎资产管理简单回顾下:

首先,资产分为DCC资产、中间格式资产、引擎资产,这三者是从制作到导入到使用的顺序。

其次,引擎资产分为元数据和引擎资产文件,引擎不仅需要资产也需要资产的配置数据。

接着,引擎内存中的资产有资源映射关系,资产路径、资产GUID、资产实例、资产实例ID。

最后,引擎通常都有资源包,资源包的格式通常都差不多,头信息(包括索引信息和数据概要信息)+数据文件,压缩可以是整体压缩也可以是每个独立数据单独压缩,通过解剖资源包的数据格式,我们可以知道如何去做差量更新。

这里补充一点,引擎在读取资产时,与读取资产配置的原理是一样的,它可以有自己的数据格式也可以用标准格式,引擎通常使用自定义格式。通过区分读取不同类型的资产数据来实例化引擎内不同的资源对象,包括网格、材质、动画、粒子、节点、组件配置等。

下面我们开始这篇内容

本次内容会围绕GPU来写,从硬件架构到软件驱动再到引擎架构,目标是帮大家理解GPU硬件的运作原理,理解图形接口的架构,理解引擎低阶渲染器的架构。

目录:

  1. 主板结构中的显卡
  2. GPU功能发展史
  3. GPU与CPU的差异
  4. GPU硬件特点
  5. 图形驱动程序架构
  6. 引擎低阶渲染架构

主板结构中的显卡

我们讨论GPU和显卡时经常混为一谈,严格来说GPU是显卡(Video card、Display card、Graphics card)最核心的部件。 显卡除了GPU,还有扇热器、通讯元件、与主板和显示器连接的各类插槽。

图1

(主板结构图)

早期计算机设备中的CPU都是由系统总线来与所有其他设备通信,当图形芯片需要跟CPU和内存大量交换数据时就出现了巨大瓶颈,于是人们设计了高速的北桥芯片和低速的南桥芯片,一来协调CPU、内存、图形设备之间的高速通信,二来专门处理磁盘、USB、键盘鼠标等低速设备。

从上图中我们看到,离CPU越近,存取数据越快,最近的就是CPU内的组件了,其次是高速缓存总线,再是本地总线,接着是内存总线,最后是高速总线。 我们的GPU被安排在高速总线上,而且总线还有其他设备需要兼顾。因此从通信速度上来说,高速总线并不是那么快,这也是CPU与GPU的通信带宽通常成为瓶颈的其中一个原因。

图1

(现实中主板结构图:图片来自网络)

这里重点介绍下北桥芯片,一个主板上最重要的部分可以说就是主板的芯片组了,主板的芯片组一般由北桥芯片和南桥芯片组成,两者共同组成主板的芯片组。北桥芯片主要负责实现与CPU、内存、AGP接口之间的数据传输,同时还通过特定的数据通道和南桥芯片相连接。南桥芯片主要负责和IDE设备、PCI设备、声音设备、网络设备以及其他的I/O设备的通信。

主板和CPU发展都现在,北桥芯片慢慢开始消失被集成了CPU中。往后发展,主板芯片组可以看成是以往南桥芯片组的加强版,CPU与主板芯片采用DMI总线进行通信。

虽然从Lynnfield Core i5/i7开始把北桥集成到CPU上,但是其内部仍是采用QPI总线来通讯,而外部与主板芯片组通讯,其实就是以往主板上南桥与北桥通讯,采用的是DMI总线。因此不能说Lynnfield Core i5/i7是精简了,只是集成度更高而已。

手机主板结构与PC不同

以下图片均来源网络

图1

图2

图3

图4

手机的主板布局则不同,由于主板不能横向扩展,所以采用双或三层叠层的主板,GPU内嵌在处理器上与CPU同框,且它们周围布满了内存,这样通信更快。 同时由于空间小,功率和高速缓存大小也受到限制。

多层主板虽然看上去设计巧妙,同时也将几个发热大户都贴在了一起,发热量和速度加倍。

现代CPU都有一种过热自动降频或者关闭核心的保护措施,因此当玩王者或吃鸡等大型游戏时,就会因为发热而导致它更快的达到阈值温度而降频,这也是很多游戏优化后仍然会卡顿的主要原因。

因此很多手机引入了水冷(热导管技术)CPU散热技术,用超大一块热导管来散热降温,让CPU不会因为过热而降频或锁核,从而能更长时间甚至全时运行在最大工作频率上,从而发挥出手机宣传时100%的性能。

已发布在微信公众号上,点击跳转

参考资料:

《主板北桥百科》

https://baike.baidu.com/item/%E4%B8%BB%E6%9D%BF%E5%8C%97%E6%A1%A5/10252486?fr=aladdin

《总线百科》

https://baike.baidu.com/item/%E6%80%BB%E7%BA%BF/108823

《iPhone 11/Pro Max内部结构示意图》

http://www.itqianyan.com/m/view.php?aid=5479

《拆解 iPhone 12 系列》

https://www.igao7.com/news/202010/L2RP34HNtTEZ2yYC.html

《iPhone 8和X拆解》

https://m.iphonediule.com/hot/qiangxian.html

· 读书笔记, 前端技术, 图解游戏引擎

感谢您的耐心阅读

Thanks for your reading

  • 版权申明

    本文为博主原创文章,未经允许不得转载:

    游戏引擎架构#4 低阶渲染器(1)

    Copyright attention

    Please don't reprint without authorize.

  • 微信公众号,文章同步推送,致力于分享一个资深程序员在北上广深拼搏中对世界的理解

    QQ交流群: 777859752 (高级程序书友会)