一种基于矩阵行列采样和深度学习进行多光源渲染的方法与流程

文档序号:15696274发布日期:2018-10-19 19:05阅读:302来源:国知局
一种基于矩阵行列采样和深度学习进行多光源渲染的方法与流程

本发明涉及计算机图像处理领域,具体涉及一种基于矩阵行列采样和深度学习进行多光源渲染的方法。



背景技术:

对具有间接光照,高动态范围环境光照,且具有多个直接光源的复杂场景进行渲染是一项很有挑战的工作。研究表明,这类问题可以通过转化为多光源问题来获得解决,即所有光源可以被转化成点光源的集合,从而将间接光照的渲染问题转化成一个多点光源问题。使用数以千计的点光源进行直接渲染显然是非常困难的。lightcuts框架提供了一种可扩展的方法来解决多点光源问题,利用可见性剔除算法通过基于cpu的光线追踪器可以在几分钟内完成计算。

在实际应用中,光源与被照射物体存在相对位置关系,需要针对光源与物体的位置关系进行渲染。在交互场景下,比如电影或结构设计过程中,需要及时响应光源与物体的相对位置变化,进行实时渲染,这会带来极大的运算量。现有方法是通过预处理来解决这个问题,即事先针对各种位置关系完成渲染,在交互阶段直接读取渲染结果。这样把计算总量进行了平摊。但是这种方法有两个重大缺陷:1、占用大量内存存储预处理数据。2、使用这种方法的场景,只有光源或物体单方面可以活动。这大大限制了该方法的应用范围。

gpu作为专门处理图像的硬件,内部具有加速能力,包括阴影映射算法以及着色器等。为图形渲染计算提供计算加速及并行处理能力。使用gpu进行渲染处理,可以有效降低cpu开销,同时提升渲染计算效率和效果。但是上述算法仍然还是比较耗时,本发明利用深度学习网络来学习对部分绘制图像的补全,进而达到整幅图像绘制的目的。



技术实现要素:

本发明提供了一种基于矩阵行列采样和深度学习进行多光源渲染的方法,将复杂的三维场景下的多光源渲染问题转化为训练深度神经网络模型的问题,利用训练好的深度神经网络模型可以快速准确进行多光源渲染。

一种基于矩阵行列采样和深度学习进行多光源渲染的方法,包括:

步骤1,根据三维场景建立光照矩阵,该光照矩阵中,每一列表示一个光源照射的所有采样点,每一行表示一个采样点上的所有光源照射;

步骤2,从光照矩阵中随机抽取若干行,得到一次随机缩减矩阵;

步骤3,在一次随机缩减矩阵中随机抽取若干行,得到二次随机缩减矩阵;

步骤4,针对不同视点,分别绘制一次随机缩减矩阵图像和二次随机缩减矩阵图像;

步骤5,利用一次随机缩减矩阵图像和二次随机缩减矩阵图像对训练深度神经网络模型;

步骤6,在实时绘制高真实感图像时,首先绘制二次随机缩减矩阵图像,然后将二次随机缩减矩阵图像输入训练好的深度神经网络模型,输出得到完整的高真实感图像。

一次随机缩减矩阵中的行数足够多时,一次随机缩减矩阵图像可以认为是整个三维场景完全绘制得到的图像,当深度神经网络模型训练好之后,只要将二次缩减矩阵图像输入到训练好的深度神经网络模型,就可以得到一次随机缩减矩阵图像,也即得到整个三维场景完全绘制得到的图像,大大提高绘制的效率。

作为优选,步骤4中,绘制一次随机缩减矩阵图像的步骤的具体过程如下:

步骤4-a-1,使用采样分簇,将一次随机缩减矩阵划分为若干簇,在每个簇中,选取完整的一列作为代表,根据rgb颜色通道对该列进行渲染,获得该列的完整光照采样;

步骤4-a-2,对代理列的光照采样进行扩展,得到每个簇在rgb通道上的光照强度总和;

步骤4-a-3,将各簇的光照强度合并,得到多光源渲染结果。

作为优选,步骤4-a-1中的采样分簇,包括如下步骤:

步骤4-a-1-1,在一次随机缩减矩阵中随机选择个列作为簇中心,将与簇中心最近的点划分到簇中心所代表的簇中,c为一次随机缩减矩阵中的列数;

步骤4-a-1-2,针对一次随机缩减矩阵中某一列,优先在远离该列的列中随机选取列,当某一列被选中时,按固定比例增加该列其权重,直至个列被选中;

步骤4-a-1-3,将权重较大的列作为簇中心,依据与簇中心的距离将一次随机缩减矩阵划分为若干簇。

作为优选,步骤4中,绘制二次随机缩减矩阵图像的步骤的具体过程如下:

步骤4-b-1,依据分簇因子对一次随机缩减矩阵进行分簇,分簇因子为每簇的行数;

