读书笔记(四十七) 《游戏引擎架构》#4 低阶渲染器(2)

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

背景:

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

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

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

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

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

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

概述:

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

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

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

正文:

简单回顾下前文

前文我们聊了下显卡在计算机硬件主板中的位置与结构,知道了CPU、GPU的通信介质,并简单介绍了手机上的主板结构。本篇开头对上一篇做一些内容补充,PC和手机的不同硬件组织,以及CPU与其他芯片的通信过程。

下面我们开始这篇内容

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

目录:

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

继续上篇未结束的内容

说硬件结构时,我们常常从台式 PC 开始说起,因为智能手机本质上是袖珍型计算机,具有一些额外的无线电,并且在功耗、热量输出等方面极其受限的条件下运行。PC 主要由主板芯片组组成(通常分为连接处理器和内存“北桥”(例如 Intel 的 P45)和连接各种外围总线(例如 PCI-Express、USB 等)的“南桥”(例如 Intel 的 ICH10R) )、中央处理器(例如 CPU – Intel 的 Core 2 Duo)、随机存储器内存 (RAM)、永久存储器(硬盘或固态硬盘)、图形处理单元(例如 GPU – ATI 的 Radeon HD5890) 、电源和多个连接到 PCI 或 PCI-Express 总线的外围设备(例如,内置声音芯片组或附加 Wi-Fi 卡)。

(三星手机拓扑图:图片来源网络)

(iPhone6p A8 正面图:图片来源网络)

(iPhone6p A8 背面图:图片来源网络)

(苹果A8芯片内部结构:图片来源网络)

智能手机也具有所有这些组件,只是集成度更高而已。一些主要芯片通常可以包含 CPU、GPU、其他专用协处理器、主板总线、内存控制器、LCD 控制器、声音芯片组、CMOS 摄像头接口、板载内存 ,以及一些外围设备(例如 Cell、Wifi 和蓝牙无线电)。 “应用处理器”是负责一般处理的芯片(类似于 CPU + 主板芯片组),并且可能内置了一些其他功能。 “基带处理器”负责蜂窝无线通信。

智能手机与 PC 如此相似,那么为什么我们今天在智能手机中看不到像 Core 2 Duo 这样的 x86 CPU?答案是,Core 2 Duo 消耗的功率和产生的热量远远超出手机的可接受范围。典型的台式机 Core 2 Duo CPU 的功耗最高可达 65W,并且需要一个主动冷却系统来防止过热。即使是英特尔的 Atom 芯片也消耗 4W(峰值 TDP),而整个手机通常必须满足低于 1W 的功率。

今天我们很多智能手机都使用 ARM 芯片, ARM 的运作方式与Intel截然不同。 Intel 自己设计和构建所有处理器,而 ARM 则创建指令集,任何跟随它们的 CPU 都将能够运行与 ARM 兼容的代码。 它还为适合其指令集的处理器创建参考设计,这使公司能够围绕 ARM 的核心设计轻松生产自己的芯片组。 一些公司,如英伟达、三星和德州仪器,只是简单地许可并采用 ARM CPU 参考设计,而其他公司,如高通和 Marvell,只许可指令集并创建自己的处理器以适应它们。 第一个 ARMv7 参考设计是 Cortex A8,其架构可在今天的智能手机中找到。很久以前低端智能手机倾向于使用实现 ARMv6 指令集的 ARM11 芯片,现在已经不复存在。

这里再补充一下前文的硬件通信过程,每个带有处理程序的硬件都有自己的芯片,CPU是整个电脑的主要计算芯片,GPU则被单独拆分出来作为图像的处理芯片,除了这两个大家熟知的芯片,还有内存芯片,硬盘芯片,声卡芯片,网卡芯片等,这些芯片都通过总线进行数据交互。其中前面我们提到南桥和北桥芯片桥接了快慢不同的芯片之间的通信,让不同种类的设备通信效率更高更有序。

(PC端CPU与GPU通信结构图)

(手机端CPU与GPU通信结构图)

CPU与其他芯片之间的通信步骤,可以简单理解为,CPU通过总线发送指令数据到其他芯片,芯片收到指令并处理后,再通过总线将反馈数据给CPU,中间处理过程也会与内存芯片或其他芯片通信后再反馈给CPU。

