首页 / 专利库 / 电脑编程 / 算法 / 光线跟踪算法 / 一种基于CPU与GPU混合的渲染方法

一种基于CPU与GPU混合的渲染方法

阅读:234发布:2020-05-13

专利汇可以提供一种基于CPU与GPU混合的渲染方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种基于CPU与GPU混合的 渲染 方法,包括以下步骤:1)场景构建;2)场景的 加速 结构构建:根据步骤1)获得的几何数据,在CPU与GPU上并行构建场景的KD‑Tree加速结构;3)数据冗余存储:将步骤1)获得的几何数据、材质数据、场景渲染参数和初始图像数据均分别复制到CPU和GPU的存储空间内;4)渲染引擎运行:根据步骤1)获得的几何数据、材质数据、场景渲染参数、初始图像数据以及步骤2)获得的场景的KD‑Tree加速结构,采用 光线 跟踪 算法 ,分别在CPU与GPU上并行运行渲染引擎;5)显示。与 现有技术 相比,本发明具有实现成本低、资源利用率高、安全性高、灵活性好等优点。,下面是一种基于CPU与GPU混合的渲染方法专利的具体信息内容。

1.一种基于CPU与GPU混合的渲染方法,其特征在于,包括以下步骤:
1)场景构建
获取场景的几何数据和材质数据,所述几何数据包括三面片的数据,同时设置场景渲染参数和初始图像数据;
2)场景的加速结构构建
根据步骤1)获得的几何数据,在CPU与GPU上并行构建场景的KD-Tree加速结构;
3)数据冗余存储
将步骤1)获得的几何数据、材质数据、场景渲染参数和初始图像数据均分别复制到CPU和GPU的存储空间内;
4)渲染引擎运行
根据步骤1)获得的几何数据、材质数据、场景渲染参数、初始图像数据以及步骤2)获得的场景的KD-Tree加速结构,采用光线跟踪算法,分别在CPU与GPU上并行运行渲染引擎;
5)显示
将步骤4)运行渲染引擎获得的渲染结果图像复制到CPU端上,进行显示;
所述步骤2)具体为:在建立KD-Tree加速结构过程中,判断当前结点的三角面片数量是否大于等于预设的阈值T,若是,该当前结点是大结点,在CPU上根据莫顿码构建KD-Tree加速结构,若否,该当前结点是小结点,在GPU根据SAH代价函数构建KD-Tree加速结构;
所述在CPU上根据莫顿码构建KD-Tree加速结构的过程包括以下步骤:
A:引入高度为h的满二叉树,将大结点划分为n×n的均匀栅格,且h与n满足:2h=n2;
B:为每个栅格分配一个反应场景位置的莫顿码,并针对大结点中的所有三角面片,将三角面片的AABB的重心作为代表点,每个三角形面片根据代表点只对应一个栅格,则该满二叉树中每个节点对应场景中的一个栅格,将栅格内的莫顿码作为节点的值;
C:采用二叉排序树的插入方法将包含三角形面片的栅格作为新叶子节点插入到满二叉树中,得到平衡二叉树;
D:从平衡二叉树叶子节点向上,判断节点是否为多余节点,若为多余节点则将其删除,得到最终的平衡二叉树,即为根据莫顿码构建的KD-Tree加速结构。
2.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述阈值取值范围为30-34个。
3.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述步骤D具体为:
D1:令所插入的新叶子节点均为必要节点,除插入的新叶子节点外,剩余平衡二叉树的叶子节点均为多余节点,并删除;
D2:从下向上依次对每层节点进行判断,直到根节点为止,若该层节点的叶子节点只有一个必要节点,则该层节点为多余节点,并被该层节点的必要节点取代,若该层节点的叶子节点有两个必要节点,则该层节点为必要节点;
D3:确定必要节点,并将多余的节点删除后,将必要的节点连接起来,得到根据莫顿码构建的KD-Tree结构。
4.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述在GPU根据SAH代价函数构建KD-Tree加速结构的过程中,将左右孩子结点的三角面片面积用通过按照分割面划分之后的左右结点包围盒的面积近似代替,同时将结点总的三角面片的表面积用该结点的包围盒近似代替。
5.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述步骤4)具体为:
41)根据场景渲染参数和初始图像数据生成初始光线;
42)遍历场景的KD-Tree加速结构,进行光线与三角面片的求交运算,得到交点位置;
43)根据场景渲染参数和交点位置生成一条阴影测试光线,并遍历场景的KD-Tree加速结构,获得初始图像数据内像素点的阴影程度;
44)基于光照明模型,根据像素点的阴影程度,得到初始图像数据内像素点的颜色值;
45)判断交点位置是否生成二级光线,若是,跳转步骤42),若否,根据像素点的颜色值输出渲染结果图像。
6.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述材质数据包括材质漫反射系数、镜面反射系数、环境光的漫反射系数以及纹理贴图。
7.根据权利要求1所述的一种基于CPU与GPU混合的渲染方法,其特征在于,所述场景渲染参数包括光源的位置、视角和视点的位置。