步骤4-b-2,从所分的簇中随机选择一些簇,在每个随机选出的簇中,选取完整的一列作为代表,根据rgb颜色通道对该列进行渲染,获得该列的完整光照采样;

步骤4-b-3,对代理列的光照采样进行扩展,得到每个簇在rgb通道上的光照强度总和;

步骤4-b-4,将各簇的光照强度合并,得到多光源渲染结果。

作为优选,步骤5中,图像对的数量不少于10000。

每个视点对应一个一次随机缩减矩阵图像和二次随机缩减矩阵图像的图像对,图像对的数量不少于10000,也即视点的数量不少于10000。

本发明提供的基于矩阵行列采样和深度学习进行多光源渲染的方法,将复杂的三维场景下的多光源渲染问题转化为训练深度神经网络模型的问题,利用训练好的深度神经网络模型可以快速准确进行多光源渲染。

附图说明

图1为本发明中深度神经网络模型的示意图。

具体实施方式

下面结合附图,对本发明基于光照矩阵行列采样和深度学习进行多光源渲染的方法做详细描述。

步骤1,根据场景建立具有多光源的光照矩阵,光照矩阵中,每一列表示一个光源照射的所有采样点,每一行表示一个采样点上的所有光源照射。

对于具有m个采样点和n个光源的多光源场景,计算所有光源在每个采样点上的贡献之和即可获得完整的场景渲染结果,该问题转化为:一个规格为m×n的光照矩阵a,其中任意元素aij表示光源j在采样点i上的贡献,光照矩阵a中各个元素采用rgb标量,将光照矩阵a中的所有列进行累加,可以获得每个光源在所有采样点上的贡献值。

根据以上公式计算完整光照矩阵的元素,计算复杂度为o(mn)。如果采样点i对于光源j来说不可见,则aij为0,根据实际情况,实际光照矩阵中有大量0元素,即光照矩阵a是低秩的,从光照矩阵中随机抽取r行形成缩减光照矩阵,当r足够大时,就可以包含完整光照矩阵的足够信息,缩减光照矩阵可以看作是完整光照矩阵的抽样版本,通过对缩减光照矩阵进行渲染,可以获得完整光照矩阵的渲染效果。

将光照矩阵a的第j列用表示,全局多光源的渲染结果∑a可以用如下公式表示:

步骤2,从光照矩阵中随机抽取若干行,形成缩减光照矩阵,也即一次随机缩减光照矩阵。

从光照矩阵a中随机选择r行,形成的r×n光照矩阵r,ρj是r的列,将r中的元素从采用rgb标量转换为使用rgb三元组的2-范数进行标量,ρj是完整列的抽样版本,称作一次随机缩减列,光照矩阵r是完整的光照矩阵a的一个缩小版本。

通过将光照矩阵r分成多个部分(即多个簇)分别进行处理,可以将计算复杂度降低到o(m+n)。通过对各簇分别进行处理,合成完整光照矩阵r,可以获得近似结果,分簇方法影响了最终结果的误差度,所以需要依据误差估计来确定分簇方法,使最终结果的误差最小。

步骤3,针对不同的视点,分别绘制一次随机缩减矩阵图像和二次随机缩减矩阵图像,具体的实施细节如下:

3.1,一次随机缩减矩阵图像的绘制

在三维场景中随机选择10000个视点进行绘制,对每一个视点绘制图像进行编号,分别为v1........v10000。针对每一个视点的图像,绘制过程如下:

对于规格为m×n的光照矩阵a,将n行分为l个簇c1,c2,…,cl,缩减列的范数||ρj||为簇ck中光源j在整个图像上光照强度。

定义sk为簇ck的全部光照强度的测量值,定义簇ck的光照强度为可以获得以下公式:

其中

其中第j列在簇ck中的百分比为xa代表光照矩阵a光照强度的估计量。

在每个簇中,根据百分比选取缩减光照矩阵范数代表列,一般选取50%以上作为缩减的百分比。当所有||ρj||>0时,可以获得以下等式:

由此可以看出,e[xa]实际上是∑a的无偏估计量。根据e[xa]=∑a,完整光照矩阵a的误差的评估公式可以表示为:e[||xa-∑a||2],最有效的分簇法即是使得e[||xa-∑a||2]的值最小化。

光照矩阵r是从光照矩阵a中随机选择r行形成的r×n光照矩阵,由于是独立的,xr的预期误差就是的预期误差之和。将随机变量xr及其对应的评估值∑r分别标记为x和x’,可以将e[||xa-∑a||2]以如下公式表示:

将簇度量e[||xr-∑r||2]以如下公式表示:

表示表示

通过以上推导获得如下等式:

将任意两个向量x和y之间的距离定义为

d代表同一个簇中两个光源的差异度量,可以通过如下公式表示:

是x与y夹角的余弦值。两个光源在图像上的光照强度的贡献可以通过它们之间的夹角来评估。

通过以上公式推导,分簇引入的误差可以通过以下公式表示:

