关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

【技术解析】GPU如何实现三维渲染及非图形计算?(一)

2020.10.26

  谜一样的GPU

  手机,现在已经是人手一部甚至两部了,餐厅酒吧、地铁巴士、马路街边随处可见的低头族大家早就见惯不怪,在饭桌上如果你发现没有人低头看手机的话反而会怀疑自己是不是到了外星球。

  吸引人们对手机目不转睛的自然是它显示的内容, 相对于个人电脑刚刚问世时候只能呈现有限的文字以及低分辨率的画面而言,现在的智能手机已经可以在巴掌大的屏幕上做到高达 3840×2160 的分辨率,能呈现非常丰富的画面元素 

  台式机和智能手机虽然存在较大的性能分野,但是两者间一直在互相借鉴,例如操作系统界面都采用了硬件三维加速来强化用户体验:丰富元素的表现力以及实现界面的视觉扩展(例如窗口的旋转切换),而实现这些三维硬件加速的正是许多手机、电脑文章报道中的 GPU,比如说Qualcomm(高通)的Adreno、苹果的PowerVR、ARM的Mali。

  因为应用上的相似性,移动端的GPU和台式机GPU发展最近这几年几乎都是齐头并进,理论上如果将移动端的GPU放大后也是可以拿到台式机上使用的。  

  (NVIDIA推出的NV10)

  GPU的全称是 Graphics Processing Unit,也即是图形处理单元的意思。这个概念的最早确定是NVIDIA(英伟达)公司在1999年发布型号为 GeForce (代号NV10)的三维芯片时首次提出,当时的定义是:

  三角形变换能力达到每秒一千万个三角形以上的三维芯片。

  时至今日,当年NVIDIA提出的GPU定义相信已经很少人记得,GPU这个名词因为微软DirectX 7采用而普及,此后 NVIDIA、微软、ATI(后来的 AMD)、Intel以及几乎整个相关行业、媒体大量采用而成为大家非常熟悉的名词,不管是台式机、服务器、工作站还是游戏机、移动设备,它已经是无处不在。

  相较于GPU的定义,GPU 到底是怎么一回事,它是如何实现三维渲染以及为何后来可以胜任非图形计算,知道的人就更少了,本文尝试在这方面做一些简单的介绍。

  GPU到底是如何实现三维渲染呢?

  要了解GPU是如何进行渲染操作其实并不难,宏观角度来可以将其简化为下面的样子:

  应用程序-》几何处理-》光栅处理

  在图形处理中,应用程序执行的相关操作包括了碰撞侦测、全局加速算法、动画处理、物理模拟等。  

  几何处理就是对图元进行处理,所谓图元是指点、线、面这类几何体,而光栅化则是将确定了位置、大小和光照的几何体映射到屏幕空间栅格化后的处理,例如像素着色、贴图、混合。

  在没有图形芯片(显卡)之前,几何处理、光栅处理都是由 CPU 或者 FPU(浮点单元)、SIMD (单指令多数据)单元协助来完成,随着芯片技术的进步,其中的几何处理、光栅处理开始逐步放到专门的芯片上执行,之后这些专用芯片又被集成到一块,逐渐形成了现在的 GPU。移动处理器同样经历PC这一过程,比如说高通最早的处理器MSM7225/7625就没有集成GPU ,甚至是2D处理都是交由CPU完成。  

  (智能手机与PC一样,经历过无GPU时代)

  应用程序把需要进行三维渲染或者计算的数据和指令递交给 GPU,由GPU来执行几何处理以及光栅处理,这样的处理方式被称作流水线(pipeline)。

  采用流水线的方式可以将工作拆分为若干个处理环节,也就是所谓的工位(stage)或者功能阶段,这些工位本身也可以继续拆分成若干部分,也可以实现(部分的)并行化。

  几何处理阶段需要做些什么啥呢?

  几何处理阶段执行的是顶点、多边形级别的处理。这一步可以拆解为 5 个工位或者说 5 个步骤:

  •对模型及视图进行变换(transform)

  •顶点着色

  •投影

  •裁剪

  •屏幕映射

  模型及视图的变换

  模型变换

  由于每个模型都有自己的坐标,因此在成为屏幕上的画面对象之前,模型需要变换为多个空间或者坐标系。

  作为对象的模型空间(Model Space,或者叫模型自空间)的坐标被称作模型坐标,在经过坐标变换后,模型就会处于世界坐标或者世界空间(World Space)里,也就是确定了该模型在场景中的方向、位置。 

  我们允许在场景中存在多个模型的拷贝(被称作引用),这些大小一样的引用可以在同一个场景中有不同的位置、方向。


推荐
热点排行
一周推荐
关闭