1. 科学性
如今,越来越多的桌面PC采用3D图形绘制技术来获得高真实感的显示效果。诸如工业与艺术行业的设计和制造、科学研究中的建模、交通和旅游业中的虚拟漫游以及3D游戏等。
3D图形绘制技术的本质,是通过一系列算法来模拟自然界中物体在人眼中成像的过程,算法从几何建模、空间变换到计算空间中每个点的光照、阴影以及纹理等等。算法越趋近真实,物体的绘制效果也越逼真。显然,以有限性能的数字系统去还原真实的自然界是极其困难的,考虑的因素越多越细,系统的复杂度越高,实时性越低。因此,任何一款图形绘制系统都必须根据自身硬件的规模、以及场景中物体的特点,在真实性与实时性之间寻求平衡。
图2.1 移动设备图形领域的发展
过去几十年中,桌面PC及工作站一直是3D图形绘制的主流平台,图形处理系统的架构与算法也主要基于这种大面积、高存储带宽、高功耗的特性。然而,移动设备在外部存储带宽、功耗、面积等制约因素上有着数量级的劣势。但是,移动设备往往又仅需在较小的分辨率上绘制图形。较小的分辨率意味着能接受以恰当的方式忽略一些细节,并且通常不会在一个屏幕中包含太多物体。正是和桌面平台相比之下的这些劣势与优势,使面向移动设备的3D图形处理系统自成一体,绝不能靠简单地移植桌面图形处理系统来实现。
因此,研究与设计全新的体系架构、执行流程、算法、开发调试环境及方法等,都成为面向移动设备的图形处理系统的关键技术与创新难点。概括起来,本项目的科学性有如下几点:
1)基于移动平台上的图形处理器的硬件架构、算法和接口,业内都有各自的侧重和妥协,尚无较统一方案。研究分析图形系统各阶段的关键技术,评估多种实现方案间的优劣,将具有重大的科研及市场价值。
2)由于本项目涉及到了图形处理的各个方面,而国内尚无GPU生产厂家,因此对于国内涉及到3D图形显示的各个相关产业都具有重要的意义。本项目将会帮助厂家能够更好地提高3D图形处理方面的技术,致力于给消费者更好的体验,以使国产电子产品取得更大的市场份额。
3)最近几年,随着移动设备在工业、生活中的普及与发展,3D图形绘制系统也逐渐成了移动设备中的核心部件。研究发展移动设备上的3D图形处理技术具有重大意义。
2. 创新性
从算法和硬件架构两个层次进行优化,并从运算速度、芯片功耗和灵活性三方面考虑,以实现用一个较低复杂度和较低功耗的3D图形处理器对真实感图形实现硬件加速。本课题组的创新性主要体现在如下几个方面:
1)所有算法采用定点实现,并在精度允许的情况下尽量减小数据位宽,以降低电路复杂度和功耗。
2)硬件结构上含有基于Tile的光栅单元。基于Tile的绘制方法大大减小了访问外部存储器的带宽,从而降低了功耗。
3)采用FPGA进行仿真验证工作,通过FPGA的并行性和流水线,可以在一个较低的时钟频率(50MHZ)下达到比较理想的数据处理能力。而这正是图形处理器所必需的。
3. 技术方案
3D图形绘制系统的基本组成,是3D图形算法程序以及图形处理器硬件。确定算法程序及硬件结构后,便可进行各种测试分析。
3.1 3D图形算法
要能实时绘制3D场景,就需要在计算机中为场景内每一个物体进行建模,为了方便在计算机中对不同形状不同属性的物体建模,最常用的方法是用许多三角形面片构成一个多面体来拟合实际物体。对这个物体的3D图形绘制流程,大部分内容就是对这些三角形的绘制。
因此基础3D图形绘制可以分为两部分,第一部分是处理物体的顶点,第二部分是处理每一个像素,就三角形而言,即三角形的三个顶点,以及三角形中的每一个像素。
3.1.1 坐标转换
物体建模时,采用这个物体的几何坐标来表示其形状,这时所使用的坐标系称为模型坐标系,模型坐标系的原点往往取自几何物体的某个点或者附近的某点。当这个物体和其他物体一起被设定到3D场景中时,多个物体必须公用场景的原点,此时,大场景构成一个世界坐标系。而人眼从显示器去看这个大场景时,只会以特定的角度及深度看到场景的一部分的投影,即存在一个视椎体,这个投影最终出现在屏幕上时,变成平面的图像,即屏幕坐标系。
物体在这几个坐标系间转换,需要对每个几何顶点做矩阵运算。矩阵的值由坐标转换时的相关参数确定,例如,在世界坐标系中的偏移,旋转,缩放值,视椎体的深度角度,屏幕的分辨率等。
3.1.2 光照计算
正确的光照,改变物体本来的颜色明暗,并立刻产生显著的真实感。光照处理的对象是计算物体上每个点所反射出的光强大小。这个过程需要根据光源的类型、属性,物体表面的材质,物体表面法线与光源的角度,物体与光源的距离,人眼与物体的角度、距离等因素来计算最终的光照强度。
光源主要包括平行光、点光、聚光。物体对光的反应特性主要包括反射、吸收、透射。其中最主要的反射,包括环境泛光、漫反射、镜面反射。泛光主要用来体现环境中物体散射到物体并反射的光。漫反射是物体向空间各角度均匀反射的光,其强度与入射角的余弦成正比,但与视点无关。镜面反射是朝特定方向反射的光。当镜面反射光恰好进入视点时,将能看到通常所说的高光面。
3.1.3 可见性判断
3D场景绘制,是对真实情况的建模和显示,物体之间严格按照自然的遮挡关系,物体每个点在视野中的前后都需要经过判断,以确保近处的能恰当得遮挡远处的。因此需要设定专门的深度缓存,屏幕上的每个像素在绘制前都需要根据深度来判断,如果前面有不透明物体遮挡的话,该点将不会被绘制。
另一方面,对于不透明的封闭几何体,背朝视点的面不需要显示,将可以直接于早期剔除,出现在视椎体边界的三角形需要进行裁剪,形成新的三角形。
3.1.4 扫描光栅
3D图形绘制流程中,如果对物体的每个像素都做坐标变换或是光照计算等操作,将会导致庞大的计算量,因此在采用三角形拟合物体的算法中,往往仅计算三角形顶点的这些属性,三角形中的点,就又顶点的属性插值而成,由于这项工作将面向每个三角形中的每个像素,运算过程中将需要访问颜色缓存与深度缓存还有纹理贴图数据。这些导致该过程的计算量占图形处理的大部分。如何高效地插值填充三角形内的像素,将显著影响3D图形性能。
扫描光栅算法中,一系列像素是紧挨着的,因此为递推算法和Cache命中提供了天然了方便,然而如何在特定的软硬件平台下充分利用这些特性来取得高性能,需要细致研究。
3.1.5 纹理贴图
物体的纹理包括表现其表面光学属性的颜色纹理,以及表现其表面围观几何形状的几何纹理。纹理主要使用图像、函数或其他数据来改变物体表面的外观细节。很多时候,物体的细节并不需要通过几何建模来精确实现,采用纹理贴图的方式能快速高且真实感地实现这一点。但纹理的使用包含多个关键技术。坐标经过透视变换后,物体各个像素的属性与屏幕坐标之间就不再是线性的关系,由于扫描光栅过程中,三角形中像素的纹理坐标是通过插值得出的,在透视变换后,这种插值的结果将产生失真,需要特定算法进行矫正。为了防止纹理采样时的混叠现象发生,纹理采样通常需要进行多点采样并滤波得出最终结果。为了提高效率,当物体离观察者越近越大时,采用高分辨率的纹理图像,而越远越小时,则采用低分辨率的纹理图像。
3.2 图形绘制系统硬件结构
3D图形处理领域早期采用全硬件的电路来依次实现图形绘制流水线中的各个阶段。尽管全硬件的结构使得性能和效率都非常高,但灵活性则大大损失。即使在同一个硬件平台上,不同的应用程序,不同的3D场景,都有各自不同的特点。绘制这些不同的场景,通常在不同的阶段有不同的负荷,有时需要采用不同侧重的算法。这些都是固定结构硬件无法实现的。
随着半导体工艺的进步,同样的面积和功耗下,能够实现更多更复杂的系统。因此,基于可编程处理器的3D图形绘制系统被广泛采用,通过编写程序来实现3D绘制中的许多功能,这虽然牺牲了一些性能,但在灵活性上换回得效果使这种方案更具性价比。但特定的算法,例如纹理滤波、颜色混合等计算任务的硬件性能高出软件许多倍,因此仍保留使用硬件实现。
本课题组采用这种可编程处理器,配合固定功能硬件的架构来实现3D图形系统。
3.2.1 顶层结构
图3.2.1 图形处理器系统顶层
3D图形处理器包含一个可编程的顶点处理器及一个基于Tile绘制方法的光栅单元。为保留采用多个图形处理器的方案,系统采用基于SOPC的Nios嵌入式软核作为整个系统的控制中枢,与1到多个图形处理器构成异构片上多核系统,对以后可能将实现的指令发射,控制计算解耦合等技术留下空间。单个图形处理器中除了顶点处理器及光栅器外还包含一个总线接口、一个DMA、一个DDR2控制器、一个指令Cache和一个纹理Cache。系统的外围,包括VGA控制器,用户输入等人机交互接口和Flash控制器,风扇控制器,测温控制器等外设IO。
3.2.2 顶点处理器结构
图3.2.2 可编程顶点处理器结构
面向移动设备的3D图形处理器对效率的苛求远远大于桌面系统,目前许多商用嵌入式图形处理器IP都直接采用片上指令存储器,对于指令的效率相当敏感。本设计没有采用高位宽的指令集,而是将指令格式控制在32位。并通过设置特殊状态寄存器来辅助指令实现更灵活更丰富的操作,包括操作数的预处理和后处理、矢量运算的控制、同步控制等。
顶点处理器支持定点、单精度浮点、特殊函数运算、矢量运算。包含8级流水线及数据相关旁路器。支持1D-4D灵活的SIMD。其中,特殊函数运算,由多项式分段查表拟合的方式实现,支持倒数、平方根、对数、指数等。
顶点处理器指令集中可寻址的包含1个标量寄存器入口、1个矢量寄存器入口、1个参数寄存器入口及1个特殊状态寄存器入口。
3.2.3 光栅器结构
光栅单元的输入为三角形的顶点属性,包含坐标、光照强度、颜色、纹理坐标等。输出为需要显示到屏幕上的像素。
由于3D图形中,三角形内的像素个数远远多余三个顶点,且光栅单元在计算像素时,需要多次访问存储器,包括单个或多个纹理存储区、深度存储区、颜色存储区。对外部存储器带宽要求极大,而面向移动设备的3D图形处理器仅允许很小的外部带宽。为解决这种矛盾。本课题组采用基于Tile绘制方式的光栅单元。
在基于Tile的绘制方式中,将屏幕分割成诸多称为Tile的小区域,逐个绘制这些小区域。具体的过程为:首先将所有三角形归属到各自的Tile中,依次遍历每个Tile,每个Tile中依次遍历所有三角形,将该Tile的深度缓存、颜色缓存都置于片内存储器中,以此获得显著提升的带宽。绘制完每个Tile后,将该Tile的深度缓存及颜色缓存存入片外存储器,再载入下一个Tile的深度及颜色缓存。
在每个Tile中又进一步分割成多个Block,在光栅的第一个阶段,判断三角形覆盖哪些Block,再判断这些Block中的每个像素是否在三角形内,筛选出三角形内的点后,根据该点在三角形中的位置,由三个顶点的属性对其进行加权插值,得出的深度、颜色、纹理等属性经深度测试、纹理贴图、颜色混合后,最终进入颜色缓存。 |