显卡工作过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先
咱们先假设显卡是个画画的画匠吧
给画匠分配任务的当然是咱们的PROGRAMS(程序)
但是程序的命令是给整个硬件系统听的,不是只交代你显卡
那怎么让显卡知道这一堆命令中哪些是需要自己执行的呢
那当然得通过一个中间代理机构进行分配拉
这就是我们的OS(操作系统)
首先程序发送命令被操作系统分析为C+/BASIC/宏等程序
其中一部分被识别为CPU可识别的指令集
一部分被识别为DX/OPENGL等API集(什么是API呢,大家可以理解成这就是显卡这个画家曾经学过的一种绘画技巧,程序知道显卡会这些绘画技巧,就照此分配显卡的绘画任务,当OS分析出这些需要绘画技巧的支持时就通知显卡进行处理,绘画技巧关系到显卡画出画面的素质,显卡可以画出哪些效果,以及显卡画画的效率_从指令的执行效率来说)可以支持的指令
当显卡的API可以支持的指令被分析出的时候,OS将其交给驱动,驱动将之进一步编译为2进制的0/1代码(因为操作系统和显卡不是一个国家的人,显卡只知道2进制度语言,而操作系统之表层仅了解的是数据库语言和C+/BASIC等简单指令语言) 终于显卡知道自己改干啥了
那么接下来动手吧
构思的过程
与人一样
显卡做画需要先构思
它做画的基本单位是桢
比如说显卡每秒生成画面60桢
就相当于一个画家一秒画了60副画(人类画家可没这速度,汗)
显卡是在哪里做画的呢,它在它的桢缓冲与流水线之间做画
怎么同时在两个地方做画呢
复杂的解释就是显卡先在流水线做好画的一部分,赶紧送到桢缓冲里,然后继续做下一部分,最后所有的部分就在桢缓冲里合成为完整的画面
有点抽象吗
其实你可以这么理解:就是画家用一个超级复写纸(流水线)覆盖在他的画纸(桢缓冲)上
那么显卡画家在复写纸上做好画时,在画纸上也出现了一副画面
(其实这个理解不是很准确,不过大概是这个意思,当然显卡不是通过这种复制的方式把画面送给桢缓冲的)
不过以上是做画的过程
画家必须先想好怎么画
在从驱动那收集来的API转换成的2进制指令中,有一部分是要求显卡进行一些数学计算的
比如计算一个光线在光源发生位移的情况下,自身要怎么变化,以及环境里因为这个光而产生的相对的阴影是如何变化的
显卡不仅画画好,数学也学的好,别看它大脑(GPU)的核心频率不如主流的CPU高,但是它的大脑很高效哦!算起这些数学里比CPU快的多
不只是光影效果
一些顶点的位移表现也要让显卡自己来计算
什么是顶点呢
我们知道画家画画的时候一般要先画出物体的轮廓后方才更加细致的描绘
显卡也是如此
它需要先画出轮廓
它画轮廓的方式先画出轮廓上的顶点(这就好象小时候学数学里,正方体有8个顶点一样)然后把顶点连线起来,就成了一个完整的物体的轮廓了,
不过显卡只知道把三角形(2D)/三角体进行连线,只能画出一堆三角的轮廓
不过三角这种东西具有很大的可塑性,靠它们可以无限组合出更多的立体感强的物质
而游戏中的物体始终是在运动的
顶点的位置也将不断变化
这个位移的过程需要显卡进行计算
这就是顶点拾取
与顶点识趣概念相对的还有个纹理拾取
这也是需要显卡去数学计算的
这也是为了确定纹理的位置
我们知道,显卡在画完轮廓以后需要描绘细节
比如画一个人,画完了身体的轮廓,接着就要画皮肤了
那皮肤是什么呢
对就叫纹理
纹理是怎么固定到这个活动中的轮廓上呢
原来显卡做画的时候给轮廓上每个需要经常参与活动/变形的顶点坐了标记
再把纹理直接钉在这些顶点上!
也就成了顶点纹理
顶点一动,纹理也要相对的发生变化
那么顶点与纹理相对位置的变化关系,就是顶点纹理拾取的功能所在了
所以以后有人说起什么是顶点纹理拾取
你可以告诉他
那是为了让你的纹理可以和你的建模一起动!
进行了所有的数学计算以后
确定了顶点的坐标
然后又按着坐标绘制出轮廓,再把纹理钉到了轮廓中的顶点上
这就把画面的皮给作好了
在这个过程中
纹理的绘制过程
又是这样的
首先
从驱动那里收集内的API信息里也包括了一些内存地址(任务程序,硬件的操作都会占用一定的缓存,缓存包括显存,内存,及时可写性,与非及时可写性,易失性与非易失性等多中,不过它们有个共同特征,就是它们存储介质的基本单位都可以用"地址"来定位,你要往它们里面读或者写东西,请先给出一个地址,他们从这些地址里找到一个区域内专门给你读与写)
这些内存地址正式隐藏在游戏程序中的以0/1数字所表示着的纹理!(甚至你打开一些游戏的安装文件夹,你直接就可以看到一个叫TEXTURE的文件夹,那就是存放纹理的数据化信息的地方)
这些内存地址通过显卡大核心大脑,在那里有个显存控制器的小玩意,他看到这些东西,明白这是内存地址
于是呼唤出显卡画家的仓库助手显存小弟出面到内存那里要纹理数据
显存拿着内存地址来到内存那,按地址一个个点名要走了已经事先被从硬盘里提到内存中的纹理数据(因为纹理有一个过程是存放在内存里的,所以纹理越大也越吃内存)拿回的数据先存放在显存的大仓库里
只要显卡画家一需要,就会为其送上
显存为显卡画家送纹理等信息的通道的宽度我们可以叫它显存位宽
这路越宽,当然送纹理什么的也就更通畅,不容易堵车,速度也就快了,而运输这些纹理的时候的速度(比如用车运输纹理就是指车的时速了)越快,自然纹理也就可以更快的输送到核心那里
如果显卡画家要纹理了
你还不把纹理送过去
人家没东西可以往轮廓模型上贴,就必须在那等待你,导致画家画画的速度就慢了(被显存拖累了)
所以显存的速度也很重要哦!
画完了纹理
没颜色,没特效怎么行呀?
接下来就是象素渲染了
在前期我们提到光影是需要数学计算的
在象素处理的阶段,按照前期数学计算的结果进行光影渲染的处理
不仅是光影
模糊效果,HDR等都属于象素渲染的范畴
显卡画家用来渲染象素的那种手我们就叫他渲染单元吧
这手越多啊,画画速度自然就越快拉
不仅是象素渲染的手
还有纹理渲染的手(纹理渲染单元)
以及顶点渲染的手呢(顶点渲染单元)
不过显卡画家在学会DX10绘画技术以前
他很"穷"
穷到那么多手只有几个袖子
比如画家6800GT先生
他是16只袖子