CN1655191A - 基于可编程图形硬件的多边形网格模型的快速体素化方法 - Google Patents

基于可编程图形硬件的多边形网格模型的快速体素化方法 Download PDF

Info

Publication number
CN1655191A
CN1655191A CNA2005100491381A CN200510049138A CN1655191A CN 1655191 A CN1655191 A CN 1655191A CN A2005100491381 A CNA2005100491381 A CN A2005100491381A CN 200510049138 A CN200510049138 A CN 200510049138A CN 1655191 A CN1655191 A CN 1655191A
Authority
CN
China
Prior art keywords
texture
voxelization
voxel
polygon
graphics
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2005100491381A
Other languages
English (en)
Inventor
陈为
张龙
鲍虎军
彭群生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CNA2005100491381A priority Critical patent/CN1655191A/zh
Publication of CN1655191A publication Critical patent/CN1655191A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

本发明旨在提供一种基于可编程图形硬件的多边形网格模型的快速体素化方法。本发明提供的基于可编程图形硬件的多边形模型的快速体素化方法包括:设置恰当的变换矩阵,将多边形模型体素化区域映射为视见体,向x、y、z三个坐标轴方向之一做正交投影,使在光栅化阶段产生的每一个片元对应于目标体模型的一个体素;利用可编程的图形硬件在像素着色器中进行编码变换、绘制纹理和颜色混合,将多边形模型体素化区域的三个有向纹理合成到一个纹理单元中,并储存于最终帧缓冲器中。该方法可以处理任意形状的几何模型,运算速度大幅提高,消耗的存储空间更小。

Description

