游戏引擎架构#4 低阶渲染器(1)
背景:
作为游戏开发从业者,从业务到语言到框架到引擎,积累了一些知识和经验,特别是在看了几遍《游戏引擎架构》后对引擎架构的理解又深入了些。
近段时间有对引擎剖析的想法,正好借这书本对游戏引擎架构做一个完整分析。
此书用简明、清楚的方式覆盖了游戏引擎架构的庞大领域,巧妙地平衡了广度与深度,并且提供了足够的细节。
我将借助《游戏引擎架构》这本书、结合引擎源码和自己的经验,深入分析游戏引擎的历史、架构、模块,最后通过实践简单引擎开发来完成对引擎知识的掌握。
游戏引擎知识面深而广,所以对这系列的文章书编写范围做个保护,即不对细节进行过多的阐述,重点剖析的是架构、流程以及模块的运作原理。
同时《游戏引擎架构》中部分知识太过陈旧的部分,会重新深挖后总结出自己的观点。
概述:
本系列文章对引擎中的重要的模块和库进行详细的分析,我挑选了十五个库和模块来分析:
- 时间库
- 自定义容器库
- 字符串散列库
- 内存管理框架
- RTTI与反射模块
- 图形计算库
- 资产管理模块
- 低阶渲染器
- 剔除与合批模块
- 动画模块
- 物理模块
- UI底层框架
- 性能剖析器的核心部分
- 脚本系统
- 视觉效果模块
本篇内容为列表中的第8个部分。
正文:
简单回顾下前文
前文简单提了下C++编译过程、C++内存布局、文件内核读取原理、图形计算的常用库内容,以及大篇幅的引擎资产管理。
引擎资产管理简单回顾下:
首先,资产分为DCC资产、中间格式资产、引擎资产,这三者是从制作到导入到使用的顺序。
其次,引擎资产分为元数据和引擎资产文件,引擎不仅需要资产也需要资产的配置数据。
接着,引擎内存中的资产有资源映射关系,资产路径、资产GUID、资产实例、资产实例ID。
最后,引擎通常都有资源包,资源包的格式通常都差不多,头信息(包括索引信息和数据概要信息)+数据文件,压缩可以是整体压缩也可以是每个独立数据单独压缩,通过解剖资源包的数据格式,我们可以知道如何去做差量更新。
这里补充一点,引擎在读取资产时,与读取资产配置的原理是一样的,它可以有自己的数据格式也可以用标准格式,引擎通常使用自定义格式。通过区分读取不同类型的资产数据来实例化引擎内不同的资源对象,包括网格、材质、动画、粒子、节点、组件配置等。
下面我们开始这篇内容
本次内容会围绕GPU来写,从硬件架构到软件驱动再到引擎架构,目标是帮大家理解GPU硬件的运作原理,理解图形接口的架构,理解引擎低阶渲染器的架构。
目录:
- 主板结构中的显卡
- GPU功能发展史
- GPU与CPU的差异
- GPU硬件特点
- 图形驱动程序架构
- 引擎低阶渲染架构
主板结构中的显卡
我们讨论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
版权申明
本文为博主原创文章,未经允许不得转载:
Copyright attention
Please don't reprint without authorize.
微信公众号,文章同步推送,致力于分享一个资深程序员在北上广深拼搏中对世界的理解
QQ交流群: 777859752 (高级程序书友会)