其中,x表示像素点,w表示像素点对应的权重,k表示簇数,根据先前e[||xr-∑r||2]的公式,定义

根据以上误差评估公式,分两步对一次随机缩减矩阵进行分簇:

步骤3-1,使用采样分簇将光照矩阵分为部分,(c为光照矩阵r的列数),具体方法是:随机选择个点(这里的点等同于光照矩阵r中的列)作为簇中心点,并依据距离d的计算公式将与簇中心点最近的点划分到这些簇中心点所代表的簇中。

定义αi为所有入射到点i的开销之和(即光强之和):

将pi作为点i在αi中的比例,针对点i,优先在所有点中距离点i较远的点中随机选择点,当点i被选中时,设定其权重为1/pi。点i每被选中一次,将权重增加1/pi,迭代进行这种处理,直到点个点被选中。然后,根据各点权重确定簇的中心点(权重较大的点作为簇中心点),然后将所有点基于与簇中心点的距离d进行簇划分。

步骤3-2,使用自顶向下分离法完成全部分簇。基于前一步完成的分簇,对已经分簇的光照矩阵进行进一步分解,具体方法如下:将点投射到随机线上(r维空间),然后找到将线分成两段的最佳点。通过这种方式将一个已经分簇的光照矩阵r分成两个部分,即将分簇数增加一倍。

通过以上步骤,可以将光照矩阵r分成多个部分,并且使最终的计算结果误差最小。

对一次随机缩减矩阵中的列按簇进行划分,可以获得k个簇c1,c2,…,ck。在每个簇中,选取完整一列作为代表,根据rgb颜色通道,分别进行渲染处理,使用gpu上的着色器对该列进行渲染,获得该列的完整光照采样值。

定义为着色后的ρi,根据公式对簇代表进行扩展,获得每个簇在rgb通道上的光照强度总和。

在每个簇上使用该方法进行处理,可以获得各簇c1,c2,…,ck的rbg光照强度。

将各簇合并,获得一次随机缩减矩阵r中各行的光照强度之和,完成渲染。

将前一步骤获得的k个经过渲染处理的簇进行合并,可以获得原始光照矩阵r的所有列之和,即获得原始场景的多光源渲染结果。

3.2二次随机缩减光照矩阵绘制

类似一次随机缩减光照矩阵绘制,在三维场景中随机选择10000个视点进行二次随机缩减光照矩阵绘制,对每一个视点绘制图像进行编号,分别为v‘1........v’10000。针对每一个视点的图像,具体的绘制方法如下:

将一次随机缩减矩阵r按照行进行分簇,具体的划分可以依据一个分簇因子来规定,比如,分簇因子为2就是每两行进行分簇,如果为5,也就是每5行进行分簇。一旦分簇完成的话,从所分的簇中随机选择一些簇来进行绘制,这样绘制出来的图像是有缺失的,因为随机选择一些簇,导致一些图像像素没有得到计算。一旦随机选择好一些簇以后,绘制的方法类似一次缩减光照矩阵的绘制;

步骤4,利用一次随机缩减矩阵和二次缩减光照矩阵绘制的图像对来训练一个深度神经网络模型。

这里的深度神经网络模型如图1所示,图1中,x代表一次缩减光照矩阵生成的图像,y代表二次缩减光照矩阵生成的图像,g和f分别为深度生成网络模型,表示一个转换函数,dx和dy分别代表判别深度神经网络模型,dx学习一次缩减光照矩阵的图像特征,dy学习二次缩减光照矩阵的图像特征。

输入10000个一次缩减光照矩阵和二次缩减光照矩阵的图像对来进行训练,训练的时候,要使得损失函数最小,这里的损失函数就是一次缩减光照矩阵绘制的图像通过深度神经网络模型转换成二次缩减光照矩阵绘制的图像,然后再次从二次缩减光照矩阵绘制的图像转换回一次缩减光照矩阵绘制的图像,转换回来的图像和输入的一次缩减光照矩阵绘制的图像差异,当这个损失函数达到最小的时候,认为整个神经网络已经训练好了。

步骤5,利用训练好的深度神经网络模型,在实时高真实感绘制的时候,首先绘制二次缩减得到的光照矩阵图像,然后将该图像输入到深度神经网络模型中,深度神经网络模型的输出图像,就是所需的完整绘制图像。

本发明将复杂场景下的多光源渲染问题转化为深度神经网络模型的训练学习问题,通过深度神经网络模型的处理得到了较好地绘制图像,提升了渲染效率和实时性,可以应用于对渲染有实时性和高质量要求的场景。

根据上述说明书的揭示和教导,本发明所属领域的技术人员还可以对上述实施方式进行适当的变更和修改。因此,本发明并不局限于上面揭示和描述的具体实施方式,对本发明的一些修改和变更也应当落入本发明的权利要求的保护范围内。此外,尽管本说明书中使用了一些特定的术语,但这些术语只是为了方便说明,并不对本发明构成任何限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1