基于可编程图形硬件的多边形网格模型的快速体素化方法
技术领域
本发明涉及计算机系统,特别涉及一种基于可编程图形硬件的多边形网格模型的快速体素化方法。
背景技术
计算机图形学(computer graphics)是对大干世界建立数学模型,用计算机计算光影效果并在显示设备上显示图像的一门学科,是影视特技、广告动画制作、三维游戏、军事仿真、医学训练与诊治中的核心技术。多边形网格模型是计算机图形学中描述物体的最常用的表示方式,其本质是对物体表面属性的描述,如空间位置、局部朝向、局部颜色等。多边形网格模型由三维笛卡尔坐标系中的一系列平面多边形组成,每个多边形由一系列顶点连接而成,每个顶点记录位置、法向、材质、纹理坐标等属性,绝大多数顶点被多个多边形共享。基于多边形表示的图形学又被称为面图形学(surface graphics)。图1是一个典型的多边形网格模型,图2是它的面绘制效果图。
计算机图形学中的一个重要分支是体图形学(volume graphics),它兴起于20世纪90年代,与面图形学不同,它的基本表示单元是体素(voxel),每个体素代表三维空间中的一个小立方体区域,它记录物体在该立方体区域中的平均属性。由三维空间中沿x,y,z轴均匀分布的三维体素阵列组成的模型称为体模型,体模型在x,y,z轴方向的小立方体的数目称为体模型的分辨率(volumeresolution)。若体模型在三个方向的小立方体的数目分别为nx,ny,nz,则称体模型的分辨率为nx×ny×nz。图3展示了图1左对应的体模型。基于体素的体模型表示提供了一种统一、简单和健壮的描述、存储、操纵物体的方式,构成了体图形学的基础,是传统的基于面(多边形)的几何表示的一种有力补充。
为了将多边形网格模型表示转换为体模型表示,需要一个称为体素化的过程。体素化指在某个指定的体素化兴趣区域(ROI:region of interest)内,将连续的基于多边形表示的几何模型转换为三维空间中的一系列离散体素,这些体素尽可能地逼近原来的模型。其中,体素化的兴趣区域,简称体素化区域,是目标体模型(即体素化产生的体模型)的空间包围盒。如果要对整个多边形网格模型进行体素化,那么体素化区域的一个自然选择就是多边形网格模型的包围盒。体素化区域也可以由用户任意指定,但是,只有位于体素化区域内的部分多边形才会被体素化。依据不同的分类标准,体素化有不同的分类方法。按照体素记录的信息种类,体素化可以分为二值体素化(binary voxelization)与多值体素化(multi-valued voxelization)。二值体素化指每个体素只有0和1两种状态,分别表示多边形网格模型不经过(经过)该体素代表的立方体区域。多值体素化指每个体素包含多种状态,通常是用一个或多个整数或浮点数记录多边形网格模型在体素所代表的立方体区域内的平均属性,例如颜色、法向、纹理坐标等。根据是否处理多边形网格模型的内部,体素化可以分为表面体素化(surface voxelization)及实体体素化(solid voxelization)两种。表面体素化指仅对多边形网格模型的表面,即所有多边形进行体素化;实体体素化指要对多边形网格模型的内部进行填充并产生相应的体素。
体素化是面图形学和体图形学之间的桥梁,在体建模、医学仿真、触觉模拟、工程碰撞检测等领域发挥重要作用。20世纪90年代,对于体素化的研究关注于它的基础理论、健壮性和精度。但是,将体素化应用到许多对实时性要求高的场合时,如计算机辅助外科手术、触觉模拟和碰撞检测等,体素化的速度至关重要。体素化需要逐个处理多边形,整个过程非常耗时,传统的体素化方法在处理大规模的或可变形的多边形网格模型时效率很低,远不能达到实时。
事实上,许多计算机系统中都提供了专门的图形处理加速硬件,简称图形硬件(graphics hardware)。这类硬件通常针对计算机图形学领域的许多算法做了专门的优化设计,具有很强的浮点运算、向量运算及矩阵运算的能力。基于图形硬件实现的图形算法通常比在CPU中实现的算法(也称为基于软件实现)的算法效率更高、速度更快。在20世纪90年代中期以前,只有大型机、小型机以及图形工作站中才配备专门的图形硬件,到了90年代中后期,个人电脑(即PC机)上也出现了类似的图形硬件。目前,市面上出售的绝大多数个人电脑都配备了专门的图形硬件。本发明的算法正是专门针对这种廉价而普及的图形硬件设计,因而具有较强的通用性。如无特别声明,下文中的“图形硬件”均指个人电脑上的图形硬件。
在个人电脑中,图形硬件建造在显示适配器上。显示适配器,也称显示卡或显卡,是个人电脑中的一块子卡。如图4所示,显卡主要由图形处理单元(GPU)、局部存储器(Local memory)以及接口电路等几个部分组成。其中,图形处理单元就是个人电脑中的图形硬件。它是一块类似中央处理器(CPU)的芯片,负责执行图形算法中用到的各种运算。注意,如前所述,20世纪90年代中期以前,显卡上并没有图形处理单元,处理图形操作时用到的各种运算都是在中央处理器中进行计算的。目前在售的大部分显卡都包含图形处理单元,并且随着显卡工业技术的不断进步,图形处理单元的计算能力及功能都在不断发展。局部存储器,又称显示存储器(video memory)或显存,是固化在显卡中的存储设备,它与图形处理单元通讯的速度远远高于内存(host memory)与图形处理单元通讯的速度。对效率要求较高的场合,应当尽可能将图形处理单元需要用到的数据存储在显存中。接口电路控制显卡与系统总线之间数据的通讯并控制显示设备显示图像。目前的个人电脑普遍采用专门的加速图形接口(AGP)。这种接口的一个显著特点就是传输速度的不对称性,即从内存向显存传输(写入)速度较快,而从显存向内存传输(读出)速度很慢。
与中央处理器的一个显著区别是:图形处理单元专门针对三角网格模型(triangle mesh)的绘制进行设计,它的操作遵循一个固定的模式,通常称之为图形流水线(graphics pipeline)。其中,三角网格模型是多边形网格模型的一种特例,它其中的每一个多边形都是三角形。
图5演示了图形流水线的主要步骤。图形流水线中的第一个操作称之为“网格化”(tessellation)。它将输入的各种模型,如多边形网格模型、非均匀有理B样条曲面(NURBS)等依据一定的规则转化为三角网格模型以待后续处理。第二步是对得到的三角网格的每一个顶点,执行一系列的操作。每一个顶点执行的操作都相同,这一设计有利于实现顶点操作的并行处理。最主要的顶点操作是坐标变换(图6),它将三角形的顶点坐标由局部坐标系变换到窗口坐标系,相应地将空间中的各个三角形变换到显示屏幕中的相应位置。通过操纵坐标变换,可以在场景中任意地变换景物的位置并得到从各个角度进行观察的图像。坐标变换通常包括世界、相机变换(world-view transform)、投影变换(projectiontransform)及视口变换(view port transform)等几个步骤。世界、相机变换将每个顶点的坐标由它们各自的局部坐标系变换到相机坐标系。相机坐标系的坐标原点位于相机(或观察者眼睛)所在位置,它的xoy坐标平面平行于成像平面。投影变换将顶点坐标由相机坐标系变换到裁剪坐标系,相应地将三维空间中的景物投影到二维成像平面。与投影变换相关的概念包括近裁剪平面、远裁剪平面、取景窗及视见体(view volume)等。近裁剪平面即成像平面,远裁剪平面与近裁剪平面平行但距离视点较远,取景窗是近裁剪平面上的一个矩形区域。相机位置与取景窗的四条边决定的四个平面与近裁剪平面和远裁剪平面包围出的四棱台体称为视见体,如图8所示。只有位于视见体内部的景物才会对成像造成影响。裁剪坐标系由视见体定义。在裁剪坐标系中,视见体映射为方体[-1,1;-1,1;0,1],从而可以方便地裁剪掉视见体之外的景物。投影变换分为透视投影及正交投影两种。透视投影变换指相机位于有限远处,它会产生景物在近处看起来大、在远处看起来小的透视效果。在追求真实感的图形绘制中通常采用透视投影。正交投影变换指相机位于无穷远处,它的视见体是一个立方体,产生的视线方向互相平行。正交投影变换不产生透视效果,常常在工程图形CAD等不要求视觉上的真实感,而追求精确性的场合下采用。视口变换将顶点坐标由裁剪坐标系变换到窗口坐标系。窗口坐标系的原点位于视口(view port,即屏幕上显示图像的窗口)的左上角,x轴水平向右、y轴垂直向下。窗口坐标系的坐标采用整数值,与离散的像素排列相对应,第i行、第j列的像素的坐标值为(i,j)。根据计算机图形学的基础理论,以上提到的各种坐标变换都可以用一个4×4的满秩矩阵表达,且坐标变换的合成与矩阵的乘法相对应。也就是说,世界、相机变换、投影变换及视口变换分别可以用一个4×4的矩阵表达,并且可以将三个矩阵相乘得到一个表达整个坐标变换的矩阵。
经过顶点操作,空间中的三角形变换到屏幕中的相应位置。图形流水线的下一步操作是对变换后的每个三角形进行扫描转换(scan conversion),即对三角形的内部进行填充,并离散化为一系列的“片元”(fragment)。每个片元都具有与顶点相似的属性,如法向、纹理坐标等,它们的属性值由三角形的三个顶点的属性双线性插值得到。在计算机图形学中,这一步骤称为“光栅化”。
下一个步骤是对光栅化产生的每一个片元执行一系列的操作(图7)。为了实现并行处理,每一个片元的操作都是相同的。片元操作分为两个部分。第一个部分最主要的操作是纹理采样(texture sampling),第二个部分的主要操作包括透明度测试(alpha test)、深度测试(depth test)、颜色混合(alphablending)等。纹理采样是计算机图形学中的一种常用方法,它通过在多边形网格模型的表面与一幅或多幅图像之间建立对应关系来表现景物细节信息。透明度是片元的颜色中的alpha分量。在图形流水线中,颜色由红色分量、绿色分量、蓝色分量及alpha分量组成。红、绿、蓝三个分量分别表示颜色中红色、绿色及蓝色成分的多少,它们组合出各种各样的颜色。透明度,即alpha分量,用来描述物体的透明性,透明度的值越小表示越透明。透明度测试用来测试每一片元的透明度是否满足一定的条件,不满足透明度测试条件的片元将被剔除。最常用的透明度测试条件是透明度大于某一阈值,它将过于透明的片元直接剔除,从而减少计算。深度是片元距离视点的距离,深度越大距离越远。深度测试用来测试每一片元的深度是否满足一定的条件,不满足深度测试条件的片元将被剔除。最常用的深度测试条件是小于“当前深度值”。在窗口坐标系中,所有坐标相同的片元位于同一视线上,深度值越小,距离视点距离越近。“小于当前深度值”的测试条件将同一视线上距离视点最近的片元保留下来,而将其余的所有片元剃除。这样的测试合理地模拟出现实世界中“前面的景物遮挡后面的景物”的自然现象。当前深度值记录了与当前片元坐标相同,即位于同一视线上的片元的最小深度,它保存在显存中一段专用的区域,称为深度缓存(depth buffer)。颜色混合是指将当前片元与帧缓存(frame buffer)中坐标相同的单元的颜色根据某一指定的公式进行叠加,它通常用来实现景物的透明效果。同深度缓存一样,帧缓存也是显存中一段专用的区域,它保存了绘制窗口中每一像素的颜色。在绘制完成之后,帧缓存中的数据通过接口电路传送到显示设备并显示对应的图像。
早期,图形流水线的设计比较固定,操纵图形流水线的唯一方法是通过调用应用程序编程接口(API)中的相应函数,设定流水线中的许多参数。例如,通过设置变换矩阵来控制视点变化、禁止深度测试、激活透明度测试并设置透明度测试函数、激活颜色混合等。近年来,由于显卡工业的进步,出现了更加灵活的图形流水线,应用人员可以通过编程来控制图形流水线的某些部分。习惯上,称这种更加灵活的图形流水线为可编程图形流水线,称支持可编程流水线的图形硬件为可编程图形硬件。相应地,称过去的图形流水线为固定图形流水线。目前,可编程图形流水线支持可编程的部分包括顶点操作与片元操作的第一部分,两部分的程序分别称为顶点着色器(vertex shader)以及像素着色器(pixelshader)。利用可编程图形流水线,可以对顶点及片元进行更加灵活的操作。
体素化是一个类似于三维扫描转换的采样过程。因此,自然想到利用图形流水线部分或全部实现体素化的流程。但是,图形流水线的设计是一个从三维到二维的光栅化过程,它的结果是一个二维图像。而体素化是一个从三维到三维的光栅化过程,需要保存体素化区域中的三维体素阵列。由于图形硬件中保存处理结果的帧缓存、深度缓存等都为二维,因此无法直接保存体素化的结果。这种图形流水线的设计与体素化要求之间的矛盾使得体素化无法直接利用图形硬件加速。
到目前为止,基于图形硬件实现的体素化方法主要有两种。一种方法以多边形网格模型的包围盒的六个面为成像平面,分别进行平行投影并绘制几何模型,绘制后各个成像平面上保留的片元即为体素化结果。这种方法需要绘制模型六次,而且只能处理凸的几何模型,对于拓扑复杂的模型无法生成正确的体素化结果,因而很少被人们所采用。第二个方法称为基于切片(slice-based)的体素化方法,它的基本思想是利用图形硬件将待处理的模型沿某个坐标轴方向(如z轴方向)逐层切片。每个切片是目标体模型的一个二维子体素阵列,它在坐标轴方向占有一定的厚度,切片的层数与体模型在切片方向上的分辨率相等。抽取每个切片的过程是,首先调用图形绘制应用程序接口函数设置两个平行于切片方向的裁剪平面,它们分别对应于该切片在切片方向(如z轴方向)上的包围平面,然后绘制整个模型,再从图形硬件的帧缓存中读出该层切片的值。裁剪平面的设置保证当前切片对应的片元被保存在帧缓存中,而不是最靠近视点的片元。基于切片的体素化方法是迄今为止最好的技术,但存在三个缺陷。第一,它的效率与目标体模型的分辨率呈线性相关,即如果体素化在切片方向的分辨率是N,那么整个多边形网格模型将被必须绘制N次。因此,它的效率随着多边形个数和体分辨率的增加而大幅降低。第二,当每个切片生成后,结果被保存在图形硬件的帧缓存或深度缓存中,要组成最后的三维体模型必须将切片从显存中读到内存。如前所述,由于目前的个人电脑中采用的加速图形接口具有传输速度的不对称性,这一操作的速度非常缓慢。第三,每个像素仅保存一个体素的信息。在帧缓存或深度缓存中,每个像素包含32比特。在实行二值体素化时,使用了实际需要的32倍的显存空间,存储空间的利用效率不高。实验数据表明,在最新的图形硬件平台上,基于切片的体素化方法只能在包含数万个多边形的网格模型、体分辨率为128×128×128的情形下获得满足交互的速度,完成一次体素化约需要100毫秒。
发明内容
本发明的首要目的在于克服现有技术中的不足,提供一种基于可编程图形硬件的多边形网格模型的快速体素化方法。
为了解决上述技术问题,本发明是通过以下技术方案实现的:
在一种计算机系统中,包括图形处理单元、局部存储器、接口电路、中央处理器和用于显示图像的显示设备,所述图形处理单元能够对通过应用程序编程接口接收到的函数调用作出反应,执行图形算法中用到的各种运算,本发明基于可编程图形硬件的多边形模型的快速体素化方法包括:
通过设置恰当的变换矩阵,将多边形模型体素化区域映射为视见体,向x、y、z三个坐标轴方向之一做正交投影,使在光栅化阶段产生的每一个片元对应于目标体模型的一个体素;
利用可编程的图形硬件在像素着色器中对每个片元的深度属性进行指定的运算,在像素着色器中进行编码变换;
利用图形硬件进行绘制纹理,将像素着色器输出的片元编码保存在一个纹理的相应位置;
利用图形硬件进行颜色混合,将多边形模型体素化区域的三个有向纹理合成到一个纹理单元中,并储存于最终帧缓冲器中。
本发明还包括一个预处理过程生成三个高分辨率的二维纹理,分别用于保存多边形网格模型在x、y、z轴方向上体素化后的结果。
本发明所述预处理过程还包括计算所有片元深度对应的颜色值,并存储为显存中深度缓存的一个纹理,使像素着色器只在后续操作中需要一个纹理采样的操作就可以完成体素编码的计算。
本发明所述的光栅化是将多边形向三个坐标轴方向中投影面积最大的方向进行正交投影,并光栅化到对应的离散体素空间。
当像素着色器输出多个坐标相同的片元表示的体素信息时,使用同一个纹理单元记录。
本发明还包括,在绘制每一段的多边形时,设置两个裁剪平面,使对于跨越多段的多边形,只有位于当前段内的部分才被光栅化。
本发明进一步包括纹理的复制,将表示体素信息的纹理作为绘制目标,绘制一个矩形,并在像素着色器中采样保存多边形体素化结果的纹理,直接输出采样颜色值。
与现有技术相比,本发明的有益效果是:
充分利用了最近几年发展起来的图形硬件的可编程性能,主要的体素化步骤均在可编程图形流水线中完成。与已有的两种基于图形硬件的体素化算法相比,该方法具有以下几个主要优点:一、可以处理任意形状的几何模型。无论模型的形状是凸还是凹,无论模型的拓扑如何复杂,使用该方法均能得到正确的体素化结果。二、速度大幅提高。完成体素化仅需对模型的几何数据遍历一次。当分辨率小于等于256×256×256时,对于多边形数量不超过两百万个的多边形网格模型,体素化速度能够达到实时,即完成一次体素化的时间不超过50毫秒。三、消耗的存储空间更小。体素化结果保存在一个高分辨率的纹理中。通过编码,单个纹理单元可以保存多个体素的信息,节省了存储空间。
附图说明
图1左为一个茶壶的多边形网格模型图;
图2为图1中茶壶模型的面绘制效果图;
图3为与图1中模型相对应的体模型表示图;
图4为个人电脑中常见的显卡结构示意图;
图5展示了固定(可编程)图形流水线的主要步骤流程图;
图6展示了固定(可编程)图形流水线中顶点变换图;
图7展示了固定(可编程)图形流水线中片元操作流程图;图8给出了透视投影变换与正交投影变换的比较图;
图9是图3中的茶壶体模型向x坐标轴方向投影得到的的FPGV表示图,体模型的分辨率为256×256×256,各个FPGV的分辨率为2048×2048;
图10是图3中的茶壶体模型向y坐标轴方向投影得到的的FPGV表示图,体模型的分辨率为256×256×256,各个FPGV的分辨率为2048×2048;
图11是图3中的茶壶体模型向z坐标轴方向投影得到的的FPGV表示图,体模型的分辨率为256×256×256,各个FPGV的分辨率为2048×2048;
图12是将图3中的茶壶体模型向x、y、z三个坐标轴方向投影得到的体素化结果进行合成得到的最终体素化结果图。
具体实施方式
参考附图,下面将对本发明进行详细描述。
本发明需要一台配备可编程图形硬件的个人电脑作为硬件平台,目前可使用的应用程序编程接口包括DirectX 9.0及OpenGL 1.5。当前市场上在售的大部分显卡都满足本发明的需求,包括ATI公司的编号为9500及以上的显卡、NVidia公司的编号为5600及以上的显卡等。在以下的叙述中使用DirectX 9.0作为编程接口进行说明。
本发明的技术方案是:通过设置恰当的变换矩阵,将体素化区域映射为视见体,向x、y、z三个坐标轴方向之一做正交投影。这样,在光栅化阶段产生的每一个片元对应于目标体模型的一个体素。利用图形硬件的可编程性能,在像素着色器中对每个片元的深度属性进行指定的数学运算,完成编码转换。使用图形硬件的“绘制到纹理”(render to texture)的功能,将片元的编码保存在一个纹理的相应位置。使用“颜色混合”(alpha blending)的功能,将多个体素的信息保存在一个纹理单元中。
如果仅向一个坐标轴方向作正交投影,体素化的结果会出现较大的误差。例如,与z轴平行的多边形向z轴方向投影,光栅化的结果是一条直线段。为了减少这样的误差,本发明将模型中的每个多边形向x、y、z三个坐标轴方向中投影面积最大的方向投影。三个方向得到的结果分别保存在三个临时纹理中,最后再将三个方向得到的体素化结果进行合成得到最终结果。使用这一方法能有效地减少上述误差。
本发明的具体操作步骤是:
1、预处理:生成三个高分辨率的二维纹理,用于保存多边形网格模型在x、y、z轴方向上体素化后的结果。
2、光栅化:将多边形向三个坐标轴方向中投影面积最大的方向进行正交投影,并光栅化到对应的离散体素空间;
3、体素编码:离散后的每一个片元对应体素化结果中的一个体素。在像素着色器中进行编码,结果分别保存在三个纹理中;
4、数据合成:将三个方向的体素化结果合成得到最终结果。
本发明是一种多边形网格模型的快速体素化算法,该算法的输入是一个多边形网格模型,输出是一个记录体素化结果的二维纹理。其中,每一个纹理单元(texel)的颜色表示一个或多个体素的信息。DirectX 9.0中定义了多种纹理格式。不同的纹理格式,纹理单元的类型、长度各不相同。例如,纹理格式D3DFMT_A8R8G8B8中的每个纹理单元包含4个字节(32个比特),在传统的固定图形流水线中,第一个字节表示透明度信息,后三个字节分别表示红色、绿色及蓝色分量的信息。这种格式共可以表示256种透明度以及256×256×256=12777216种颜色。又如,纹理格式D3DFMT_L8中的每个纹理单元包含1个字节(8个比特),在固定图形流水线中,每个纹理单元可以表示256种亮度的信息。由于可编程图形流水线的引入,编程人员能够对纹理进行非常灵活的操作,可以用纹理表示和记录任何信息,而不局限于传统固定流水线中纹理格式的含义。本发明使用纹理来记录体素信息,使用的纹理格式为D3DFMT_A8R8G8B8,这是满足本发明要求的最佳纹理格式。需要的纹理大小与体素化的模式以及体素化的分辨率有关。例如分辨率为32×32×32的二值体素化,每个体素只有{0,1}两种状态,只需要1个比特表示。由于每个纹理单元的长度为32个比特,每个纹理单元可以表示32个体素的信息,因此可以用一个分辨率为32×32的纹理来记录所有体素的信息。具体而言,可以用坐标为(x,y)的纹理单元来表示坐标为(x,y,0)、(x,y,1)、…、(x,y,31)这32个体素的信息。其中,用红色分量表示z坐标为0-7的8个体素,用绿色分量、蓝色分量以及透明度分量分别表示z坐标为8-15、16-23、24-31的体素。例如,设坐标为(x0,y0)的纹理单元的颜色为(R,G,B,A)=(102,231,25,99),注意到102、231、25、99的二进制表示分别为01100110、11100111、00011001、01100011,该纹理单元表示x、y坐标为(x0,y0),z坐标为1、2、5、6、8、9、10、13、14、15、16、19、20、24、25、29、30的体素值为1,其余体素值为0。再如分辨率为256×256×256的多值体素化,设每个体素需要8个比特表示,那么每个纹理单元只能表示4个体素的信息。注意到256=64×4,可以将分辨率为256×256×256的体素阵列沿z轴方向分为64个子体,每个子体的分辨率为256×256×4。剖分得到的每个子体可以用一个分辨率为256×256的小纹理表示。其中,坐标为(x,y)的纹理单元的红色、绿色、蓝色及透明度分量分别表示坐标为(x,y,0)、(x,y,1)、(x,y,2)、(x,y,3)的体素信息。总共需要64个这样的小纹理才能表示全部的体素信息。为了得到一个统一的表示,将64个分辨率为256×256的小纹理排列为8×8的纹理阵列,并拼合成一个分辨率为2048×2048的大纹理。最终,可以用这个大纹理表示全部的体素信息。这相当于将分辨率为256×256×256的体素阵列“展平”为一个分辨率为2048×2048×4的体素阵列来记录。一般地,设体素化的分辨率为2l×2m×2n,每个体素需要2s个比特表示。考虑到每个纹理单元具有32个比特,每个纹理单元共可以表示25-s个体素的信息,纹理单元的颜色与体素信息的一一对应关系可以由使用者任意定义。共需要2n+s-5个分辨率为2l×2m的小纹理来表示所有的体素信息,它们可以排列成
Figure A20051004913800141
的纹理阵列,并拼成一个分辨率为 的大纹理。排列纹理阵列的规则也可以由使用者任意定义。在以下的说明中,称纹理单元的颜色与体素信息的一一对应关系为体素编码,称排列纹理阵列的规则为排列规则。由于本发明的这种体素表示方法将三维体素据展平到二维纹理中,并将多个体素的信息压缩到一个纹理单元,本发明称这种表示体素信息的纹理为“压缩展平的几何体纹理”(FPGV:Flattened Packed Geometric Volume)。
定义了FPGV的体表示方法,体素化的任务可归结为将多边形网格模型转化为FPGV。在本发明中,这一转化过程是利用可编程图形流水线实现的。在以下的说明中,设体素化区域为[xmin,xmax;ymin,ymax;zmin,zmax],体素化分辨率为2l×2m×2n,每个体素信息需要用2s个比特来表示。
如前所述,为了减少体素化时因正交投影而导致的误差,需要将多边形网格模型中的每个多边形向它投影面积最大的坐标轴方向投影。为此,首先要找出模型中的每一个多边形的投影面积最大的坐标轴方向。具体而言,设p1p2...pn是输入模型中的一个多边形,它的法向n=(nx,ny,nz)由它的顶点位置计算得到,如果|nx|≥|ny|且|nx|≥|nz|那么该多边形沿x轴方向投影面积最大,否则如果|ny|≥|nz|且|ny|≥|nx|那么该多边形沿y轴方向投影面积最大,否则该多边形沿z轴方向投影面积最大。上述步骤事实上将输入模型中的所有多边形分成了三组,依据投影面积最大的坐标轴方向,不妨分别称它们为x组、y组及z组。
接下来的体素化步骤对三组多边形分别进行。首先需要将三组多边形分别在相应的坐标轴方向上进行分段。根据前面的说明,x组、y组及z组中的多边形,分别需要分为2l+s-5、2m+s-5及2n+s-5段。多边形的分段是通过顶点的分段来完成的。设在选择的投影方向上,多边形p1p2...pn的顶点pi位于第ci段,并设 min i = 1 . . n c i = c min , max i = 1 . . n c i = c max . 则该多边形属于第cmin、cmin+1、...、cmax这几段。跨越多段的多边形在体素化时需要处理多次,但是对于复杂的模型,大部分的多边形仅属于一段。经过上述操作,模型中的多边形分为了2l+s-5+2m+s-5+2n+s-5段。以上对多边形进行分组的两个步骤是在中央处理器中完成的,需要的时间与多边形网格模型的规模,即多边形的个数成正比。但是,对于一个固定的多边形网格模型,这两个步骤只需进行一次。事实上,这两个步骤属于本发明的预处理操作。本发明的预处理还包括建立各种查找表纹理及代理几何等,将在后文详述。
在任意一个坐标轴方向上,体素化是逐段完成的。经过预处理,每一段的多边形的体素化结果可以用一个与投影方向的分辨率相同的小纹理保存。x组中每一段的多边形的体素化结果可以用一个分辨率为2m×2n的纹理保存,y组中每一段的多边形的体素化结果可以用一个分辨率为2n×2l的纹理保存,z组中的每一段多边形的体素化结果可以用一个分辨率为2l×2m的纹理保存。
以对z组中的多边形的体素化为例。设置变换矩阵,将体素化区域映射为视见体,并向z轴方向正交投影。对z组中每一段的多边形,创建一个分辨率为2l×2m的临时纹理作为绘制目标,调用应用程序编程接口中的相应函数绘制该段中的所有多边形,激活可编程图形流水线。在光栅化阶段产生的每个片元(x,y)对应体素化结果中的某个体素(x,y,z)。在像素着色器中,可以获得每个片元的深度。深度的范围位于0至1之间,深度为0意味着该片元位于近投影平面上,而深度为1意味着该片元位于远投影平面上。片元的深度与相应体素的z坐标的成正比关系。设片元的深度为depth,则相应体素的z坐标为
Figure A20051004913800152
接下来的步骤是依据设定的体素编码,即像素颜色与体素坐标的一一对应关系,计算出表示该体素信息的颜色。例如,对于分辨率为32×32×32的二值体素化,使用上文提到的体素编码,深度为
Figure A20051004913800153
Figure A20051004913800154
的片元对应的颜色值分别为(R,G,B,A)=(16,0,0,0)、(0,4,0,0)、(0,0,1,0)及(0,0,64,0)。为了提高体素编码的计算效率,可以在预处理的时候计算出所有深度对应的颜色值,并存储为显存中的一个纹理。这样,在像素着色器中,只需要一个纹理采样的操作就可以完成体素编码的计算。例如,对于前面提到的分辨率为32×32×32的二值体素化的例子,可以建立一个长度为32、格式为D3DFMT_A8R8G8B8的一维纹理。其中,第i个纹理单元的颜色为深度在
Figure A20051004913800161
Figure A20051004913800162
之间的片元的体素编码。对于不同的分辨率及不同的体素化模式,需要建立不同的纹理。这样的纹理在像素着色器中起到了查找表的作用,为清晰起见,称此类用作查找表的纹理为查找表纹理。
像素着色器中输出的多个坐标相同的片元表示的体素信息使用同一个纹理单元记录,这是通过使用图形流水线中的颜色混合功能实现的。仍然以上文提到的分辨率为32×32×32的二值体素化为例。设坐标为(x0,y0)的片元有4个,深度分别为
Figure A20051004913800164
如前所述,在像素着色器中,4个片元输出的颜色分别为(R,G,B,A)=(16,0,0,0)、(0,4,0,0)、(0,0,1,0)及(0,0,64,0)。通过调用应用程序接口中的相应函数,可以激活图形流水线中的颜色混合功能,并将混合模式设置为“线性组合”,源因子与目标因子均设置为1。这样,坐标为(x0,y0)的纹理单元最后保存的颜色为(16,4,65,0),根据设定的体素编码,这一颜色表示了以上4个体素的信息。
值得注意的一点是,为了避免跨越多段的多边形影响体素化的结果,在绘制每一段的多边形时,需要设置两个裁剪平面,确保对于跨越多段的多边形,只有位于当前段内的部分才被光栅化。在处理第i段多边形时,两个裁剪平面分别为 z = i 2 n + s - 5 z = i + 1 2 n + s - 5 .
经过上述操作,共可得到2n+s-5个分辨率为2l×2m的临时纹理,分别保存z组中每一段的多边形的体素化结果。为了得到一个统一的体素表示,需要将这些纹理拼成一个FPGV。由于该FPGV仅保存了z组中的多边形的体素化结果,本发明称之为有向FPGV(directional FPGV)。在以下的说明中,将三个方向的有向FPGV分别记为FPGVx、FPGVy及FPGVz。注意,并不需要首先得到z组的全部多边形体素化结果,只需在得到每一段的多边形的体素化结果之后,将保存结果的纹理复制到有向FPGV中的相应位置就可以了。使用这一技巧,可以有效地节省存储空间的消耗。
纹理的复制也是利用可编程图形流水线完成的。例如,对于分辨率为256×256×256的多值体素化,每个体素信息需要8个比特表示,采用与前文相同的FPGV排列规则。为了将第i段中的多边形的体素化结果复制到有向FPGV中,只需将有向FPGV作为绘制目标,绘制一个顶点坐标分别为
Figure A20051004913800172
的矩形,并在像素着色器中采样保存第i段多边形体素化结果的纹理,并将采样颜色值直接输出即可。其中,x0=imod8,
Figure A20051004913800174
本发明称这种为调用图形流水线而引入的几何单元为代理几何。
对于x组及y组中的多边形,可以用完全一致的方法进行体素化,并得到相应的有向FPGV。区别是,三个方向的坐标变换矩阵不同,另外,临时纹理及有向FPGV的分辨率等也可能不同。本发明的最后一步是将三个有向FPGV中的数据进行合成,即将三个有向FPGV表示的体素信息进行统一,得到一个记录完整体素信息的FPGV。这一步骤的基本思路是,首先根据使用者设定的FPGV的排列规则,将各个有向FPGV分别映射回统一的体素空间,在体素空间内完成合成,最后再将合成好的结果存放在一个FPGV中。在本发明中,这一步骤也是利用可编程图形流水线来实现的。具体而言,以三个有向FPGV之中的任意一个作为绘制目标,绘制一个顶点坐标分别为(-1,-1)、(1,-1)、(1,1)及(-1,1)的矩形。为方便解释,不妨设以FPGVz作为绘制目标。光栅化阶段产生的片元与FPGVz的每一个纹理单元一一对应。依据FPGVz的排列规则以及体素编码,每一个片元表示了x、y坐标相同的若干体素的信息。再依据FPGVx及FPGVy的排列规则以及体素编码,可以知道与这些体素由FPGVx及FPGVy中的哪些纹理单元的颜色值中的哪些比特表示。只需在像素着色器中读取相应的数据并将结果输出。通过颜色混合,将FPGVx与FPGVy的数据同FPGVz的数据进行合成。为了加速如上对应关系的计算,可以将所有的对应关系在预处理阶段计算好并保存为查找表纹理。例如,分辨率为256×256×256、每个体素用8个比特表示的体素化,选择与前文的叙述相同的FPGV的排列规则以及体素编码。根据前面的说明,FPGVx、FPGVy及FPGVz的分辨率都为2048×2048。FPGVz中的纹理单元(uz,vz)的第1、2、3、4个分量,即红色、绿色、蓝色及透明度分量,分别记录体素化中坐标为(x,y,z)、(x,y,z+1)、(x,y,z+2)及(x,y,z+3)的体素的信息。其中,x=uzmod256,y=vzmod256,
Figure A20051004913800181
在FPGVx中,这几个体素的信息分别由坐标为(ux,vx)、(ux,vx+1)、(ux,vx+2)及(ux,vx+3)的纹理单元的第bx个分量表示。其中, bx=xmod4。在FPGVy中,这几个体素的信息分别由坐标为(uy,vy)、(uy+1,vy)、(uy+2,vy)及(uy+3,vy)的纹理单元的第by个分量表示。其中,
Figure A20051004913800183
by=ymod4。为了加速合成的计算速度,可以在预处理时建立如下的两个查找表纹理。第一个查找表纹理是一个分辨率为2048×2048的二维纹理,格式为D3DFMT_A8R8G8B8。它的坐标为(u,v)的纹理单元的颜色为
Figure A20051004913800184
利用这一查找表纹理可以快速获取FPGVz中的每一个纹理单元表示的体素的坐标。第二个查找表纹理是一个分辨率为256的一维纹理,格式为D3DFMT_A8R8G8B8。它的坐标为u的纹理单元的颜色为
Figure A20051004913800191
利用这一查找表纹理可以快速计算出任一体素单元在FPGVx及FPGVy中的表示位置。
最后,还需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。

