Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35892
  • 博文数量: 17
  • 博客积分: 608
  • 博客等级: 中士
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-07 00:56
文章分类
文章存档

2012年(17)

我的朋友

分类: 虚拟化

2012-07-16 00:30:45

         GPU是从游戏图像处理逐步发展过来的概念,我花了几天时间都没法完全理解;因为牵涉到的知识量太大了。我想构造一个容易的虚拟GPU,目的之一是学习。

    在现实世界中,人们通常使用右手坐标系表示物体的位置,一个图形场景往往有多个图形组成,为了描述它们之间的关系,需要把它们置于一个统一的坐标系中—称为世界坐标系WC(World Coordinate System):包括常用的直角坐标系、几何坐标系等各种坐标系。坐标建立了几何图形和数字之间的关系,为了使显示的图形数字化。

对象坐标系:为了方便建立对象图形的数字模型,常常根据它的几何形状选择坐标系,因此在图形的处理过程中,每个图形模型都有自己的坐标系,称为模型坐标系或局部坐标系。

设备坐标系DC(Device Coordinate System):图形的显示是在设备上进行的,在设备上描述图形的坐标系称为设备坐标系 DC(Device Coordinate System),取值范围受设备的输入输出的精度以及画面有效范围的限制。屏幕上显示的图形均以其一个像素点单位为量化单位。输出设备如果是屏幕就是屏幕坐标系。有可能是三维的如机械手运动轨迹的三维坐标系。我们常用的是屏幕坐标系。有些图形系统,对设备坐标系进行了规范化,将坐标范围限定在区间{x, y, z | 0≤x≤1, 0≤y≤1, 0≤z≤1}内,称为标准化设备坐标系。

观察坐标系:在图形显示或处理过程中,用户往往需要从不同角度对图形进行观察,需要产生不同角度的视图,如果在世界坐标系中产生不同角度的视图,投影变换所涉及的计算将相对复杂。此时可根据视图所在的投影平面建立一个新的坐标系,称为观察坐标系,使世界坐标系中的任意投影平面为观察坐标系中的平面。把世界坐标系中的图形变换到观察坐标系中,从而可大大简化投影变换。 

视见体:有时为了突出图形的某一部分而只显示部分图形,这时可以定义一个视见体,限定要绘制的图形区域。一般是一个四棱台或四棱柱。

窗口: 视见体投影到投影平面上形成的一个矩形

视口:在投影平面上形成X′Y′U′V′。为了在屏幕或绘图纸上指定显示图形的位置,需要在其上定义一个矩形,该矩形称为视口。

纹理坐标的作用是在纹理上指定一个点,Texture Mapping (纹理映射)。在场景中,我们可以把纹理应用到对象上,这个过程就叫做“纹理映射”。在此过程中,纹理坐标会被映射到顶点上,所以,顶点将额外增加两个值:U和V。纹理就是3D图形中的2D贴图(位图),能应用到三角形(或一定数目的三角形)上,用来增加真实感。纹理最好是正方形(长和宽一样)的而且它的边长最好是2的n次幂的形式,纹理越小越好。

Normals (法线):法线是垂直于三角形面的一个向量,它的方向是由三角形的顶点定义顺序所决定的。

一、几何变换

1. 平移变换

2. 缩放变换

3. 旋转变换

4. 变形变换

5. 对称变换

    几何变换或坐标变换的原理及效果是相同的。都是利用变换矩阵来实现对图形的变换。几何变换:直观;坐标变换:便于求解复杂问题。

World Matrix(世界矩阵):你可以利用世界矩阵在3D空间(世界空间)里通过修改对象的坐标来完成它们的旋转、缩放、或平移操作。

二、投影变换

    根据投影中心(COP:Center of Projection)与投影平面之间的距离,投影变换可分为平行投影以及透视投影。透视投影是一种中心投影法。

View Matrix(视图矩阵):视图矩阵就是摄像机(或眼睛)。摄像机在世界空间中有一个位置,还有一个观察点。

