8be2b0450b43ec58cffb2afa59b47368.png

看了很多人在渲染的路上感觉很迷茫,正好本人最近在研究RedShift,同时也看到有人为redshift独尊其它渲染器垃圾的言论,为此我觉得应该从理性公正的角度说说渲染这件事。所以特开此贴。

那先说第一个问题,为什么要使用GPU渲染。(并非完全原创,部分内容来源于网络)

要搞清楚GPU为什么会适合做渲染,就需要了解什么是GPU他的本质是什么,是在什么情况下产生的。

-------------------------------------------------------------------------------------------

第一部分GPU的由来

20 世纪六、七十年代,受硬件条件的限制,图形显示器只是计算机输出的一种工具。限于硬件发展水平,人们只是纯粹从软件实现的角度来考虑图形用户界面的规范问题。图形用户界面国际标准GKS(GKS3D),PHIGS就是其中的典型代表。

20世纪80年代初期,出现GE(Geometry Engine)为标志的图形处理器。GE芯片的出现使得计算机图形学的发展进入图形处理器引导其发展的年代。GE的核心是四位向量的浮点运算。它可由一个寄存器定制码定制出不同功能,分别用于图形渲染流水线中,实现矩阵,裁剪,投影等运算。12个这样的GE单元可以完整地实现三维图形流水线的功能。芯片设计者James Clark以此为核心技术建立的SGI公司,基于SGI图形处理器功能的图形界面GL及其后的OpenGL,成为图形用户界面事实上的工业标准。

20世纪80年代和90年代,计算机逐渐进入家庭,娱乐功能也开始体现,随之而来的就是更多的电脑游戏,这也使得CPU图形计算负担日益加重,同时GE及其图形处理器功能不断增强和完善,使得图形处理功能逐渐从CPU向GPU转移。现代图形处理的流水线主要功能分为顺序处理的两个部分:第一部分对图元实施几何变化以及对图元属性进行处理(含部分光照计算);第二部分则是扫描转换进行光栅化以后完成一系列的图形绘制处理,包含各种光照效果和合成、纹理映射、遮挡处理、反混淆处理等。 也就是T&L(Transform & lighting,坐标转换和光源)功能。

20世纪90年代,NVIDIA进入个人电脑3D市场,并于1999年推出具有标志意义的图形处理器——GeForce 256,第一次在图形芯片上实现了3D几何变换和光照计算。此后GPU进入高速发展时期,平均每隔6个月就出现性能翻番的新的GPU。

从SGI的GE到NVIDIA的GeForce,GPU经历了20年,芯片的线宽从3μm缩小到90nm(2007年的GeForce 8800集成了6.81亿晶体管),集成电路的逻辑设计能力提高几千倍,但处理器数据通道接口带宽仅提高十几倍。同时对图形处理器计算能力的需求不断增长,出现了可编程的图形处理器,以NVIDIA和ATI为代表的GPU技术正是适应这种趋势。

而到目前为止,GPU已经过了六代的发展,每一代都拥有比前一代更强的性能和更完善的可编程架构。

第一代GPU(到1998为止)包括NVIDIA的TNT2,ATI的Rage和3dfx的Voodoo3。这些GPU拥有硬件三角形处理引擎,能处理具有1或2个纹理的像素,能够大大提高CPU处理3D图形的速度。但这一代图形硬件没有硬件T&L引擎,更多只是起到3D加速的作用,而且没有被冠以“GPU”的名字。

纸飞机CG纸飞机CG纸飞机CG

第二代GPU(1999-2000)包括NVIDIA的Geforce256和Geforce2,ATI的

Radeon7500,S3的Savage3D。它们将T&L功能从CPU分离出来,实现了高速的顶点变换。相应的图形API即OpenGL和DirectX7都开始支持硬件顶点变换功能。这一代GPU的可配置性得到了加强,但不具备真正的可编程能力。