(CPU用虚拟地址访问内存拓扑图)

CPU 在访问内存时需要通过 MMU 把虚拟地址转化为物理地址,再通过总线访问内存。MMU 开启后 CPU 看到的所有地址都是虚拟地址,CPU 把这个虚拟地址发给 MMU 后,MMU 会在页表里查出这个虚拟地址对应的物理地址,再通过总线去访问DDR内存芯片。

从这个芯片通信角度看,我们可以明白,总线传输数据的速度,限制了计算机的运行速度。因此我们在优化计算机程序时会常常去减少CPU与GPU之间通信量,原因就是在无法增加带宽上限这个大前提下,尽量减少它们之间通信数据量,从而减少访问消耗时间。

GPU功能发展史

第一篇中我们介绍过一些图形接口的发展历史,现在我们来介绍一下GPU硬件的发展历史。硬件的发展史其实是一个商业的竞争过程,中间夹杂着很多商业战略与决策。尤其是当大家都看到GPU这块高新的技术’蛋糕’,有一系列公司参与进来相互竞争。因此这里不过多的介绍商业上的活动与竞争,而是专注于介绍GPU功能的发展过程。

第一个真正的3D图形卡始于早期的显示控制器,即视频移位器和视频地址生成器(video shifters and video address generators)。它们充当主处理器和显示器之间的直通通道(pass-through)。传入的数据流被转换为串行位图视频输出,例如亮度,颜色以及垂直和水平复合同步,这将像素行保持在显示生成中,并同步每条连续行以及消隐间隔(时间间隔为 结束一条扫描线并开始下一条扫描线)。

(图片来源网络)

1970年代开始这些视频适配器出现了一系列的改进,主要兼容了不同分辨率以及不同的视频信号。

1976年,ANTIC使用直接存储器访问(DMA)处理2D显示指令。

1978年,英特尔82720图形卡芯片,它能够以256x256的分辨率(或以512x512的单色)显示八种颜色数据。其32KB的显示内存足以绘制线,弧,圆,矩形和字符位图。该芯片还提供了缩放,屏幕分区和滚动的功能。

1979年,SGI推出了用于工作站的IRIS图形卡-GR1.x图形卡板,其中提供了用于颜色选项,几何图形卡,Z缓冲区和覆盖/底层的单独的外接(子)板。

从第一块图形卡发明到现在,整个过程可以分为,视频适配器时代,2D时代、3D时代启程、3D时代崛起、3D时代巅峰,这4个部分。

为此我画了一副时序图并标出了重要节点,便于大家理解显卡的发展史,同时以文字形式告知大家图形显卡的发展历史。

(显卡发展史)

2D时代

1981年, IBM推出了个人电脑时,它提供了两种显卡,一种是“单色显卡”(简称 MDA), 一种是 “彩色绘图卡” (简称 CGA), 从名字上就可以看出,MDA是与单色显示器配合运用的, 它可以显示80行x25列的文数字, CGA则可以用在RGB的显示屏上, 它可以绘制的图形和文数字资料。

1982年,IBM又推出了MGA(Monochrome Graphic Adapter), 又称Hercules Card (大力士卡), 除了能显示图形外,还保留了原来 MDA 的功能。

这些显卡均为采纳使用数字方式的,直到MCGA(Multi-Color Graphics Array)的出现,才揭开了采纳使用模拟方式的显卡的序幕。MCGA是整合在 PS/2 Model 25和30上的影像系统。它采纳使用了Analog RGA影像信号, 解析度可高达640x480, 数位RGB和类比RGB不同的的方就像是ON-OFF式切换和微调式切换之间的差别。

1986年ATI推出了第一款产品,即OEM颜色仿真卡。它用于通过9针DE-9连接器将黑色背景的单色绿色,琥珀色或白色磷光体文本输出到TTL监视器,该卡至少配备了16KB的内存。

1987年,ATI在其OEM产品线中增加了Graphics Solution Plus系列,该产品线将IBM PC / XT ISA 8位总线用于基于Intel 8086/8088的IBM PC。该芯片通过DIP开关支持MDA,CGA和EGA图形卡模式。ATI EGA 800:16色VGA仿真,支持800x600。