Projection Matrix(投影矩阵):投影矩阵可以被想象成摄像机的镜头,它指定了视界(field of view)和前、后裁剪平面。这种把三维物体用二维图形表示的过程称为三维投影变换。

    平行投影是将物体上所有点都沿着一组平行线投影到投影平面,而透视投影是所有点沿着一组汇聚到一个称为投影中心的位置的线进行投影。最大一个特点是无论物体距离投影面(相机)多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。

    透视投影可用矩阵变换方法获得,在4*4阶变换矩阵中第四列元素p,q,r称为透视参数,若赋其非零数值即形成透视变换矩阵 。透视投影符合人类的生理机制,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切割过的棱椎,也就是棱台。这类投影通常用于动画、游戏、视觉仿真以及其它许多具有真实性反映的方面。

三维裁剪的过程包含两个基本阶段,第一阶段是几何处理阶段,在这个阶段中所做工作是用窗口平面去裁切立体。第二阶段是拓扑处理阶段,在这个阶段中所要做工作是把经截切后残留下来的信息重新组成新的立体模型。在三维图形处理中,只有经过三维裁剪后,才能对经裁剪后保留下来的立体进行消隐处理,最后送去作二维图形显示。所有的隐线、隐面消除算法均和某种排序算法有关。排序的主要依据是被显示的点、线、面或体与观察点之间的几何距离。一个显示对象离观察点越远,那么它越是可能被其他物体所遮挡,这是排序的基本前提。当然,在确定了不同的对象离观察点的不同距离以后,还要对它们在x方向和y方向进行比较,以确定某个较远的对象实际上是否真的被较近的对象所遮挡。

   复杂的图形变换都可以归结为对点的变换,归结为(x,y,z,1)*T的矩阵运算,T是4*4的变换矩阵;也就是并行乘加运算。

   三维空间中任何复杂的模型都是由若干个三角形组成的,顶点(Vertex)就是指这些三角形的顶点,而片段(fragment)就是指三角形的填充区域。每个顶点都包含许多信息,如顶点上的纹理信息,散光和映射光源下表现的颜色,所以在生成多边形的时候带上这些附加运算,就可以带来更多的效果,但这也更加考验顶点和像素计算能力。

图形绘制管线可分为三个主要阶段:

1、应用程序阶段:使用汇编语言进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行。

2、几何阶段:主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU 进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标

4、光栅阶段:基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘制完整图像,每个像素的信息存储在颜色缓冲器(color buffer 或者frame buffer)中。

使用shader language 编写的程序称之为shader program(着色程序)。

着色程序分为两类:

1、vertex shader program(顶点着色程序,运行在顶点处理器上)
顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中。

2、fragment shader program(片断着色程序,运行在片段处理器上)
片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较。片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。

GPU应实现:

指令独立透明度、光线追踪、强化后的后期处理效果、全新的Tessellation(可编程式拆嵌细分曲面技术)、DirectCompute和HDR Texture Compression(HDR纹理压缩)、增强易编程性与显存利用效率等。

基本特性: 
1、指令设置,能够更随意数据读、写、控制数据。

2、Vertex Shader、Hull Shader、Domain Shader、Geometry Shader、Pixel Shader、Compute Shader 融汇贯通共享一个统一的指令集。

3、以3D物体作为编程的出发点,功能和子流程的编写和执行更简便。

4、Tessellation处理过程包括全新引入的外壳着色器(Hull Shader,简称HS)、镶嵌细分器(Tessellator)和域着色器(Domain Shader)三个组件。其中HS外壳着色器负责接收琐碎的图形数据和资料,镶嵌细分器(Tessellator)只负责分块处理,它根据HS的指令要求生成大批量的、确定数量的点,然后将数据传送给域着色器(Domain Shader),再由它来将这些点转换成3D处理中的顶点,最终就生成了相应的曲线和多边形。

5、指令独立透明(OIT,Order Independent Transparency),顺序无关。透过OIT,今后3D场景中的火焰、烟雾、毛发、草皮、水面、栅栏、树叶等等透明、半透明、重叠物等等的渲染将更加贴近实际。

    所以GPU就是一个多CPU核的并行结构芯片,只不过为了集成更多的核每核都是简化版CPU。下面探讨虚拟GPU的构造。


。。。。待续。

阅读(675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~