基于gpu集群的实时光线跟踪渲染方法

文档序号:6582731阅读:510来源:国知局
专利名称:基于gpu集群的实时光线跟踪渲染方法
技术领域
本发明涉及集群渲染中的一种渲染方法,特别涉及一种基于GPU集群的实时光线 跟踪渲染方法。
背景技术
目前,高真实感渲染已经被广泛地应用在电影特效制作、虚拟现实展示、文化遗产 交互导览等领域。高真实感渲染需要很强的计算能量,随着三维场景或者模型的复杂度的 提高(当前,几个G大小的三维场景已经很常见),单机上进行高真实感的实时渲染几乎不 可能。利用集群技术来解决这个问题是目前最常用的方法。
目前主要的渲染方法主要有光线跟踪渲染和光栅化渲染,其他的渲染如辐射度 等。光栅化的渲染方法是目前使用最广泛的渲染方法,也是最基础的方法,其特点是渲染效 率高,真实感不强。但是,该方法是一种串行的渲染方法,尽管可以利用机器CPU之间的并 行,但是不能利用GPU内部的并行计算能力;而且光栅化渲染效果存在严重不足,比如对阴 影、折射、反射等的支持都要耗费很长的时间,无法满足实时的应用要求。
辐射度方法在效果上表现较好,但该方法计算量非常大,不能够满足实时应用需 求。光线跟踪的渲染算法可以很自然地模拟真实环境中的各种光学效果,如反射、阴影、折 射等,具有好的渲染效果;同时光线跟踪又是一种高度并行的算法,可以并行计算每一个像 素颜色,可以充分利用GPU的并行特性。
目前,OpenRT和OptiX是最流行的两个实时光线跟踪引擎。OpenRT提供了类似 OpenGL的API接口,支持在集群环境下复杂大场景的实时渲染。OptiX是NVIDIA公司推出 的基于GPU(CUDA架构)计算的框架平台,支持实时光线跟踪计算,在渲染高真实感效果和 渲染速度上都达到了比较令人满意的程度。但该平台的最大不足在于无法利用集群硬件来 提高效率。OpenRT尽管支持集群渲染,但是该集群是基于CPU的集群,没有充分利用GPU 高速的图形处理能力,故基于CPU的集群无法满足复杂场景的交互应用实时需求;OptiX是 基于GPU渲染的系统,但是只支持在单机上渲染,对于比较复杂的三维场景或者模型,使用 Optix在单机上渲染很难能够达到实时的速度,现有集群渲染系统也各自有这样或者那样 的不足和缺陷,无法满足应用的实时需求。发明内容
本发明通过GPU高并行地来进行光线跟踪计算,同时在光线跟踪方法中使用极坐 标表示方式进行求交运算,在得到真实感效果画面的同时,得到了非常好的渲染性能,满足 了实时应用的需求。
一种基于GPU集群的实时光线跟踪渲染方法,包括如下步骤
I)预先将要渲染的每帧任务以屏幕空间的方式划分成若干的子任务;
以屏幕空间的方式划分子任务时,是将每帧任务按照它的像素区域划分成若干独 立的子像素区域,每一个子像素区域,即为一个要渲染的子任务。
每帧渲染的任务就是需要渲染得到的最终结果图像,将其像素区域划分成若干相 互独立的子像素区域,每一个子任务对应一个子像素区域,比如将一张1920*1080的图像 分割成96*54的400张子图像,对应着400个子任务。
2)利用动态负载均衡机制将子任务分配到集群中的各个渲染机器节点上。
步骤2)中所述动态负载均衡机制为动态调整每台渲染机器上的渲染任务数,使 每个渲染机器节点的渲染计算时间尽可能相等。
子任务分配时首先进行初始化,将首帧的所有子任务平均地分配到各个渲染机器 节点。
首帧的所有子任务完成渲染后,每个渲染节点上的子任务数将被动态调整,使每 个渲染机器节点的渲染计算时间尽量相等。
管理机器节点记录每个渲染节点完成子任务的运算时间以及相应的任务数,当首 帧的所有子任务返回结果后,管理机器节点会根据每个渲染机器节点的计算能力动态地调 整,在后续子任务的分配时,性能差的渲染机器节点将会分配到较少的子任务数,性能好的 渲染机器节点会分配到较多的任务数,使每个渲染机器节点的渲染计算时间接近。
3)在每个渲染机器节点内部利用GPU并行地对每个子任务的屏幕空间每个像素 来并行计算光线跟踪的结果。
由于采用极坐标来表示三维场景的几何数据,因此,光线和三角面片求交计算速 度得到较大地提高,而且并行效果更好;
4)在各个渲染机器节点上的子任务完成渲染后,发送中间图像给管理机器节点, 管理机器节点在接收到所有子任务的渲染结果图像后,将所有子任务的渲染结果图像拼接 成最终的结果图像。利用了集群中GPU内部和GPU之间双重的并行效果。
每个渲染节点内每次子任务的流程为初始化场景同时建立KD树,KD树的每个节 点是子任务和渲染该子任务的渲染机器以及时间;在显存中根据分配到的子任务大小申请 一块存储区;对子任务中屏幕空间每个像素,在GPU上启动一个线程执行光线跟踪运算,其 结果直接保存在显存里;渲染完成后读取显存内数据并发送给管理机器节点。
拼接成最终的渲染结果图像后,根据用户交互的需要管理机器节点接收并处理用 户交互事件,并更新渲染上下文然后进行派发,然后向所有渲染机器节点重新对所有的机 器分发渲染子任务,并且发送下一帧的渲染启动命令。
本发明通过GPU高并行地来进行光线跟踪计算,并在光线跟踪方法中使用极坐标 表示方式进行求交运算,在得到真实感渲染效果画面的同时,得到了较好的渲染性能,其优 势表现在
I)使用了高真实感效果好的光线跟踪渲染方法,使得最终的渲染效果逼真;
2)使用了 CPU和GPU的高并行计算能力,目前,单台渲染机器的GPU显卡可以同时 运行大约3万个GPU线程来进行光线跟踪的计算,而CPU也有4个核(可以同时运行4个 线程),使单台节点的渲染效率得到了极大的提升;
3)利用了极坐标方式来表示三维场景的几何数据,加速了光线和三角面片的求交 运算速度,整体渲染性能得到较大地提高。
具体实施方式
下面具体介绍本发明基于GPU集群的实时光线跟踪渲染方法。
一种基于GPU集群的实时光线跟踪渲染方法,包括以下步骤
I)首先对每帧渲染任务以屏幕空间的方式进行任务划分,每帧渲染的任务就是需 要渲染得到的最终结果图像,采用屏幕空间方式划分每帧的最终分辨率的屏幕空间图像, 按照它的像素区域,划分成独立的子像素区域,一个子任务对应一个子像素区域。比如将一 张1920*1080的图像分割成96*54的400张子图像,对应着400个子任务。;
2)以一种动态负载均衡的方式将子任务分配到GPU集群中的各个渲染机器节点 上。
在任务初始化分配阶段,将首帧对应的所有子任务均等的分配到各个渲染机器节
以步骤I)中的1920*1080分辨率为例,如果有40台机器,那么每台渲染机器都会 被分配到10个子任务,但这种分配方式未必是最优的,因为每台机器的计算能力以及网络 环境是不一致的,进而导致分配相同的任务可能会使不同机器的渲染时间存在较大差异。 利用动态负载平衡机制能过动态调整每台机器上的渲染任务数量,保证每台机器的渲染传 输时间尽量相等。
3)在每个渲染机器节点内部使用GPU高并行地对每个子任务的屏幕空间每个像 素计算并行光线跟踪。
由于采用极坐标来表示三维场景的几何数据,因此,光线和三角面片求交速度大 大地提高,而且并行效果更好。
在这个过程的初始阶段,需要建立KD树。KD树是用来加速求交运算的一种数据结 构,对整个场景进行空间划分,KD树一旦建立,除非场景变化,否则不再变化,同时由于在渲 染过程中会有用户交互事件,所以渲染上下文会相应改变,在渲染之前,还需要更新渲染上 下文。
下面是每个渲染节点内每次渲染的流程
a、初始化场景同时构建和生成KD树,KD树的每个节点是一个子任务和该子任务 的渲染机器标号以及计算时间。
KD树按照GPU集群系统中机器的预先配置的组织方式来建立,而GPU集群机器 的组织方式是用户在初始化的时候配置的,不同的工程应用对GPU集群机器的组织方式不 同,一旦KD树建立完成,在应用结束以前KD树不会变化;
b、更新每个渲染机器的渲染上下文,同时在显存中根据分配到的子任务大小申请 一定大小的存储区。
C、对于子任务中屏幕空间每个像素点,在GPU上启动一个线程执行光线跟踪运 算,结果保存在显存里;
d、在一帧渲染结束后,主程序读取显存数据并发送给管理机器节点。其它渲染节 点进入等待状态,等待下一帧渲染启动命令以及渲染任务,如果管理机器向渲染节点发送 结束命令,那么渲染节点退出渲染流程。
4)在各个渲染机器节点上的子任务完成后,将渲染结果图像发送给管理机器节 点,管理机器节点在接收到所有子任务的渲染结果图像后,将所有子任务的渲染结果图像 拼接成最终的结果图像,最后,管理节点接收和处理用户交互事件,更新所有渲染机器的渲染上下文,并向所有渲染节点重新分发渲染子任务,并发送下一帧的渲染开始命令。
本发明的方法相比于集群渲染系统中的其他渲染方法,有着三大方面的优势使 用了高真实感效果好的光线跟踪渲染方法,使得最终的渲染效果逼真;使用了 CPU和GPU的 高并行计算能力,目前,单台渲染机器的GPU显卡可以同时运行大约3万个GPU线程来进行 光线跟踪的计算,而CPU也有4个核(可以同时运行4个线程),使单台节点的渲染效率得 到了极大的提升;利用了极坐标方式来表示三维场景的几何数据,加速了光线和三角面片 的求交运算速度,整体渲染性能得到较大地提高。
权利要求
1.一种基于GPU集群的实时光线跟踪渲染方法,其特征在于,包括如下步骤1)将要渲染的每帧任务预先以屏幕空间的方式划分成若干的子任务;2)利用动态负载均衡机制将子任务分配到集群中的各个渲染机器节点上;3)在每个渲染机器节点内部利用GPU并行地对每个子任务的屏幕空间每个像素进行计算光线跟踪;4)在各个渲染机器节点上的子任务完成后,发送中间图像给管理机器节点,管理机器节点在接收到所有子任务的渲染结果图像后,将所有子任务的渲染结果图像拼接成最终的结果图像。
2.根据权利要求1所述的基于GPU集群的实时光线跟踪渲染方法,其特征在于,步骤1)中以屏幕空间的方式划分子任务时将每帧任务的像素区域划分成若干相互独立的子像素区域,一个要渲染的子任务对应一个子像素区域。
3.根据权利要求1所述的基于GPU集群的实时光线跟踪渲染方法,其特征在于,步骤2)中首先初始化任务,将首帧的所有子任务均等的分配到各个渲染机器节点。
4.根据权利要求3所述的基于GPU集群的实时光线跟踪渲染方法,其特征在于,首帧的所有子任务渲染完成后,每个渲染节点上的子任务量被动态调整,使每个渲染节点的渲染传输时间尽量相等。
5.根据权利要求4所述的基于GPU集群的实时光线跟踪渲染方法,其特征在于,每个渲染节点上的渲染任务量的动态调整过程管理机器节点记录每个渲染机器节点完成子任务的计算时间以及任务数,当首帧的所有子任务计算结束后,管理机器节点会根据每个渲染节点的计算能力进行动态地调整,在后续帧子任务的分配时,性能差的渲染节点会分配到较少的子任务数,性能高的渲染节点会分配到较多的任务数,使每个渲染机器节点的渲染时间尽可能相等。
6.根据权利要求5所述的基于GPU集群的实时光线跟踪渲染方法,其特征在于,每个渲染机器节点内每次子任务的流程初始化场景同时构建和生成PKD树,PKD树的每个叶子节点是一个子任务和该子任务的渲染机器标号以及计算时间;在显存中根据分配到的子任务大小申请一块存储区;对子任务中屏幕空间每个像素,在GPU上启动一个线程执行光线跟踪运算,结果保存在显存里;渲染完成后读取显存数据并发送给管理机器节点。
全文摘要
本发明公开了一种基于GPU集群的实时光线跟踪渲染方法,包括如下步骤预先将要渲染的每帧任务以屏幕空间上划分成若干的子任务;利用动态负载均衡机制将子任务分配到集群中的各个渲染机器节点上;利用GPU在每个渲染节点内部并行地对每个子任务的屏幕空间每个像素进行并行光线跟踪计算;在各个渲染节点上的子任务渲染完成后,发送中间图像给管理机器节点,管理机器节点在接收到所有子任务的渲染结果图像后,将所有子任务的渲染结果图像拼接成最终的结果图像。本发明通过GPU高并行地来进行光线跟踪计算,同时使用极坐标表示方式进行点和三角面片的求交运算,在得到真实感效果画面的同时,得到了非常好的渲染性能,满足了应用的实时需求。
文档编号G06T15/06GK103049927SQ201310017768
公开日2013年4月17日 申请日期2013年1月17日 优先权日2013年1月17日
发明者赵磊, 张勤飞, 任艳姣, 陆胜, 李伟 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1