Claims (7)

1、在一种计算机系统中,包括图形处理单元、局部存储器、接口电路、中央处理器和用于显示图像的显示设备,所述图形处理单元能够对通过应用程序编程接口接收到的函数调用作出反应,执行图形算法中用到的各种运算,一种基于可编程图形硬件的多边形模型的快速体素化方法,其特征在于,该方法包括:
通过设置恰当的变换矩阵,将多边形模型体素化区域映射为视见体,向x、y、z三个坐标轴方向之一分别做正交投影,使在光栅化阶段产生的每一个片元对应于目标体模型的一个体素;
利用可编程的图形硬件在像素着色器中对每个片元的深度属性进行指定的运算,在像素着色器中进行编码变换;
利用图形硬件进行绘制纹理,将像素着色器输出的片元编码保存在一个纹理的相应位置;
利用图形硬件进行颜色混合,将多边形模型体素化区域的三个有向纹理合成到一个纹理单元中,并储存于最终帧缓存器中。
2、根据权利要求1所述的多边形模型的快速体素化方法,其特征在于,还包括一个预处理过程生成三个高分辨率的二维纹理,分别用于保存多边形网格模型在x、y、z轴方向上体素化后的结果。
3、根据权利要求2所述的多边形模型的快速体素化方法,其特征在于,所述预处理过程还包括计算所有片元深度对应的颜色值,并存储为显存中深度缓存的一个纹理,使像素着色器只在后续操作中需要一个纹理采样的操作就可以完成体素编码的计算。
4、根据权利要求1所述的多边形模型的快速体素化方法,其特征在于,所述的光栅化是将多边形向三个坐标轴方向中投影面积最大的方向进行正交投影,并光栅化到对应的离散体素空间。
5、根据权利要求1所述的多边形模型的快速体素化方法,其特征在于,当像素着色器输出多个坐标相同的片元表示的体素信息时,使用同一个纹理单元记录。
6、根据权利要求1所述的多边形模型的快速体素化方法,其特征在于,还包括,在绘制每一段的多边形时,设置两个裁剪平面,使对于跨越多段的多边形,只有位于当前段内的部分才被光栅化。
7、根据权利要求1所述的多边形模型的快速体素化方法,其特征在于,进一步包括纹理的复制,将表示体素信息的纹理作为绘制目标,绘制一个矩形,并在像素着色器中采样保存多边形体素化结果的纹理,直接输出采样颜色值。
CNA2005100491381A 2005-02-25 2005-02-25 基于可编程图形硬件的多边形网格模型的快速体素化方法 Pending CN1655191A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2005100491381A CN1655191A (zh) 2005-02-25 2005-02-25 基于可编程图形硬件的多边形网格模型的快速体素化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2005100491381A CN1655191A (zh) 2005-02-25 2005-02-25 基于可编程图形硬件的多边形网格模型的快速体素化方法