随着更加复杂多变的图形效果的出现,图形处理生成多边形的过程中需要加上许多附加运算,比如纹理信息、散光和映射光源下的颜色表现等等。这就对GPU提出了更高的要求。2001年微软发布的DirectX 8带出了Shader Model(渲染单元模式),Shader(渲染器/着色器)由此诞生。

第三代GPU(2001)包括NVIDIA的Geforce3和Geforce4 Ti,微软的Xbox,及ATI的Radeon8500。这一代GPU首次引入了可编程性,即顶点级操作的可操作性,允许应用程序调用一组自定义指令序列来处理顶点数据,并可以将图形硬件的流水线作为流处理器来解释。也正是这个时候,基于GPU的通用计算开始出现。但是片段操作阶段仍然不具备可编程架构,只提供了更多的配置选项。开发人员可以利用DirectX8以及OpenGL扩展

(ARB-vertex-program,NV-texture-shader 和 NV-register-combiner)来开发简单的顶点及片段着色程序。

第四代GPU(2003)包括NVIDIA的GeforceFX(具有CineFX架构),ATI的Radeon9700。相比上一代GPU,它们的象素级和顶点级操作的可编程性得到了大大的扩展,可以包含上千条指令,访问纹理的方式更为灵活,可以用做索引查找。最重要的是具备了对浮点格式的纹理的支持,不在限制在[0,1]范围内,从而可以做任意数组,这对于通用计算而言是一个重要突破。DirectX9和各种OpenGL扩展(ARB-vertex-program、ARB-fragment-program、NV-vertex-program2、NV-fragment-program)可以帮助开发人员利用这种特性来完成原本只能在CPU上进行的复杂顶点像素操作;Cg语言等其他高级语言在这一代GPU开始得到应用。

第五代GPU(2004)主要以NVIDIA GeForce6800为代表。NVIDIA GeForce 6800集成了2亿2千2百万晶体管,具有超标量的16条管线架构。功能相对以前更加丰富、灵活。顶点程序可以直接访问纹理,支持动态分支;象素着色器开始支持分支操作,包括循环和子函数调用,TMU支持64位浮点纹理的过滤和混合,ROP(象素输出单元)支持MRT(多目标渲染)等。

第六代GPU(2006)主要以NVIDIA GeForce 7800为代表。GPU内建的CineFX 4.0引擎,做了许多架构上的改良,提高许多常见可视化运算作业的速度,藉此支持更复杂的着色效果,且仍能维持最高的影像质量。

-------------------------------------------------------------------------------------------------------------

第二部分CPU GPU 区别

自1999年真正意义上的GPU诞生到今天,GPU加速已逐渐渗透医学成像、生物信息学、CAD/CAM/CAE、计算流体力学、计算金融、计算勘探、地理信息系统、国防、电影制作与动画等应用领域,成为CPU计算之外另一个不容忽视的发展方向。

那么,GPU与CPU到底有什么不同?在图形渲染领域,GPU相较于CPU又有什么优势?这是本章我们想要着重讨论的内容。

CPU,即中央处理器,是计算机的核心部件之一。GPU,上一章已经论及,即图形处理器,是为了满足日益复杂的图形处理需求而发展起来的。两者之间的不同,体现在他们处理任务的不同方式上。CPU由专为串行任务而优化的几个核心组成。GPU则由数以千计的更小、更高效的核心组成,这些核心专为同时处理多任务而设计。

两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用

bb68aa40df8fb124f0e306a5d8e26c81.png

现在让我们再回到图形渲染领域,不管是影视动画、建筑表现,还是CG艺术,GPU凭借其专为图形加速而设计的架构和计算能力,为用户带来了一种更加高效的渲染解决方案,即GPU渲染解决方案。与传统CPU渲染相比,GPU渲染具有更快速度、更低成本的优势,而且GPU加速渲染的可用性也不断提高,越来越多搭上GPU渲染标签的高品质作品问世。这些发展趋势,让GPU渲染受到了国内外用户的普遍欢迎。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