说明书全文

一种基于CPU与GPU混合的渲染方法

技术领域

[0001] 本发明涉及一种渲染方法,尤其是涉及一种基于CPU与GPU混合的渲染方法。

背景技术

[0002] 渲染是一种对虚拟场景进行观察并生成图像的过程。根据应用的侧重点不同,渲染算法可分为两类,即面向快速图像生成的实时渲染,以及面向高质量图像生成的离线渲染。
[0003] 离线渲染是电影后期制作的重要工序,影视作品为了保证动画的视觉连贯性,通常要求速率不低于每秒24帧。因此,一部两小时的动画至少要包含172,800帧。单机渲染一幅画面需要10余分钟到30多分钟,甚至到1个小时,采用渲染集群会提高渲染速度,但即使以1帧/min的平均渲染速度,172,800帧也需要120天才能完成。
[0004] 为了实现高度真实的光影效果,电影、动漫制作过程通常需要引入全局光照模型。作为一种重要的全局光照算法,光线跟踪方法通过模拟光在虚拟空间的发射和散射的过程来生成具有真实感的图像。然而,高度复杂的物体、光源以及光线传播模型对光线跟踪算法的运行时间提出了挑战,在电影后期制作过程中无论是建模、材质,还是合成等工序,图形的分辨率都比较高,因而通常需要借助大量光线来降低噪声,以提高图像质量,也因此渲染工序往往非常耗时。虽然高质量的加速结构己经在理论上降低了每条光线的平均遍历代价,但是遍历算法所面对的是海量的光线数据,因而其运行时间依然较长。另一方面,离线渲染通常会在场景中引入高精度模型。这就使加速结构建立算法所面对的物体数量巨大。
因而,算法的运行相当耗时,离线渲染耗时长、效率差的问题始终存在,并日益突显。
[0005] 光线追踪算法是全局光照模型中一种重要的渲染方法,同时也是三维仿真领域的热点问题,它的任务是生成三维图形仿真环境中的可见图像,同时获得比传统光线投射法更加逼真的显示效果。
[0006] 光线追踪的核心是对各类光线与场景中几何物体进行相交测试,求交运算占光线追踪算法整体运行时间的比例可以高达75%~95%。对于具有个N面片的场景,当渲染一幅具有个M像素的图像时,无加速时光线跟踪算法的复杂度为O(MN)。因此,如何提高光线与场景的求交运算速度是实现快速光线跟踪的关键。通过对场景空间进行恰当分割和组织,减少光线与景物的求交运算,从而降低算法复杂度是目前重要和主流的加速渲染途径;而KD-Tree是当前广泛运用的加速结构。
[0007] KD-Tree通常使用表面积启发方法(Surface Area Heuristic,SAH)确定最优分割。SAH是一种贪心算法,它对一个节点各种划分方式做出评估,并选择能够使树形结构质量达到最优的那一种划分。虽然这种按照贪心方式生成的树结构只是理论上的次优解,但是现存的其他算法都无法给出更好的解。因而,SAH是目前保证KD-Tree质量的最好方法。
[0008] 传统的光线追踪算法通常在中央处理器CPU上实现,但由于其实现过程需要对每条光线与场景中的片元进行相交测试,计算量非常大,难以运用于渲染时间要求较短的场合。目前,图形处理器GPU除了具有强大的图形处理能外,同时还具有强大的通用并行计算能力,利用GPU的大规模并行计算能力实现光线跟踪计算加速是目前研究的热点。但由于该硬件在其他方式渲染上性能仍有待提高,而且成本较高,在现实应用中仍有很多缺陷