Publications (1)

Publication Number Publication Date
CN1655191A true CN1655191A (zh) 2005-08-17

Family

ID=34894511

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2005100491381A Pending CN1655191A (zh) 2005-02-25 2005-02-25 基于可编程图形硬件的多边形网格模型的快速体素化方法

Country Status (1)

Country Link
CN (1) CN1655191A (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102306391A (zh) * 2011-09-20 2012-01-04 深圳Tcl新技术有限公司 基于OpenGL的倒影显示处理装置及方法
CN102740025A (zh) * 2012-06-08 2012-10-17 深圳Tcl新技术有限公司 屏幕菜单色彩的处理方法及装置
CN102810133A (zh) * 2012-05-15 2012-12-05 北京像素软件科技股份有限公司 网络游戏中的射线查询方法和场景服务器
CN103424070A (zh) * 2012-05-23 2013-12-04 鸿富锦精密工业(深圳)有限公司 曲面坐标系建立系统及方法
CN103927395A (zh) * 2014-05-05 2014-07-16 曾志明 结构简化图像三维几何及材质纹理的数据结构及渲染方法
CN104541308A (zh) * 2012-09-28 2015-04-22 英特尔公司 使用多边形的3d网格和对应纹理对图像进行编码
CN105141970A (zh) * 2015-07-03 2015-12-09 哈尔滨工业大学深圳研究生院 一种基于三维模型几何信息的纹理图像压缩方法
CN105184849A (zh) * 2015-03-23 2015-12-23 大连民族学院 基于面片链码的三维网格模型表示方法
CN107093202A (zh) * 2010-06-30 2017-08-25 巴里·林恩·詹金斯 使用所存储的信息确定第一网格多边形集合的方法和系统
CN107170025A (zh) * 2017-05-04 2017-09-15 福建天泉教育科技有限公司 一种图片边框的绘制方法及系统
CN107967715A (zh) * 2016-10-19 2018-04-27 富士施乐株式会社 数据处理装置、三维物体创建系统以及数据处理方法
CN108140252A (zh) * 2016-09-08 2018-06-08 深圳市大富网络技术有限公司 一种方块动画的生成方法及相关设备
CN110689569A (zh) * 2019-12-10 2020-01-14 北京唯智佳辰科技发展有限责任公司 集成电路版图场域识别与网格细分处理方法及装置
CN110796735A (zh) * 2019-09-27 2020-02-14 同济大学建筑设计研究院(集团)有限公司 Nurbs曲面有限元板壳网格划分方法及计算机实现系统
CN112973127A (zh) * 2021-03-17 2021-06-18 北京畅游创想软件技术有限公司 一种游戏3d场景编辑方法及装置
CN114711962A (zh) * 2022-04-18 2022-07-08 北京恩维世医疗科技有限公司 一种增强现实手术规划导航系统及方法

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107093202A (zh) * 2010-06-30 2017-08-25 巴里·林恩·詹金斯 使用所存储的信息确定第一网格多边形集合的方法和系统
CN102306391B (zh) * 2011-09-20 2015-01-07 深圳Tcl新技术有限公司 基于OpenGL的倒影显示处理装置及方法
CN102306391A (zh) * 2011-09-20 2012-01-04 深圳Tcl新技术有限公司 基于OpenGL的倒影显示处理装置及方法
WO2013040983A1 (zh) * 2011-09-20 2013-03-28 深圳Tcl新技术有限公司 基于OpenGL的倒影显示处理装置及方法
CN102810133B (zh) * 2012-05-15 2015-08-12 北京像素软件科技股份有限公司 网络游戏中的射线查询方法和场景服务器
CN102810133A (zh) * 2012-05-15 2012-12-05 北京像素软件科技股份有限公司 网络游戏中的射线查询方法和场景服务器
CN103424070A (zh) * 2012-05-23 2013-12-04 鸿富锦精密工业(深圳)有限公司 曲面坐标系建立系统及方法
CN102740025A (zh) * 2012-06-08 2012-10-17 深圳Tcl新技术有限公司 屏幕菜单色彩的处理方法及装置
CN102740025B (zh) * 2012-06-08 2016-04-06 深圳Tcl新技术有限公司 屏幕菜单色彩的处理方法及装置
CN104541308A (zh) * 2012-09-28 2015-04-22 英特尔公司 使用多边形的3d网格和对应纹理对图像进行编码
CN103927395A (zh) * 2014-05-05 2014-07-16 曾志明 结构简化图像三维几何及材质纹理的数据结构及渲染方法
CN105184849A (zh) * 2015-03-23 2015-12-23 大连民族学院 基于面片链码的三维网格模型表示方法
CN105141970A (zh) * 2015-07-03 2015-12-09 哈尔滨工业大学深圳研究生院 一种基于三维模型几何信息的纹理图像压缩方法
CN105141970B (zh) * 2015-07-03 2019-02-12 哈尔滨工业大学深圳研究生院 一种基于三维模型几何信息的纹理图像压缩方法
CN108140252A (zh) * 2016-09-08 2018-06-08 深圳市大富网络技术有限公司 一种方块动画的生成方法及相关设备
CN107967715B (zh) * 2016-10-19 2023-11-07 富士胶片商业创新有限公司 数据处理装置、三维物体创建系统以及数据处理方法
CN107967715A (zh) * 2016-10-19 2018-04-27 富士施乐株式会社 数据处理装置、三维物体创建系统以及数据处理方法
CN107170025A (zh) * 2017-05-04 2017-09-15 福建天泉教育科技有限公司 一种图片边框的绘制方法及系统
CN110796735A (zh) * 2019-09-27 2020-02-14 同济大学建筑设计研究院(集团)有限公司 Nurbs曲面有限元板壳网格划分方法及计算机实现系统
CN110796735B (zh) * 2019-09-27 2023-10-13 同济大学建筑设计研究院(集团)有限公司 Nurbs曲面有限元板壳网格划分方法及计算机实现系统
CN110689569A (zh) * 2019-12-10 2020-01-14 北京唯智佳辰科技发展有限责任公司 集成电路版图场域识别与网格细分处理方法及装置
CN110689569B (zh) * 2019-12-10 2020-06-30 北京唯智佳辰科技发展有限责任公司 集成电路版图场域识别与网格细分处理方法及装置
CN112973127A (zh) * 2021-03-17 2021-06-18 北京畅游创想软件技术有限公司 一种游戏3d场景编辑方法及装置
CN114711962A (zh) * 2022-04-18 2022-07-08 北京恩维世医疗科技有限公司 一种增强现实手术规划导航系统及方法

Similar Documents

Publication Publication Date Title
CN1655191A (zh) 基于可编程图形硬件的多边形网格模型的快速体素化方法
US7184041B2 (en) Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
US6674430B1 (en) Apparatus and method for real-time volume processing and universal 3D rendering
US8462159B2 (en) Subdividing geometry images in graphics hardware
AU757621B2 (en) Apparatus and method for real-time volume processing and universal 3D rendering
JP2001118082A (ja) 描画演算処理装置
WO2005104042A1 (en) Block-based fragment filtration with feasible multi-gpu acceleration for real-time volume rendering on standard pc
Li et al. Chameleon: An interactive texture-based rendering framework for visualizing three-dimensional vector fields
El Seoud et al. A comprehensive review on volume rendering techniques
WO2023220807A1 (en) Light field offset rendering
US6924805B2 (en) System and method for image-based rendering with proxy surface animation
US7372461B2 (en) Image processing apparatus and method of same
Wang et al. Fast Ray-Scene Intersection for Interactive Shadow Rendering with Thousands of Dynamic Lights
Ivanov et al. Spatial Patches‐A Primitive for 3D Model Representation
Yao et al. Resolution independent real-time vector-embedded mesh for animation
CN118537468A (zh) 一种光场图像的多层级并行渲染方法和系统
He et al. A Rendering Method for Visualization of Medical Data
Jianmin Fast visualization of complex 3D models using displacement mapping
Albersmann et al. Efficient direct rendering of digital height fields
Ivanov et al. Representation of real-life 3d models by spatial patches
Lu et al. Fast visualization of complex 3D models using displacement mapping
Maillot¹ et al. Feature-based Displacement Mapping
Khanduja Multiple dataset visualization (MDV) framework for scalar volume data
Chang et al. View-independent object-space surface splatting
Farooq Real-time rendering of large surface-scanned range data natively on a GPU

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication