logo资料库

论文研究-基于CUDA的直接体绘制算法的研究 .pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
中国科技论文在线 http://www.paper.edu.cn 基于 CUDA 的直接体绘制算法的研究 杨久莉1,郭静1,闫锋2* (1. 中国矿业大学(北京)计算机系,北京 100083; 2. 合肥工业大学计算机与信息学院 VCC 研究室,合肥 230009) 摘要:直接体绘制(Direct Volume Rendering, DVR)是科学计算可视化的重要研究内容,传 统的直接体绘制技术渲染速度慢、交互性差。近年来计算机图形硬件性能不断提高,利用图 形硬件加速直接体绘制成为研究的热点。CUDA(统一计算设备架构)提供了一种简单易用的 开发环境,可利用图形处理器并行地进行计算。本文在讨论了直接体绘制的基本原理的基础 上,介绍了一种基于 CUDA 的直接体绘制生成算法,大大提高了渲染速度。 关键词: 直接体绘制;CUDA;光线投射法;GPU 中图分类号:TP391.41 The research of direct volume rendering based on CUDA (1. China University of Mining and Technology , Beijing 100083; 2. VCC Division, School of Computer and Information, Hefei University of Technology, Hefei Yang Jiuli1, Guo Jing1, Yanfeng2 230009) Abstract: Direct Volume Rendering is an important research content in Scientific Visualization, the traditional direct volume rendering render slowly and interact poorly. With the development of hardware ,The research of Direct Volume Rendering that use graphics hardware to accelerate render become the research hotspot CUDA provides a simple and easy development environment ,which can be used to calculate parallel graphics processors. This paper discusses the basic principles of direct volume rendering ,it is also discusses algorithm of Direct Volume Rendering based on CUDA ,which improved greatly rendering speed. Key words: Direct Volume Rendering; CUDA; Ray Casting ; GPU 0 引言 直接体绘制[1]是科学计算可视化的重要研究内容。它直接由三维数据产生屏幕上的二维 图像而不构造中间几何图元,它是利用原始数据的重采样和图像合成显示整个数据场。直接 体绘制技术能够产生三维数据场的整体图像,能有效地反映整个原始数据场的信息,显示数 据场中细微和难以定义的特征,而且图像质量高、便于并行处理,因此在可视化系统中被广 泛采用。 实际上,体数据一般比较大,利用直接体绘制方法在传统图形硬件上绘制时存在计算量 大、实时、交互性差等问题。如何进行实时、交互式的体绘制,一直是该领域的研究热点。 为了实现体数据的快速、实时绘制,人们提出了多种加速体绘制的算法。这些改进的体绘制 加速方法主要分为五类:算法优化、细节控制与逐步求精显示技术、专用体绘制硬件、利用 图形硬件加速体绘制与并行体绘制[2]。 随着可编程图形硬件[3[4]出现以后,人们开始研究利用现有可编程图形硬件对体数据直 接进行绘制。1994 年以来,随着三维纹理硬件的出现,利用可编程图形硬件的纹理系统加 速体绘制已经成为目前通用计算机上最快的体绘制算法。三维纹理映射的体绘制将传统的算 作者简介:杨久莉(1983),女,研究生,计算机图形图像处理. E-mail: yangjiuli@gmail.com - 1 -
中国科技论文在线 http://www.paper.edu.cn 法通过可编程 GPU 实现,从固定管线转移到可编程管线,使纹理映射在较小的计算开销下丰 富了场景的细节,大大提高了绘制速度。 2007 年 07 月,NVIDIA 公司推出了新一代显示芯片 GeForce 8800GTX,并在显示芯片上 推出一种通用并行计算架构 CUDA(Compute Unified Device Architecture)。CUDA 是一种并 行编程模型和软硬件架构,它在 GPU 上发放和管理数据并完成并行计算。所以,基于 CUDA 开发不仅能利用 GPU 的硬件加速功能,还能采用并行化的方法并行的处理体绘制时各条光线 的计算,大大提高了直接体绘制的渲染速度。因此本文讨论了基于 CUDA 的直接体绘制算法 的实现 1 开发环境 在 2006 年底 Nvidia 公司发布了新一代 GPU 芯片 GeForce 8800,提出了一种新的 GPGPU 方式 CUDA。CUDA(Compute Unified Device Architecture,计算机统一设备架构)是一种新的 处理和管理 GPU 计算的硬件和软件架构,它将 GPU 视作一个数据并行计算没备,并且无需 把这些计算映射到图形 API[7]。CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言作为 基础,写出在显示芯片上执行的程序,且无须程序开发人员掌握大量的图形学知识,利用操 作系统的多任务机制管理多个并发运行的图形应用程序对 GPU 进行访问,可最大限度的发 挥出 GPU 的并行计算能力[8]。 2 基于 CUDA 的直接体绘制算法实现 2.1 直接体绘制原理 三维数据场是一个充满微小粒子的空间,每个粒子是不透明的,对光线的传输有阻挡作 用,但他们本身又非常小,是不可见的[9]。这些粒子具有发光、吸收、反射等功能使光线在 通过三维数据场时发生了变化。光线吸收模型是其中常用的一种模型,光线吸收模型中认为 粒子吸收部分射向他们的光线,而不存在发射、反射光线等特性。这种光学模型适合于 CT 及 MRI 扫描数据的可视化。本文数据即是基于光学模型。 直接体绘制算法按照绘制顺序可以分为三种方法:物体空间扫描方法(如体元投射法 [10])、图像空间扫描方法(如光线投射法[11]) ,和频域空间方法。 光线投射法的生成过程是光线衰减的过程,这个过程符合光学吸收模型规律,光线的衰 减过程可用表达式 = I 0 0 t )( dt ) sI )( exp( 描述,其中: s ∫− τ s 为光学投射方向的长度参数, I s 为距离 s 处的光学强度, ( ) )(tτ 是光线强度的衰减系数,即沿光线投射方向t 处的光线吸收率, 0I 是光线进入三维数据场时的光线强度。 光线投射法的生成是一个模拟光线穿透体元,经过衰减和吸收后投影到成像平面后累加 的过程。它的生成过程如图 1 所示,基本可以分为五个步骤: (1) 建立一个三维体素矩阵。 (2) 沿光源向三维体素矩阵发射出若干条投影线。 (3) 获得每条投影线通过此体素矩阵的交点,将这些点的电子密度值累加。 (4) 求投影线通过体素矩阵的有效射线长度。 (5) 将电子密度累加值与射线长度相乘,求出的值按灰度显示即可实现直接体绘制。 - 2 -
中国科技论文在线 http://www.paper.edu.cn 图 1 直接体绘制生成过程 Fig.1 generating process of Direct Volume Rendering 2.2 算法关键问题 前面已经介绍过 CUDA 的软件和硬件架构,以及其编程模型。CUDA 编写的程序分为 CPU 上程序段和 GPU 上程序段两部分。CPU 主要负责数据的存储交换,包括两部分:一是把读入 的数据从 CPU 存储到 GPU 上,作为 GPU 上程序段的输入数据,二是把经过 GPU 处理的数据从 GPU 转存到 CPU 上。CPU 和 GPU 数据交换通过 PCIExpress*16(双向 4GB/s),速度比较慢, 所以应尽量减少频繁的数据交换,交换数据时,应大块进行。下面介绍数字重建放射影像在 GPU 上生成的一些关键问题。 2.2.1 线程分配 编写 CUDA 程序所用的显卡为 GeForce 9300,支持的最大线程数是 512,而每个网格具 有的最大线程块数是 512*128-1=65535,因此在划分线程时首先要考虑这个限制。其次,、 还要考虑投影空间图像的大小,以目前的医学图像分辨率情况,GeForce 9300 完全支持采 用每个线程在一条光线路径上进行计算。另外,体数据的规模决定了全局存储器的大小和计 算时间,因此也必须考虑在列。 考虑上述限制后,在分配线程时,就应主要考虑性能的提升,分解的粒度对计算效率影 响巨大。事实上,在硬件层次,多处理器并非严格按照 CUDA 的编程模型进行运算,故合乎 编程模型的线程分配方案未必能充分的发挥 GPU 的并行计算能力。为此,Nvidia 公司提供 了计算工具 CUDA Occupancy Calculator,当线程块和线程数量分配方案确定下来时,该工 具可以计算 GPU 运算时多处理器占据整个 GPU 计算资源的百分比,并确定该比率随线程数量 的变化曲线,由此我们可以得知 GPU 处于最佳工作性能时的网格和线程块规模。通常情况下, 其规模与计算性能之间并没有简单的线性关系。 根据以上原因,我们针对实际情况制定了静态的分配方案。本文方法的数据源是医学 CT 影像。事实上,常见的医学图像分辨率只有几种,一般为 256*256,512*512。而 GPU 也 相对稳定,所以静态的分配方案完全可以满足实际需要。针对不超过 500 张的分辨率为 512*512 的 CT 序列图像,分配网格大小为 32*32,线程块大小为 16*16,投影图像的最小单 位是像素,因此这样就可以用一个线程来进行一条光线路径上的计算。 - 3 -
中国科技论文在线 2.2.2 线程映射 http://www.paper.edu.cn 在 GPU 上如何进行并行光线投射计算是算法的关键步骤。为了能在 GPU 上进行计算,需 要在读入体数据之后,把体数据转存为 3D 纹理,并存储到全局存储器中。前面确定网格块 和线程块之后,需要进行如下计算: a) 确定线程的 ID index 的计算根据 block index 和 block index 来计算,计算公式为:index = (block index) * (block size) + (thread index); b) 确定光线位置 这里视方向是垂直于 XOY 平面的,所以只需要计算光线的 X 方向和 Y 方向,他们的可用 下面公式计算: iRayPosition.x = iBlockSizeX * blockIdx.x + threadIdx.x; iRayPosition.y = iBlockSizeY * blockIdx.y + threadIdx.y; c) 光线与体数据求交 这里采用了一些简化计算,设定体数据和坐标轴同方向,然后通过向量运算,求出交点。 2.3 基于 CUDA 的算法实现 在介绍了使用 CUDA 实现直接体绘制的关键问题之后,如图 2 所示给出了基于 CUDA 实现算法的整体流程,主要步骤如下: (1) 读取体数据,并从 CPU 上存储到 GPU 端的全局存储器; (2) 体数据绑定到 3D 纹理,作为纹理用于后续计算; (3) 根据体数据分配线程,确定 Grid、Block 大小; (4) 根据图像的分辨率,每条光线进行并行计算; (5) 确定光线位置; (6) 沿光线方向判断是否与体数据相交,如果相交转到 g 步骤,如果不相交,则转到 l 步骤; (7) 计算光线与体数据的交点位置,包括起点和终点; (8) 一条光线与体数据可能有若干个交点,按照步长从后向前顺序遍历,求与体数据的交点 位置; (9) 计算交点的颜色值,通过交点位置找到 3D 纹理确定其颜色值; (10) 对这条光线上的颜色值进行合成计算; (11) 判断光线的位置,如果光线到起点位置,则转到 l 步骤,如果光线未到起点位置,转到 i 步骤; (12) 数据存储到输出数组对应的全局存储器; (13) 传给 CPU 端用 OpenGL 绘制最终图像; 图 2 是基于 CUDA 的直接体绘制算法流程图 - 4 -
中国科技论文在线 http://www.paper.edu.cn 图 2 基于 CUDA 的直接体绘制算法流程图 Fig.2 The flow diagram of direct volume rendering based on CUD 如下图 3 所示,是本文算法生成的图像。 图 3 本文算法生成图像 Fig.3 generated picture from algorithm of this paper 3 结论 直接体绘制是一种非常重要的可视化方法,在医学、地质勘探等领域具有广泛应用。本 文通过分析直接体绘制的基本原理及实现过程,结合 CUDA 的硬件加速和并行计算功能,实 - 5 -
中国科技论文在线 http://www.paper.edu.cn 现了硬件加速的直接体绘制算法。实验结果表明该算法能够很好的提升图像的生成速度。但 是,基于 CUDA 生成的直接体绘制图像并不能改进图像效果,直接体绘制效果的好坏非常重 要,如何提高直接体绘制的显示效果将是本文深入开展的下一步工作。 [参考文献] (References) [1] 唐泽圣等. 三维数据场可视化[M]. 北京:清华大学出版社,1999. [2] 薛晔. 三维空间体数据的任意裁减技术及其应用研究[D]. 硕士学位论文.合肥工业大学.2008. [3] Levory M. Volume Rendering by Adaptive Refinement[J]. The Visual Computer,1990, 6(1):2~7 [4] Sobierajski L M, Avila R S. A hardware acceleration method for volumetric ray tracing[A]. ACM. Proceedings of the 6th conference on Visualization '95[C]. Washington, DC, USA:IEEE Computer Society, 1995.27~34. [5] Eckel G. OpenGL Volumizer Programmer's Guide[M]. San Jose:SGI Developer Bookshelf, 1998. [6] Microsoft.Microsoft Cooperation DirectX 9.0 SDK [OL]. [2002-12-19].http://www.microsoft.com/ downloads/details.aspx?familyid=124552FF-8363-47FD-8F3B-36C226E04C85&displaylang=en. [7] NVIDIA.NVIDIA_CUDA_Programming_Guide_1.1[OL]. [2007]. http://www.netyi.net/Book/c8d5f704-c300-4e05-a0cb-c1d7e7703712.htm [8] 张舒, 褚艳利, 赵开勇等. GPU 高效能运算之 CUDA[M]. 中国水利水电出版社,2009. [9] Blinn F. Light reflection functions for simulation of clouds and dusty surfaces[J]. Computer Graphics(ACM SIGGRAPH 82), 1982, 21~29. [10] Wilhelms J, VanGelder V. A coherent projection approach for direct volume rendering[A]. ACM SIGGRAPH Computer Graphics[C]. New York, NY, USA: ACM, 1991, 25(4):275~284. [11] Levoy M. Display of Surfaces from Volume Data[J]. IEEE Computer Graphics and Applications,1988, 8(3):29~37. - 6 -
分享到:
收藏