VGA(Video Graphic Array)即显示绘图阵列,它IBM是在其 PS/2 的Model 50, 60和80内建的影像系统。它的数字模式可以达到720x400色, 绘图模式则可以达到640x480x16色, 以及320x200x256色,这是显卡首次可以相应情况下最大限度显示256种色彩,而这些模式更成为其后所有显卡的共同标准。

1988年,带有游戏控制器端口和复合输出选项的Small Wonder Graphics解决方案问世(用于CGA和MDA仿真),以及具有扩展EGA和16位VGA支持的EGA Wonder 480和800+,以及VGA 新增了VGA和SVGA支持的Wonder和Wonder 16。

1988年,Trident 8900/9000显卡,它第一次使显卡成为一个独立的配件出现在电脑里,而不再是集成的一块芯片。而后其推出的Trident 9685更是第一代3D显卡的代表。不过真正称得上开启3D显卡大门的却应该是1996年的GLINT 300SX,虽然当时其3D功能非常简单,却具有里程碑的意义。

1989年推出了更新的VGA Wonder / Wonder 16系列,其中包括降低成本的VGA Edge 16(Wonder 1024系列)。新功能包括一个总线鼠标端口,并支持VESA功能连接器。这是一个金手指连接器,类似于缩短的数据总线插槽连接器,它通过带状电缆链接到另一个视频控制器,以绕过拥挤的数据总线。

1991年,Wonder系列的更新继续向前发展。WonderXL卡增加了VESA 32K颜色兼容性和Sierra RAMDAC,从而将最大显示分辨率提高到640x480 @ 72Hz 或 800x600 @ 60Hz。

1991年5月,ATI的Mach系列与Mach8一同推出。它以芯片或电路板的形式出售,可以通过编程接口(AI)卸载有限的2D绘图操作,例如线条画,颜色填充和位图组合(Bit BLIT).ATI添加了Wonder的一种变体 XL在扩展PCB上集成了Creative Sound Blaster 1.5芯片。它被称为VGA Stereo-F / X,它能够模拟Sound Blaster单声道文件中的立体声,并且其质量接近FM广播质量。ATI图形卡Ultra ISA(Mach8 + VGA),将Mach8与VGA Wonder +的图形卡核心(28800-2)结合在一起以实现其3D功能。

1992年1月,Silicon Graphics Inc(SGI)发布了OpenGL 1.0,这是一个针对2D和3D图形卡的多平台供应商不可知的应用程序编程接口(API)。OpenGL是从SGI专有的API(称为IRIS GL(集成的栅格成像系统图形卡库))演变而来的。最初,OpenGL瞄准的是基于UNIX的专业市场,但是由于开发人员对扩展实施的友好支持,很快将其用于3D游戏。同时微软正在开发自己的竞争对手Direct3D API,并没有确保OpenGL在Windows下也能正常运行。

1993年11月,ATI宣布68890 PC电视解码器芯片的发布,该芯片首次在Video-It卡里面亮相。借助板载Intel i750PD VCP(视频压缩处理器),该芯片能够以320x240 @ 15 fps或160x120 @ 30 fps捕获视频,并能够实时压缩/解压缩。它还能够通过数据总线与图形卡板通信,从而无需使用加密狗或端口和带状电缆。

1995年,ATI的Mach8发布,创造了许多著名的首创。它成为第一个以Xclaim形式在PC和Mac计算机上使用的图形卡适配器,并且与S3的Trio一起提供了全动态视频播放加速功能。

3D时代开启

1995年5月,nVidia推出了他们的第一款图形卡芯片NV1,并成为首款能够进行3D渲染,视频加速和集成GUI加速的商业图形卡处理器。供应商发布显卡支持规格的主板(Diamond Edge 3D),D3D(Diamond Edge 3D)图形卡API确认依赖于渲染三角形多边形,而NV1则使用四边形纹理映射。nVidia通过驱动程序添加了有限的D3D兼容性,以将三角形包装为二次曲面,但是市面上仍然很少针对NV1量身定制的游戏。

1995年11月,ATI宣布了他们的首个3D加速器芯片3D Rage(也称为Mach 64 GT)。

1995年,3Dfx推出了业界的口碑极佳的3D图形加速卡:Voodoo。3Dfx的专利技术Glide引擎接口一度称霸了整个3D世界,直至D3D和OpenGL的出现才改变了这种局面。

