使用可编程图形硬件加速的纹理体绘制算法

时间:2021-01-31 04:05:29
       一、可编程图形硬件与Cg着色语言        随着计算机技术和集成电路技术的发展,图形硬件的更新速度很快。最新的图形硬件其内部的高并行结构和流处理计算模式,使其具有高浮点运算速度及数据传输带宽,极大地提高了计算机图形处理速度和图形绘制质量。图形硬件迅速发展带来高处理速度的同时,还产生了很多全新的图形硬件技术,一个最主要的突破就是在图形硬件中引入可编程功能,此功能允许用户编制自定义的着色程序来替换原来固定图形渲染管线中的某些模块,极大地扩展了图形处理器的能力和应用范围。下图为一个最基本的可编程图形硬件 (GPU) 的框架,其中阴影模块代表可编程模块。                           使用可编程图形硬件加速的纹理体绘制算法
从上图可以看出,相比传统计算机图形硬件,可编程图形硬件在顶点处理阶段上,引入了可编程顶点处理器(Programmable Vertex Processor)又称顶点着色器处理每个顶点,用户可以通过自己编写代码实现特殊的顶点变换算法或专门的光照模型。经过光栅化后,在像素处理阶段,引入可编程片元处理器 (Programmable Fragment Processor)又称片元着色器对每个片元独立的进行颜色计算,算法由用户自己编写,不但灵活性好,而且可以获得更好的渲染效果。       使用类似于C的高级语言对GPU直接编程一直是图形界努力追求的目标,为了能够直接操作可编程顶点处理器及可编程片元处理器,研究人员开发了多种高级着色语言。主要有微软提出的HLSL,针对于Direct3D编程;OpenGL架构评审委员会提出的GLSL,针对于OpenGL编程;以及由Nvidia公司提出的Cg语言。本文基于GPU编程实现的算法皆由Cg语言编写。占位Cg语言的语法源于C语言,这也是该语言 (C for graphics)名字的由来。Cg同时被OpenGLDirect3D两种图形API所支持,是一种具有良好兼容性及跨平台性的可编程图形硬件高级语言。Cg语言的语法结构与C语言非常类似,但Cg语言为了支持图形编程作了特别的修改和优化,一方面添加了向量作为数据类型,另一方面内建了数学、几何和纹理映射等很多常用的图形运算函数及算法。编写Cg语言需要分别编写顶点程序和片元程序,运行在顶点处理器上的程序称为顶点着色程序,相应的运行在片元处理器上的程序称为片元着色程序,顶点着色程序主要进行几何方面运算,而片元着色程序主要针对最终颜色值进行计算。应用程序运行Cg程序首先通过Cg编译器将Cg程序编译成OpenGL或者Direct3D图形API所接受的形式,然后应用程序使用适当的命令将编译后的Cg程序传递给图形处理器,由OpenGLDirect3D驱动程序最后把它翻译成图形处理器所需要的硬件可执行代码,最终实现图形的实时渲染与加速绘制。       二、体绘制算法概述空格体绘制是一种重要的三维数据场可视化技术,它不需要生成中间几何图元,直接将三维数据场转换为二维图像,利用该技术对三维数据场成像,能够反映数据场内部特征信息,该算法广泛应用在科学计算、工程计算、医学扫描等数据的可视化中。通常分为基于像空间的绘制(光线投射法)、基于物空间的绘制(足迹表法、错切- 变形法)和基于纹理映射的方法。彩蛋为了获得实时高质量的体绘制结果,基于图形硬件纹理映射的体绘制方法已成为目前研究热点。根据纹理数据的表示类型,基于图形硬件纹理映射的体绘制方法可分为两类,一类是基于二维纹理映射的体绘制方法,该方法实现简单,但绘制效果不理想,占用显存空间较多;另一类是基于三维纹理映射的体绘制方法,该方法以三维纹理的形式存放体数据,并根据当前的视线方向对体数据进行采样,动态生成纹理切片,虽然实现复杂,但能够较好地可视化体数据场。同时,随着可编程图形硬件的迅速发展,显存容量日益增大,使得中小规模甚至大规模的体数据可以一次性地以三维纹理形式装入显存,避免了由于显存过小而将体数据进行分块造成的系统主存到纹理内存之间的数据传输所导致的绘制效率下降问题。因此,利用图形硬件的三维纹理映射功能进行体绘制是当前最为高效的体绘制方法,本文所涉及的三维数据场体绘制技术均采用三维纹理体绘制方法。       、三维纹理体绘制算法空格基于三维纹理映射的体绘制方法首先由Cabral实现,其利用了高端图形工作站中的三维纹理映射特性,最早只能在专用的图形工作站上使用,随着PC机的不断发展,越来越多的通用图形硬件开始支持三维纹理映射功能,使该方法大大拓展了应用领域,推动体绘制研究的不断深入发展。                                               使用可编程图形硬件加速的纹理体绘制算法       彩蛋三维纹理映射体绘制从体数据中采样出一组与视平面平行的数据,利用这些数据信息来生成最终的图像。如上图所示,一般可分为三维纹理创建、面片绘制、纹理映射及面片混合等步骤。首先将体数据装载到系统内存,经预处理后将数据转换为显卡支持的纹理数据格式,生成三维纹理;然后定义一系列相互平行且与视线方向垂直的面片,同时通过图形硬件插值功能实现对体数据的采样;最后混合纹理映射后的面片生成最终结果图像。在绘制过程中,图形硬件起着决定性的作用,它担负着对体数据插值操作和采样混合的全过程,由于图形硬件强大的并行处理优势,使得基于纹理映射的体绘制具有很快的交互速度。下图为引擎三维数据纹理体绘制结果图,数据大小为256×256×128。组图中第一排为普通绘制结果,第二排为增加光照效果后引擎绘制结果。实验环境为普通pc机,显示窗口设置为400×400,绘制速度大于25帧/秒,完全满足交互式实时绘制需求。
                                          使用可编程图形硬件加速的纹理体绘制算法  使用可编程图形硬件加速的纹理体绘制算法
                                          使用可编程图形硬件加速的纹理体绘制算法  使用可编程图形硬件加速的纹理体绘制算法


参考文献:[1]  唐泽圣. 三维数据场可视化. 清华大学出版社,1999.[2]  Tomes Akenine-Moller, Eric-Haines. 实时计算机图形学 , 普建涛译. 北京大学出版社 , 2004.[3]  NVIDIA Corporation. Cg Toolkit User’s Manual. http://developer.nvidia.com/Cg.[4]  Randi J. Rost. OpenGL 着色语言, 天宏工作室译 . 人民邮电出版社 , 2006.[5]  Levoy M. Display of Surfaces from Volume Data. IEEE Computer Graphics and Application, 1988, 8(3) :   29-37.[6]  Westover L. Footprint Evaluation for Volume Rendering. Computer Graphics, 1990, 24(4) : 367-376.[7]  Lacroute P, Levoy M. Fast Volume Rendering Using a Shear-Warp Factorization of the Viewing Transformation. Computer Graphics Proceedings, 1994, 28(4) : 451-459.[8]  Cullip T, Neumann U. Accelerated Volume Reconstruction with 3D Texture Mapping Hardware. Carolina : University of North Carolina, 1993.[9]  Cabral B, Cam N, Foran J. Accelerated Volume Rendering and Tomographic Reconstruction Using Texture Mapping Hardware. Proceeding of ACM Symposium on Volume Visualization, Washington, 1994 : 91-98.