本发明专利技术公开了一种基于GPU的层次包围盒快速构造方法,包括:(1)将GPU的活动线程划分为若干线程块,通过构建层次包围盒对模型空间中的场景数据逐级进行划分,直至达到预定的级数,其中所有的线程块同时参与同一个场景节点的划分;(2)每个线程块分别参与不同的场景节点的划分,直至划分到每个节点所含面片数不多于每个线程块内的线程数;(3)每个线程分别参与不同的场景节点的划分,直至划分到每个节点所含面片数不多于5个。本发明专利技术方法可有效利用硬件的并行计算能力,提高加速结构的构造速度和质量。
【技术实现步骤摘要】
本专利技术涉及图形实时渲染
,尤其涉及一种层次包围盒的快速构造方法。
技术介绍
在过去的二十年时间里,显卡性能的巨大提高,尤其是其可编程性的出现,大大促 进了图形学研究领域的进步。光线跟踪技术是一种在图形绘制领域广泛应用的技术。相比 光栅化技术,光线跟踪技术有很多优势,包括物体可见性的自动计算,时间复杂度与场景中 图元数量呈次线性关系,更适合并行架构处理等。但是,由于光线跟踪技术模拟的是真实世 界中光的物理路径,因此它最大的优势是产生高质量的图像,绘制出高真实感的平滑的反 射、折射、软影(soft shadow)等全局光照效果。Whitted最早使用光线跟踪技术来模拟全 局光照效果。由于光线跟踪技术需要花费很高的计算量,因此以往这种技术只能应用在非 实时绘制领域中。当前,计算机硬件的计算能力呈指数形式的增长速度已经使交互式的实时光线跟 踪成为可能。越来越多的研究开始关注光线跟踪的实时计算,已经出现了一些优秀的研究 成果。然而,尽管这些研究很多都是基于GPU架构设计的,但这些实现仍然未能充分利用当 前GPU强大的并行计算能力。近年来已经出现了一些基于GPU实现的编程方法,例如NVIDIA公司的 CUDA(Compute Unified Device Architecture)编程模型、苹果公司的 OpenCL,以及一 些底层的框架结构。这些模型允许程序员自己定义合适的数据结构,为编程提供很大的 灵活性和可操作性,包括创建、调度、同步等线程管理操作可以完全由硬件来完成。例如 在CUDA编程模型里,我们可以根据程序的并行特征将程序划分成几个顺序执行的被称为 kernel的代码段,使其在GPU中执行。为了有效地管理大量的线程,kernel使用标量形式 的 SIMT(Single Instruction,Multiple Thread)操作,线程以一种被称作 warps 的分组形 式根据kernel中的指令来执行。程序员将线程组织成线程块(block),这些线程块本质上 可以看成是虚拟的SM多处理器,拥有独立的寄存器和共享内存(shared memory),各线程 块间相对独立的乱序执行。为了获得GPU的最大计算性能,有两个问题需要考虑第一,每个线程应该使用 尽量少的硬件寄存器和存储资源,以保证GPU内部同一时刻运行更多的活动线程,Popov 等的光线跟踪实现消耗了过多的寄存器,导致GPU利用率还不到33% ;第二,线程的 SIMD(Single Instruction, Multiple Data)操作对程序员来说是透明的,而SIMD的操作 方式对程序的分支执行非常敏感,同一 warp的线程只有执行程序的同一分支才能获得最 大效益。最近,一些研究开始关注动态场景下的光线跟踪方法。在光线跟踪算法中,构造加 速结构是其中重要的一步,通过将面片重新进行组织,可以大大减少无效的光线遍历操作 和相交操作。由于动态场景下物体间的拓扑结构会发生改变,甚至物体本身都会发生形变, 因此,每一帧都需要重新对加速结构进行重构。然而,加速结构的构造是一个比较耗时的操作,通常无法在绘制一帧的时间内完成,这也是导致当前基于动态场景的实时光线跟踪研 究进展较慢的主要原因。kd树可以提供较好的光线跟踪性能,但是其昂贵的构造时间已满足不了实时光线 跟踪的要求;网格结构易于构建,但是其光线跟踪的性能严重依赖于操作的相似性,而这往 往在复杂场景或者二级光线中是不存在的。鉴于光线跟踪性能以及处理复杂场景和二级光 线各方面的综合要求,在处理动态场景问题上,BVH(Bounding Volume Hierarchy)看起来 是一个折中的选择,与kd树、网格结构按照空间的分割方法不同,BVH是一个按照物体分割 的场景层次分割结构。设计出一种高质量的快速的加速结构构造方法,使其可以充分利用多核处理器强 大的并行处理能力,从而使加速结构建造速度进一步加快,满足实时性的要求,是一个光线 跟踪算法能否有效执行的关键。目前公认的性能较好的加速结构一般都是一种层次结构, 如 BVH(Bounding VolumeHierarchies)>BSP(Binary Space Partitioning)、BIH(Bounding IntervalHierarchies)、八叉树(Octree)等结构。然而层次结构自上而下的构造方式使 其很难在构造阶段初期充分的利用多核架构中每个核的计算能力,从而造成硬件的低效使 用。已经有一些工作关注于在多核体系下对加速结构的使用。MacDonald等提出了 SAH(surface area heuristic)策略,Wald和Popov分别提出了针对这一策略设计的优化 的构造方法。最近也出现了一些针对并行构造方面的工作,Popov用带有几个核的CPU去 构造kd树,但由于带宽有限,取得的性能提升并不明显,Shevtsov同样用带有几个核的CPU 去构造kd树,尽管取得了不错的性能,但他的这种算法不能扩展到更多的核进行处理。当 前,随着硬件并行计算能力的增强,CUDA这样的编程平台也开始成熟,因此,应该重新考虑 加速结构的设计。
技术实现思路
本专利技术提供一种基于GPU的层次包围盒(bvh)并行构建方法,可有效利用硬件的 并行计算能力,提高加速结构的构造速度和质量。一种基于GPU的层次包围盒的快速构造方法,包括(1)将GPU的活动线程划分为若干线程块,通过构建层次包围盒(BVH),对模型空 间中的场景数据逐层进行划分,直至达到预定的层数,其中GPU内部所有的线程块同时参 与同一个场景节点的划分;划分时在需要进行渲染的模型空间的三个坐标轴上(相互垂直的X轴、Y轴和Z 轴),分别计算采样分割点的SAH(surface area heuristic)花费(MacDonald等在文献 "Heuristics for ray tracing using space subdivision. Visual Computer, 1990.,,中提 出的评估加速结构最优分割点的方法,如公式(a)所示),然后选取三个坐标轴中花费最小 的分割点,将选取的这个分割点作为分割平面,对模型空间中的场景数据进行划分。将整个场景所形成的包围盒作为根节点,第一次划分可以得到两个子节点,然后 以同样的方法,按照宽度优先的方式递归这个构造过程,逐层进行划分,直至构造的层数达 到设定值,即此构造的层数是预先设定好的,一般为5层。这种构造方式可以在层次包围盒构造初期,快速对场景节点进行分割,从而迅速产生出大量数据供成千上万的GPU线程使用,使它们一直保持满负荷工作状态。我们使用公式(a)来计算每个潜在的分割点,另外我们还需要知道每个子结点所 含面片数及其表面积。Wald等 通过使用排序来计算这些数量,为了避免昂贵的排 序操作,我们使用bin方法以减少带宽的使用。随着构造层次的加深,处理核所要处 理的数据明显减少,使计算SAH花费的时间更短,从而使建造速度更快。采样分割点的SAH 花费<formula>formula see original document page 5</formula>(a)这里,ni和r^分别代表与当前采样分割本文档来自技高网...
【技术保护点】
一种基于GPU的层次包围盒快速构造方法,其特征在于,包括:(1)将GPU的活动线程划分为若干线程块,通过构建层次包围盒对模型空间中的场景数据逐级进行划分,直至达到预定的级数,其中所有的线程块同时参与同一个场景节点的划分;(2)每个线程块分别参与不同的场景节点的划分,直至划分到每个节点所含面片数不多于每个线程块内的线程数;(3)每个线程分别参与不同的场景节点的划分,直至划分到每个节点所含面片数不多于5个;在步骤(2)和步骤(3)中划分场景数据的具体步骤如下:a)在存储区域中建立两个队列,为第一队列和第二队列,分别存放用来存放等待进行划分的场景节点;b)当GPU存在空闲线程块或线程时,从第一队列中依次取等待进行划分的场景节点进行划分,并将产生的新的场景节点放入第二队列;其中对第一队列中编号为k的场景节点进行划分所产生的新的场景节点在第二队列中的编号分别为2×k+t,其中t=0,1;场景节点在队列中的编号也对应了该场景节点在存储区域中的位置;c)当第一队列中等待进行划分的场景节点处理完毕后,清空第一队列中的所有节点数据;当GPU存在空闲线程块或线程时,从第二队列中依次取等待进行划分的场景节点进行划分,并将产生的新的场景节点放入第一队列,直至第二队列中等待进行划分的场景节点都处理完毕;其中对第二队列中编号为j的场景节点进行划分所产生的新的场景节点在第一队列中的编号分别为2×j+t其中t=0,1;场景节点在队列中的编号也对应了该场景节点在存储区域中的位置。d)循环步骤b)、步骤c),直至完成相应的场景节点的划分;当每个队列中等待进行划分的场景节点划分完毕后,通过硬件支持的紧凑操作清除对该队列中的空场景节点。...
【技术特征摘要】
【专利技术属性】
技术研发人员:许端清,杨鑫,赵磊,
申请(专利权)人:浙江大学,
类型:发明
国别省市:86[中国|杭州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。