Voodoo标配为4Mb EDO显存,可以提供在640×480分辨率下3D显示速度和最华丽的画面。Voodoo也有硬伤,它只是一块具有3D加速功能的子卡,运用时需搭配一块具有2D功能的显卡,因此当时S3 765+Voodoo是为人津津乐道的黄金组合。

S3 765显卡是当时兼容机的标准配置,最大限度支持2MB EDO显存,可以实现高分辨率显示,可以支持1024×768的分辨率,并且在低分辨率下支持最大限度32Bit真彩色,而且性能和价格比也较强。

1995年,VideoLogic开发了一种基于图块的延迟渲染技术(TBDR),该技术在纹理、阴影和光照应用于剩下的渲染之前,抛弃了所有可见的几何形状,从而消除了对大规模z缓冲(在最终渲染中去除遮挡/隐藏的像素)的需求。这个过程产生的框架被分割成矩形块,每个图块都可以自行进行多边形渲染并发送到输出。一旦计算了帧所需的像素并剔除了多余的多边形(z缓冲只在平铺层发生),对多边形渲染就开始了,这样就只需要进行最基本的计算。

1995年,Rendition的VéritéV1000成为第一张具有可编程核心的显卡,它使用了基于MIPS的RISC处理器和Pixel Pipelines(像素管线)。处理器负责设置和组织管线的工作负载。 Vérité1000最初于1995年底开发,后来成为Microsoft用于开发Direct3D的主板之一。

1996年 3DLabs 研制出Glint,该公司诞生于杜邦的Pixel图形卡部门。GLINT 300SX处理器能够进行OpenGL渲染,片段处理和光栅化。GLINT 300SX增加了2MB的内存。它为纹理和Z缓冲区使用了1MB,为帧缓冲区使用了1MB,但是还提供了一个选项,以增加VRAM的Direct3D兼容性。

1997年3月ATI推出 3D Rage Pro,它在4MB格式下几乎可以媲美Voodoo Graphics的性能。在使用8MB和AGP接口时,其性能则优于3Dfx卡。它扩展了4kB高速缓存并增加了边缘抗锯齿功能,该显卡改进了Rage II的透视校正,纹理处理能力以及三线性滤波性能。还集成了一个浮点单元,以减少对CPU的依赖以及对DVD的硬件加速和显示支持。

1997年4月,nVidia推出了RIVA 128(实时交互式视频和动画加速器),并通过渲染三角形多边形增加了Direct3D兼容性,使用新的350nm工艺,并开发了RAMDAC和视频转换器,这是nVidia具有里程碑意义的显卡。

1998年1月,英特尔发布i740,它结合了R3D/100上两种不同的图形和纹理芯片的资源,实现了AGP纹理,纹理被上传到系统内存中(渲染缓冲区也可以存储在RAM中)。此前一些设计会选择使用显卡的帧缓冲区用来保存纹理,如果帧缓冲区饱和或纹理太大而无法存储在本地图形内存中,则纹理交换到系统RAM中。为了最大程度地减少延迟,英特尔的设计使用了AGP Direct Memory Execute(DiME)功能,该功能仅调用光栅化所需的那些纹理,其余的存储在系统RAM中。性能和图像质量可以接受的,性能大致与上一年的高端产品相匹配,因此该产品大放异彩。

1998年3月,3Dfx推出Voodoo2。Voodoo2本身带有8Mb/12Mb EDO显存,PCI接口,卡上有双芯片,可以做到单周期多纹理运算。缺点是它的卡身很长,并且芯片发热量相当大,依然只作为一块3D加速子卡,需要一块2D显卡的支持。Voodoo2的推出使得3D加速又到达了一个新的里程碑,依仗Voodoo2的效果、画面和速度,征服了不少当时盛行一时的3D游戏,比如Fifa98,NBA98,Quake2等等。

1998年7月,Matrox公司发布MGA G200继承了自己超一流的2D水准,3D方面有了革命性的提高,不但可以提供和Voodoo2差不多的处理速度和特技效果,另外还支持DVD硬解码和视频输出,并且独一无二的首创了128位独立双重总线技术,大大提高了性能,配合当时相当走红的AGP总线技术,G200也赢得了不少用户的喜爱。

1998年的S3的野人系列Savage系列显卡,Savage3D采纳使用128位总线结构及单周期三线性多重贴图技术,最大像素填充率达到了125M Pixels/s,三角形生成速率也达到了每秒500万个。通过S3新设计的AGP引擎和S3TC纹理压缩技术,支持Direct3D与OpenGL,最大显存容量可达8MB SGRAM或SDRAM,支持AGP 4×规范。相应情况下也支持当时流行的如反射和散射、Alpha混合、多重纹理、衬底纹理、边缘抗锯齿、16/24位Z-buffering、Tri-linear Filtering(三线性过滤技术)、S3TC纹理压缩技术等技术。可惜就是受到驱动程序不兼容的严重影响,最终在99年时惨淡收场。

3D时代崛起

1999年2月,S3发布Savage4,成为的第一张支持多重纹理的显卡,也是第一张支持AGP 4x接口的显卡。

1999年,NVidia推出TNT2 Ultra、TNT2和TNT2 M64三个版本的芯片,后来又有PRO和VANTA两个版本。这种分类方式也促使后来各个生产厂家对同一芯片进行高中低端的划分,以满足不同层次的消费需要。TNT系列配置了8Mb到32Mb的显存,支持AGP2X/4X,支持32位渲染等等众多技术。nVidia能战胜Voodoo3,与3Dfx公司推行的策略迫使众多生产厂家投奔nVidia也不无关系,促进了TNT系列的推广。

1999年,Matrox推出 MGA G400,它拥有16Mb/32Mb的显存容量,支持AGP 2X/4X,还有支持大纹理以及32位渲染等等,独特漂亮的EMBM硬件凹凸贴图技术,营造出的完美凹凸感并能实现动态光影效果的技术,并且G400拥有优秀的DVD回放能力,只是价格有些昂贵。通过双显示控制器(被Matrox称为DualHead)驱动两台显示器的能力开始了公司的多显示器支持趋势。

1999年,nVidia终于爆发了,它在99年末推出了当前革命性的显卡—Geforce 256,彻底打败了3Dfx。代号NV10的GeForce 256支持Cube-Environment Mapping,完全的硬件T&L(Transform & Lighting),把原来有CPU计算的数据直接交给显示芯片处理,大大解放了CPU,也提高了芯片的运用效率。GeForce256拥有4条图形纹理通道,单周期每条通道处理两个象素纹理,工作频率120MHz,全速可以达到480Mpixels/Sec,支持SDRAM和DDR RAM,运用DDR的产品能更好的发挥GeForce256的性能。其不足之处就在于采纳使用了0.22纳米的工艺技术,发热量相对其它的来说很高的。

2000年7月,3Dfx发布的Voodoo 5引入了T-buffer技术,作为变换和照明的一种替代方法,它基本上采用了一些渲染帧并将它们聚合为一个图像的方法。这产生了稍微模糊的图片,当按帧顺序运行时,可以平滑动画的运动。

2000年末,3Dfx最终被nVidia收购。

3D时代巅峰

2000年,ATI依仗T&L技术打开市场,在经历“曙光女神”的失败后,ATI推出了自己的T&L芯片RADEON 256。RADEON和NVIDIA一样具有高低端的版本,完全硬件T&L,Dot3和环境映射凹凸贴图,还有两条纹理流水线,可以相应情况下处理三种纹理。最出彩的是HYPER-Z技术,大大提高了RADEON显卡的3D速度,拉近了与GEFORCE 2系列的距离,ATI的显卡开始在市场占据主导地位。

2000年4月,nVidia发布了GeForce 2 GTS(GigaTexel Shader),称为Nvidia Shading Rasterizer,它允许将高光阴影,体积爆炸,折射,波浪,顶点混合,阴影体积,凹凸贴图和高程贴图等效果应用于每个像素通过硬件的基础。

2000年8月,ATI Radeon DDR上市。在卓越的T&L实现和对即将推出的DirectX 8特性的支持下,Radeon DDR与GeForce 2 GTS一起,通过将对接口的支持集成到芯片本身,引入了DVI输出的使用。

2001年,nVidia推出的Geforce 3系列,这张卡成为了该领域的新王者,GeForce 3显卡增加了可编程T&L功能,可以对几乎所有的画面效果提供硬件支持。GeForce 3总共具有4条像素管道,填充速率最大限度可以达到每秒钟800 Mpixels。支持DirectX 8,多重采样AA,梅花AA(基本上是2xMSAA +后期处理模糊),8x各向异性滤光以及无与伦比的处理8xAF +三线性滤光的能力以及可编程的顶点着色器,用于更紧密地控制多边形网格运动和更流畅的动画序列。还有LMA(光速内存架构)支持——基本上是Nvidia的HyperZ版本——用于剔除隐藏在屏幕上其他像素后面的像素(Z遮挡剔除),以及压缩和解压数据以优化带宽使用(Z压缩)。最后,Nvidia实现了负载平衡算法,将其称为Crossbar内存控制器,该控制器由四个独立的内存子控制器(与行业标准的单个控制器相对)组成,从而可以更有效地路由传入的内存请求。

2001年,ATI则推出Radeon 8500/7500系列,采纳使用0.15微米工艺制造,包括6000万个晶体管,采纳使用了不少新技术(如Truform、Smartshader等)。并根据显卡的核心/显存工作频率分成不同的档次——核心/显存分别为275/550MHz的标准版,核心/显存为250/500MHz的RADEON 8500LE,生产核心/显存频率分别为300/600MHz的Ultra版,以及中端的Radeon 7500,低端的Radeon 7200,7000等产品。值得一提的是Radeon 8500还支持双头显示技术。

2002年,ATI R300 GPU发布,由最初构成ArtX核心的团队开发,交付出色。它是第一个提供DirectX 9.0支持的应用程序,并且扩展了第一个支持着色器模型2.0,顶点着色器2.0和像素着色器2.0的体系结构。

2002年,nVidia与ATI的竞争更加白热化。为巩固其图形芯片市场霸主的位,nVidia推出了Geforce 4系列,GeForce4 Ti系列择定确定是最具性能和价格比的,其代号是NV25,主要针对当时的高端图形市场,是DirectX 8时代下最劲爆强大的GPU图形处理器。芯片内部包含的晶体管数量高达6千3百万,运用0.15微米工艺生产,采纳使用了新的PBGA封装,运行频率达到了300MHz,配合频率为650MHz DDR显存,可以实现每秒49亿次的采样。GeForce4 Ti核心内建4条渲染流水线,每条流水线包含2个TMU(材质贴图单元)。Geforce 4系列从高到低,横扫了整个显卡市场。

2002年,ATI推出R9700/9000/9500系列,首次支持DirectX 9,使其在与NVidia的竞争中抢得先机。同时R9700支持AGP 8X、DirectX 9,核心频率是300MHz,显存时钟是550MHz。RADEON 9700实现了可程序化的革命性硬件架构。符合AGP 8X最新标准,配有8个平等处理的渲染管线,每秒可处理25亿个像素,4个并列的几何处理引擎能处理每秒3亿个形迹及光效多边形。R9000则面向低端的产品,R9500则对标Ti4200。

2003年的显卡市场依旧为N系与A系所统治。nVidia的Gf FX 5800(NV30)系列拥有32位着色,颜色画面有质的提高,在基础上推出的GeForce FX 5900,提高了晶体管数,降低了核心频率与显存频率,改用了256BIT DDR以提高显存带宽。

2003年7月,nVidia推出了GF FX 5950/5700系列,以取代GF FX 5900/5600。新的Detonator FX驱动程序大大改善了AA和AF。 2003年9月,ATI推出了RADEON 9800/pro/SE/XT,依仗其超强的性能以及较低的售价,再次打败GF GX 5800。

2004年是ATI大放异彩的一年,其最大的功臣却是来自于面向中低端的Radeon 9550。2004年最具性能和价格比的显卡,让ATI在低端市场呼风唤雨。R9550基于RV350核心,采纳使用0.13微米制程,核心频率为250MHz,显存频率为400MHz,4条渲染管道,1个纹理单元,相应情况下兼容64bit和128bit。

2005年,Nvidia推出6000系列显卡,特性包括DirectX 9.0c支持、shader model 3.0(尽管显卡从未完全利用这一点)、Nvidia的PureVideo解码和播放引擎,以及SLI支持。

2006年10月25日,ATI被AMD收购,总价为54亿美元。

NVIDIA发展表:

1995年,NV1

50K triangles/sec
1M pixel ops/sec
1M transistors
16-bit color
Nearest filtering