发明内容

[0009] 本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于CPU与GPU混合的渲染方法,通过一种双层并行的方式,用于在CPU与GPU的并行结构中实现加速结构KD-Tree的构建,具有实现成本低、资源利用率高、安全性高、灵活性好等优点。
[0010] 本发明的目的可以通过以下技术方案来实现:
[0011] 一种基于CPU与GPU混合的渲染方法包括以下步骤:
[0012] 1)场景构建
[0013] 获取场景的几何数据和材质数据,所述几何数据包括三面片的数据,同时设置场景渲染参数和初始图像数据;
[0014] 2)场景的加速结构构建
[0015] 根据步骤1)获得的几何数据,在CPU与GPU上并行构建场景的KD-Tree加速结构;
[0016] 3)数据冗余存储
[0017] 将步骤1)获得的几何数据、材质数据、场景渲染参数和初始图像数据均分别复制到CPU和GPU的存储空间内;
[0018] 4)渲染引擎运行
[0019] 根据步骤1)获得的几何数据、材质数据、场景渲染参数、初始图像数据以及步骤2)获得的场景的KD-Tree加速结构,采用光线跟踪算法,分别在CPU与GPU上并行运行渲染引擎;
[0020] 5)显示
[0021] 将步骤4)运行渲染引擎获得的渲染结果图像复制到CPU端上,进行显示。
[0022] 所述步骤2)具体为:在建立KD-Tree加速结构过程中,判断当前结点的三角面片数量是否大于等于预设的阈值T,若是,该当前结点是大结点,在CPU上根据莫顿码构建KD-Tree加速结构,若否,该当前结点是小结点,在GPU根据SAH代价函数构建KD-Tree加速结构。
[0023] 所述阈值取值范围为30-34个。
[0024] 所述在CPU上根据莫顿码构建KD-Tree加速结构的过程包括以下步骤:
[0025] A:引入高度为h的满二叉树,将大结点划分为n×n的均匀栅格,且h与n满足:2h=n2。
[0026] B:为每个栅格分配一个反应场景位置的莫顿码,并针对大结点中的所有三角面片,将三角面片的AABB的重心作为代表点,每个三角形面片根据代表点只对应一个栅格,则该满二叉树中每个节点对应场景中的一个栅格,将栅格内的莫顿码作为节点的值。
[0027] C:采用二叉排序树的插入方法将包含三角形面片的栅格作为新叶子节点插入到满二叉树中,得到平衡二叉树;
[0028] D:从平衡二叉树叶子节点向上,判断节点是否为多余节点,若为多余节点则将其删除,得到最终的平衡二叉树,即为根据莫顿码构建的KD-Tree加速结构。
[0029] 所述步骤D具体为:
[0030] D1:令所插入的新叶子节点均为必要节点,除插入的新叶子节点外,剩余平衡二叉树的叶子节点均为多余节点,并删除;
[0031] D2:从下向上依次对每层节点进行判断,直到根节点为止,若该层节点的叶子节点只有一个必要节点,则该层节点为多余节点,并被该层节点的必要节点取代,若该层节点的叶子节点有两个必要节点,则该层节点为必要节点;
[0032] D3:确定必要节点,并将多余的节点删除后,将必要的节点连接起来,得到根据莫顿码构建的KD-Tree结构。
[0033] 所述在GPU根据SAH代价函数构建KD-Tree加速结构的过程中,将左右孩子结点的三角面片面积用通过按照分割面划分之后的左右结点包围盒的面积近似代替,同时将结点总的三角面片的表面积用该结点的包围盒近似代替。
[0034] 所述步骤4)具体为:
[0035] 41)根据场景渲染参数和初始图像数据生成初始光线;
[0036] 42)遍历场景的KD-Tree加速结构,进行光线与三角面片的求交运算,得到交点位置;
[0037] 43)根据场景渲染参数和交点位置生成一条阴影测试光线,并遍历场景的KD-Tree加速结构,获得初始图像数据内像素点的阴影程度;
[0038] 44)基于光照明模型,根据像素点的阴影程度,得到初始图像数据内像素点的颜色值;
[0039] 45)判断交点位置是否生成二级光线,若是,跳转步骤42),若否,根据像素点的颜色值输出渲染结果图像。
[0040] 所述材质数据包括材质漫反射系数、镜面反射系数、环境光的漫反射系数以及纹理贴图。
[0041] 所述场景渲染参数包括光源的位置、视角和视点的位置。
[0042] 与现有技术相比,本发明具有以下优点:
[0043] 1)本发明提出适用于CPU与GPU的空间加速结构构建方式,充分参考CPU与GPU的计算能力与计算特点,使之适用于CPU与GPU混合的硬件结构上,具有实现成本低,资源利用率高,安全性高、灵活性好等优点。
[0044] 2)本发明在确定大小结点的划分后,针对大结点没有采用简单的空间中分方法,而是针对大结点中场景数据较少的特点,将Morton Code的空间排序方法与KD-Tree相结合,最终实现一种更为高效且划分质量较高的大结点剖分方法。
[0045] 3)渲染引擎过程中光线求交阶段,采用的场景加速结构为划分大小结点,并在大结点中应用基于Morton code的Kd-tree构建方式,在小结点中应用基于SAH的Kd-tree构建方式,以此来达到在并行渲染的情况下获得更优的空间剖分结果。
[0046] 4)对CPU与GPU间数据交互进行了优化,采用数据冗余存储的方式,减少了渲染过程中CPU与GPU的数据通信。附图说明
[0047] 图1为基于CPU与GPU混合的渲染方法的流程示意图;
[0048] 图2为满二叉树的结构示意图;
[0049] 图3为将场景划分为4×4的均匀栅格的示意图;
[0050] 图4为将包含三角形面片的栅格作为新叶子节点插入到满二叉树的示意图;
[0051] 图5为删除多余节点得到根据莫顿码构建的KD-Tree加速结构的示意图,其中,(5a)为判断必要节点和多余节点的示意图,(5b)为删除多余节点后的平衡二叉树示意图,(5c)为删除多余节点后获得的场景空间KD-Tree的剖分依据示意图,(5d)为KD-Tree加速结构对应的空间的剖分平面示意图;
[0052] 图6为渲染引擎运行的流程示意图。

具体实施方式

[0053] 下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
[0054] 对于一种渲染方法,是将一个三维场景转化为图片的过程。在渲染任务开始前,将一个三维场景在建模软件中的表达转化为渲染引擎可以读取和识别的数据表达方式。场景中包括了摄像机,几何体,光源,材质,贴图纹理等信息。用户提交一个包含完整信息的场景数据文件包,渲染引擎可以识别这些文件中所描述的摄像机,几何体,光源等信息。在将整个场景数据读入后,开始渲染算法,着色并输出图像。
[0055] 如图1所示,一种基于CPU与GPU混合的渲染方法包括以下步骤:
[0056] 1)场景构建:
[0057] 通过外部模型的读入将模型的几何数据和材质数据保存起来,这部分通过CPU端进行读入,其中几何数据包括场景中各个顶点坐标、法向量、纹理坐标以及面片的组织形式等三角面片的数据;材质数据包括材质漫反射系数、镜面反射系数、环境光的漫反射系数以及纹理贴图等。同时在构建场景时设置光源的位置、视角、视点的位置等场景渲染参数以及生成图形的像素值等初始图像数据。
[0058] 顶点坐标、法向量、纹理坐标及面片组织形式,都会在判断初始光线与场景相交后的二级光线的走向。并且,此四项数据将是光线相交测试时,构造加速结构的基础数据。三角形的数据可以由几何数据中的顶点坐标及法向量数据计算得到。材质数据在光线求交时,用于判断光线与场景表面相交后,二级光线的走向。
[0059] 2)场景的加速结构构建:
[0060] 根据步骤1)获得的几何数据等场景数据,生成场景的加速结构;本发明中选用KD-Tree作为场景的加速结构。在生成场景的KD-Tree时,SAH代价计算耗费时间,将KD-Tree划分在CPU与GPU上实现。
[0061] 步骤2)中KD-Tree空间加速结构建立的具体过程为:判断当前结点的三角面片数量是否大于等于预设的阈值T,阈值取值范围为30-34个,若是,该当前结点是大结点,在CPU上根据莫顿码构建KD-Tree加速结构,若否,该当前结点是小结点,在GPU根据SAH代价函数构建KD-Tree加速结构,在SAH分割中计算所有采样位置的SAH代价,挑选出代价最低的平面,按照这个平面将结点分成两个孩子结点,将结点内的三角形划分到相应的孩子结点内。
[0062] 单纯在GPU构建KD-Tree时,上层大结点耗时较多,这是因为构建KD-Tree的上层大结点时,结点数目较少,并行粒度较小。这与GPU适合并行粒度较大工作的特点不符,因此上层在GPU上并行构建的效果并不好。在CPU与GPU的混合平台上,结合双层并行思想,利用CPU构建KD-Tree的上几层,当KD-Tree的层数达到某个限值的时候(此时并行效果好),再利用GPU来构建剩下的层数。
[0063] 根据上述思想,将KD-Tree分为上层大结点部分和下层小结点部分。
[0064] 对于KD-tree内的几何结点在划分大小结点时设置阈值,本发明中将阈值设为T=32,即三角形数目大于等于32的认为此结点为大结点,三角形数目小于32的为小结点。
[0065] 对于大结点,在CPU上根据莫顿码构建KD-Tree加速结构的过程包括以下步骤:
[0066] A:引入高度为h的满二叉树,将大结点划分为n×n的均匀栅格,且h与n满足:2h=2
n。
[0067] B:为每个栅格分配一个反应场景位置的莫顿码,并针对大结点中的所有三角面片,将三角面片的AABB(Axis-Aligned Bounding Boxes,包围盒)的重心作为代表点,每个三角形面片根据代表点只对应一个栅格,则该满二叉树中每个节点对应场景中的一个栅格,将栅格内的莫顿码作为节点的值。
[0068] C:采用二叉排序树的插入方法将包含三角形面片的栅格作为新叶子节点插入到满二叉树中,得到平衡二叉树;
[0069] D:从平衡二叉树叶子节点向上,判断节点是否为多余节点,若为多余节点则将其删除,根据Morton Code判断剩余必要节点之间的父子关系,得到最终的平衡二叉树,即为根据莫顿码构建的KD-Tree加速结构。
[0070] 步骤D具体为:
[0071] D1:令所插入的新叶子节点均为必要节点,除插入的新叶子节点外,剩余平衡二叉树的叶子节点均为多余节点,并删除;
[0072] D2:从下向上依次对每层节点进行判断,直到根节点为止,若该层节点的叶子节点只有一个必要节点,则该层节点为多余节点,并被该层节点的必要节点取代,若该层节点的叶子节点有两个必要节点,则该层节点为必要节点;
[0073] D3:确定必要节点,并将多余的节点删除后,将必要的节点连接起来,得到根据莫顿码构建的KD-Tree结构。
[0074] 根据莫顿码构建KD-Tree加速结构的举例说明:
[0075] 首先针对场景空间引入一个理论上的满二叉树,考虑到下面我们将对场景使用莫顿码,记此满二叉树的高度为h,则h需满足如下公式:2h=n2,其中n为场景空间中每个坐标方向上栅格的个数,实际应用中可根据CPU的并行能力,对n的值进行灵活选取,例如CPU为8线程,则n可取8的倍数,16或32等。原则上,CPU可并行处理的线程越多,n取值越大,场景空间划分的越精细,最终渲染效果越好。图2为一棵这样的满二叉树,树的高度为4。
[0076] 第二步,在已知的整个场景空间AABB中,将空间分为n×n的均匀栅格,并根据莫顿曲线为每个栅格分配对应的莫顿码;针对上述满二叉树,我们也为树中所有节点分配一个莫顿码,这样,二叉树中所有节点都对应完成划分后的场景中的一个栅格。
[0077] 以上准备工作完成后,下面要完成的工作是根据已拥有对应莫顿码的图元快速构建场景的加速结构,即KD-Tree。本发明采用一种路径压缩的算法构建KD-Tree。
[0078] 根据Morton Code,在同一子空间中的图元很自然的被组织到一起,将这些子空间作为新的叶子节点加入到前面所述的满二叉树中。此时的树已经由满二叉树变为普通的平衡二叉树,而这些新插入的叶子节点将是最终所要构建的目标KD-Tree的叶子节点,如图3所示。由于场景中的图元一般为不规则的分布,因此很多莫顿码所代表的空间中并不包含任何图元。这也表明,在得到的平衡二叉树中实际上存在很多多余的节点,例如图3中的节点“000001”和“000011”以及他们的父节点“000010”,并没有对应任何图元;实际上,只有那些在上升到父节点时,莫顿码的有效位经历过转换的节点才是必要的。图4中,实线圈表示必要的节点,虚线圈表示多余的节点。判断节点是否为必要节点的具体步骤如下:
[0079] (1)所插入的新叶子节点均为必要节点;除新加入的叶子节点外,剩余平衡二叉树的叶子节点均为多余节点;
[0080] (2)对上层祖先节点进行判断,若节点只有一个必要子节点,则该节点为多余节点,可被其子节点取代;若节点有两个子节点且两个子节点均为必要节点,则此节点为必要节点;
[0081] (3)从下向上依次对每层节点进行判断,直到根节点为止;
[0082] 确定必要节点后,将必要的节点连接起来,树中父节点和子节点的关系通过其各自的莫顿码确定,并将多余的节点删除,便得到了最终的KD-Tree结构,因此也确定了空间的剖分平面。整个过程如图5所示,其中图(5c)为删除多余节点后,获得场景空间KD-Tree的剖分依据,即横纵坐标上的剖分面。x,y为将场景空间划分为均匀栅格后,横纵坐标的刻度(在图3中以二进制表示),此图中将二进制变换为十进制表示。
[0083] KD-Tree的下层小结点部分在GPU上构建,对于KD-tree中的小结点的生成我们采用代价函数采样来计算最优划分平面,而基本的SAH代价函数存在以下问题,第一,需要计算按照给定划分位置v左右结点所包含的三角形数,以及在划分位置v产生的左右孩子结点的表面积,同时需要计算该结点总的三角形的表面积;第二,采用三角形面片的包围盒或者是三角形面片与当前结点的包围盒相交部分的包围盒作为候选分割面,这样每次每个三角形会产生六个分割平面,计算所有候选的分割面的SAH值,计算量巨大。
[0084] 为了解决传统SAH公式计算量过大这一问题,我们将左后孩子结点的三角形面积通过按照分割面划分之后的左右结点包围盒的面积进行近视代替,同时该结点总的三角形的表面积用该结点的包围盒计算。而候选的分割面通过对包围盒(是三角形面片与当前结点的包围盒相交部分的包围盒)从最小值到最大值采样获得分割平面。通过将面积进行合理的近似,减少了计算孩子结点中三角形面积的计算量。
[0085] 在计算SAH分割位置时,本发明给出的采样值为16,在GPU上并行计算在各个采样位置的左右孩子结点内的三角形数目,然后计算得到每个采样位置的SAH代价值。
[0086] 3)数据冗余存储:
[0087] 为避免数据在CPU与GPU之间由于数据交换带来的时间浪费,在进行渲染之前,将渲染计算所需要的数据通过内存复制到GPU的全局存储空间内,通过在GPU全局存储空间内对数据进行冗余存储,用空间换取时间。存储的冗余数据作为GPU渲染的基本数据,这些数据为下一步渲染引擎输入的一部分。使用空间换取时间,通过冗余存储减少CPU与GPU的通信耗时。
[0088] 4)渲染引擎运行:
[0089] 根据步骤1)获得的几何数据、材质数据、场景渲染参数、初始图像数据以及步骤2)获得的场景的KD-Tree加速结构,采用光线跟踪算法,分别在CPU与GPU上并行运行渲染引擎。每一条初始光线都按照渲染引擎的流程并行计算。
[0090] 如图6所示,步骤4)具体为:
[0091] 步骤41):初始光线生成
[0092] 本发明采用的视点位置为物体包围盒的中心,在z轴方向加上场景大小,设置视角为45度。根据视点位置、视角、图形的长宽,可以确定图形的左边最下边的位置以及每个像素的大小。每一条初始光线按照采样策略进行生成,根据采样的多少在GPU上形成相应的初始光线,每一个光线的形成都是在GPU上按照给定的视点位置和每个像素的位置并行计算得到。
[0093] 步骤42):光线求交
[0094] 在进行光线与场景中的面片进行求交得到交点位置,首先就是遍历场景的KD-tree,其中对于KD-tree的遍历过程为:当遍历到包含较少面片的叶子节点,然后进行光线与三角形面片的求交运算。由于场景中的物体都是通过三角形面片进行表示,所以光线求交过程就是计算光线与三角形面片的交点,交点的法向量为三角形三个顶点的线性插值来计算,纹理坐标也为三个顶点的线性插值。为了保证所绘制曲面的明暗过渡,可将各个三角形内部的法向量通过三个顶点的法向量的线性插值得到,光线与面片相交时,生成的二级光线走向是根据三角形面片的法向量为法向量计算反射角度的。
[0095] 步骤43):阴影测试
[0096] 阴影效果对于产生真实感图像上具有重要的作用,光线跟踪算法通过阴影测试产生阴影效果。当确定光线和三角形面片交点后,在光源与交点之问生成一条阴影测试光线,并遍历KD-tree,获得初始图像数据内像素点的阴影程度。在遍历的过程中新生成的阴影测试光线与物体没有相交,则交点处在光源的照射下,需要考虑光源产生的光亮度贡献,否则忽略光源的照射,将光源的贡献设置为零。由于对光源贡献的不同处理,最终在生成的图像上会产生阴影效果。阴影测试的输出为针对每个光源有一个输出值,类型为布尔型,表明该物体是否可以被该光源照射到。该被测物体若可被某光源照射到,则会在照射点生成二次光线。
[0097] 步骤44):光照强度计算
[0098] 每个像素点的颜色值等于每个像素中交点处的颜色值,而每次每个交点的光亮度值利用Phong光照明模型计算。在一个像素点发射多条光线时,需要对着多条光线分别进行跟踪,而像素的颜色值是这多条光线的相应的加权计算值。则基于光照明模型,根据像素点的阴影程度,得到初始图像数据内像素点的颜色值;
[0099] 步骤45):二级光线生成
[0100] 判断交点位置是否生成二级光线,若是,利用反射定律在交点处生成次级光线,直到生成的深度到达一定的值或者次级光线对于显示像素光亮度的贡献小于给定的阈值,跳转步骤42),若否,根据像素点的颜色值输出渲染结果图像。本发明中在交点处为了简化处理仅仅生成反射光线,将透射光设置为零。
[0101] 基于KD-Tree加速结构的光线追踪方法,将通过一种双层并行的方式,用于在CPU与GPU的并行结构中实现快速高效的离线渲染,并输出渲染生成的原始帧图。
[0102] 5)显示:
[0103] 将步骤4)渲染引擎最后计算得到的每个点的光照强度等图片信息复制到CPU端上进行显示。即对所述渲染生成的原始帧图,按照流化(帧的原始编号,原始编号根据帧在场景中的时间顺序确定)进行整合和排序,输出排序的原始帧图,生成最终效果图。
[0104] 综上,本发明摈弃现有使用纯CPU、纯GPU的渲染模式,充分利用CPU和GPU的计算能力,对光线追踪渲染中的加速结构KD-Tree建立,使用双层并行思想,将大规模的渲染任务,交给CPU与GPU并行处理。总体构建适合离线的高质量真实感图形渲染,针对现有光线追踪渲染方式计算量大,耗时较长的问题,提出了灵活高效的解决办法。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