1997年,Riva 128 (NV3), DX3

1998 – Riva TNT (NV4), DX5

32位颜色,
24位Z缓存,
8位模板缓存
双纹理,
双线性过滤
每时钟2像素 (2 ppc)

1999 - GeForce 256(NV10)

固定管线,
支持DirectX 7.0
硬件T&L(Transform & lighting,坐标变换和光照)
立方体环境图(Cubemaps)
DOT3 – bump mapping
2倍各向异性过滤
三线性过滤
DXT纹理压缩
4ppc
引入“GPU”术语

2001 - GeForce 3

DirectX 8.0
Shader Model 1.0
可编程渲染管线
顶点着色器
像素着色器
3D纹理
硬件阴影图
8倍各向异性过滤
多采样抗锯齿(MSAA)

2003 - GeForce FX系列(NV3x)

DirectX 9.0
Shader Model 2.0
256顶点操作指令
32纹理 + 64算术像素操作指令
512像素操作指令
着色语言:HLSL、CGSL、GLSL

2004 - GeForce 6系列 (NV4x)

DirectX 9.0c
Shader Model 3.0
动态流控制
分支、循环、声明等
顶点纹理读取
高动态范围(HDR)
64位渲染纹理(Render Target)
FP16*4 纹理过滤和混合

2006 - GeForce 8系列 (G8x)

DirectX 10.0
Shader Model 4.0
几何着色器(Geometry Shaders)
没有上限位(No caps bits)
统一的着色器(Unified Shaders)
Vista系统全新驱动
基于GPU计算的CUDA问世
GPU计算能力以GFLOPS计量。

2010 - GeForce 405(GF119)

DirectX 11.0
曲面细分(Tessellation)
外壳着色器(Hull Shader)
镶嵌单元(tessellator)
域着色器(Domain Shader)
计算着色器(Compute Shader)
支持Stream Output
Shader Model 5.0

DirectX 11的渲染管线。

多线程支持
改进的纹理压缩

Shader Model 5.0

更多指令、存储单元、寄存器
面向对象着色语言
曲面细分
计算着色器

2014 - GeForceGT 710(GK208)

DirectX 12.0
轻量化驱动层
硬件级多线程渲染支持
更完善的硬件资源管理

2016 - GeForceGTX 1060 6GB

首次支持RTX和DXR技术,即光线追踪
引入RT Core(光线追踪核心)
支持RTX光线追踪的显卡列表

2018 - TITAN RTX(TU102)

DirectX 12.1,OpenGL 4.5
6GPC,36TPC,72SM,72RT Core,...
8K分辨率,1770MHz主频,24G显存,384位带宽

参考资料:

《GPU历史系列》

https://new.qq.com/omn/20200506/20200506A0GP6H00.html?pc

《GPU发展史》

http://www.360doc.com/content/16/0607/16/30123241_565810074.shtml

《显卡发展史1》

http://www.360doc.com/content/20/0504/17/32196507_910185372.shtml

《显卡发展史2》

http://www.360doc.com/content/20/0504/17/32196507_910185435.shtml

《显卡发展史3》

http://www.360doc.com/content/20/0504/17/32196507_910187350.shtml

《Making Sense of Smartphone Processors: The Mobile CPU/GPU Guide》

https://www.techautos.com/2010/03/14/smartphone-processor-guide/

《移动设备GPU架构知识汇总》

https://zhuanlan.zhihu.com/p/112120206

《针对移动端TBDR架构GPU特性的渲染优化》

https://gameinstitute.qq.com/community/detail/123220

《A look at the PowerVR graphics architecture: Tile-based rendering》

https://www.imaginationtech.com/blog/a-look-at-the-powervr-graphics-architecture-tile-based-rendering/

《A look at the PowerVR graphics architecture: Deferred rendering》

https://www.imaginationtech.com/blog/the-dr-in-tbdr-deferred-rendering-in-rogue/

《深入GPU硬件架构及运行机制》

https://www.cnblogs.com/timlly/p/11471507.html

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

· 读书笔记, 前端技术

感谢您的耐心阅读

Thanks for your reading

  • 版权申明

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

    读书笔记(四十七) 《游戏引擎架构》#4 低阶渲染器(2)

    Copyright attention

    Please don't reprint without authorize.

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

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