基于矩阵行列采样进行多光源渲染的方法

文档序号:6623035阅读:209来源:国知局
基于矩阵行列采样进行多光源渲染的方法
【专利摘要】本发明公开了一种基于矩阵行列采样进行多光源渲染的方法,包括如下步骤:步骤1,根据场景建立光照矩阵,所述光照矩阵中,每一列表示一个光源照射的所有采样点,每一行表示所有光源都进行照射的一个采样点;步骤2,从多光源矩阵随机抽取若干行,形成缩减矩阵;步骤3,将缩减矩阵分簇,对各簇进行渲染;步骤4,将各簇合并,获得原始的光照矩阵各行的光照强度之和,完成渲染。本发明将复杂场景下的多光源渲染问题转化为矩阵行列采样问题,通过对矩阵进行分块处理,提升了渲染效率,大大降低了内存开销,同时提升了渲染的实时性。可以应用于对渲染有实时性和高质量要求的场景。
【专利说明】基于矩阵行列采样进行多光源渲染的方法

【技术领域】
[0001]本发明设计计算机图形领域,尤其涉及一种基于矩阵行列采样进行多光源渲染的方法。

【背景技术】
[0002]对具有间接光照,高动态范围环境光照,且具有多个直接光源的复杂场景进行渲染是一项很有挑战的工作。研究表明,这类问题可以通过转化为多光源问题来获得解决,即所有光源可以被转化成点光源的集合,从而将间接光照的渲染问题转化成一个多点光源问题。使用数以千计的点光源进行直接渲染显然是非常困难的。Lightcuts框架提供了一种可扩展的方法来解决多点光源问题,利用可见性剔除算法通过基于CPU的光线追踪器可以在几分钟内完成计算。
[0003]在实际应用中,光源与被照射物体存在相对位置关系,需要针对光源与物体的位置关系进行渲染。在交互场景下,比如电影或结构设计过程中,需要及时响应光源与物体的相对位置变化,进行实时渲染,这会带来极大的运算量。现有方法是通过预处理来解决这个问题,即事先针对各种位置关系完成渲染,在交互阶段直接读取渲染结果。这样把计算总量进行了平摊。但是这种方法有两个重大缺陷:1、占用大量内存存储预处理数据。2、使用这种方法的场景,只有光源或物体单方面可以活动。这大大限制了该方法的应用范围。
[0004]GPU作为专门处理图像的硬件,内部具有加速能力,包括阴影映射算法以及着色器等。为图形渲染计算提供计算加速及并行处理能力。使用GPU进行渲染处理,可以有效降低CPU开销,同时提升渲染计算效率和效果。


【发明内容】

[0005]本发明公开了一种基于矩阵行列采样加速多光源渲染的方法,将复杂场景下的多光源渲染问题转化为矩阵行列采样问题。
[0006]一种基于矩阵行列采样进行多光源渲染的方法,包括如下步骤:
[0007]步骤1,根据场景建立光照矩阵,所述光照矩阵中,每一列表示一个光源照射的所有米样点,每一行表不所有光源都进行照射的一个米样点;
[0008]步骤2,从多光源矩阵随机抽取若干行,形成缩减矩阵;
[0009]步骤3,将缩减矩阵分簇,对各簇进行渲染;
[0010]步骤4,将各簇合并,获得原始的光照矩阵各行的光照强度之和,完成渲染。
[0011]在所述光照矩阵中,如采样点i对于光源j来说是不可见的,则元素^]值为O。根据多光源场景构建矩阵,将多光源光照采样问题转化为矩阵行列采样问题。将光源和采样点进行整体处理,可以有效平摊整体渲染处理开销。根据光照特性,矩阵A具有稀疏性。利用矩阵A的低秩性,从中随机选择行形成的rXn矩阵定义为R,矩阵R是完整图像矩阵的一个缩小版本,称为缩减矩阵。当r足够大时,缩减列就可以包含完整副本的足够信息。即缩减矩阵R中包含完整矩阵A的所有信息,可以通过R恢复出完整矩阵A。
[0012]为了方便计算,可选的,在所述光照矩阵中,各元素为RGB标量,在步骤2中缩减矩阵的各个元素转换为使用RGB三元组的2-范数。
[0013]通过将矩阵A分成多个部分来分别进行处理可以有效计算复杂度,并可以提升计算并行度。可选的,在步骤3中,将缩减矩阵进行分簇的方法如下:
[0014]步骤3-1,首先设定分簇数目为L,使用采样分簇将矩阵分为.L个簇;
[0015]步骤3-2,再使用自顶向下分离法完成全部分簇,得到L个簇。
[0016]其中L一般选择3的倍数。基于误差预期,确定分簇策略,使分簇引入的误差最小。首先根据各列之间的影响关系,将相互联系较大的列划分到一个簇里。进一步根据前面的分簇结果,在簇内确定最佳分簇点。最终完成对缩减矩阵的分簇处理。利用GPU阴影投射功能计算列之间的影响因素,降低了 CPU开销,提升了分簇处理效率。将分簇过程分成两步进行,提升了分簇处理速度,也保证了找到最佳分簇点,降低分簇引入的误差。
[0017]具体的分簇方法根据如下参考文献进行计算:SCHULMAN,L.J.1999.Clusteringfor edge-cost minimizat1n.Electronic Co lloquium on Computat1nalComplexity (ECCC) 6, 035.
[0018]在步骤3-1中,将采样分簇将矩阵分为|l个簇的具体方法为:随机选择-L个列作为簇中心,将各列划分到离其距离最近的簇中心所代表的簇中。
[0019]步骤3-1中,簇中心与列之间距离的计算公式如下:

I
[0020]d(x, y) — — IIxIl * HyII.(I — cos ( x, y ))
[0021]其中,X与y任意一者为簇中心,另一者为待比较距离的列。
[0022]其中C0S(X,y)为两列所表示的向量之间的夹角。
[0023]步骤3中,对各簇渲染的方法为,在每个簇中选取代表列进行渲染,获得该列的光照采样值,利用扩展公式对该簇的代表列进行扩展,获取该簇的光照强度,对于簇Ck,扩展公式如下:
[0024](Y IlPm ID/Up"Il
[0025]其中,Pj为簇Ck的代表列,Pf:为着色后的PP符号I I I I为2-范数计算符号,Σηι€€? Ilpm Il表示簇Ck中所有列的2-范数之和。
[0026]在簇中选取完整一列作为代表,根据RGB颜色通道,分别进行渲染处理,使用GPU上的着色器对该列进行渲染,获得该列的完整光照采样值。
[0027]基于代表列的渲染结果,结合代表列缩减矩阵的光照强度分布比例,获得缩减矩阵所覆盖的所有完整列在RGB通道上的光照强度总和。完成每个簇的光照强度计算。
[0028]本发明将复杂场景下的多光源渲染问题转化为矩阵行列采样问题,通过对矩阵进行分块处理,提升了渲染效率,大大降低了内存开销,同时提升了渲染的实时性。可以应用于对渲染有实时性和高质量要求的场景。

【具体实施方式】
[0029]现结合实施例对本发明进行详细的解释。
[0030]步骤1,根据场景建立光照矩阵,所述光照矩阵中,每一列表示一个光源照射的所有米样点,每一行表不所有光源都进行照射的一个米样点。
[0031]对于具有m个采样点以及η个光源的多光源场景,计算所有光源在每个采样点上的贡献之和即可获得完整的场景渲染结果。该问题可以转化为:一个规格为mXn的矩阵Α,其中任意元素Aij表示光源j在采样点i上的贡献,各个元素以RGB标量。将矩阵中的所有列进行累加,就可以获得每个光源在所有采样点上的贡献值。
[0032]根据以上公式计算完整矩阵的元素,计算复杂度为0(mn)。如果采样点i对于光源j来说是不可见的,则Au为0,根据实际情况,实际矩阵中有大量O元素,即矩阵A是低秩的。从中随机抽取r行形成缩减矩阵,当r足够大时,就可以包含完整矩阵的足够信息,缩减矩阵可以看作是完整矩阵的抽样版本,通过对缩减矩阵进行渲染,可以获得完整矩阵的渲染效果。将A的第j列用表示,全局多光源的渲染结果Σ Α可以用如下公式表示:
[0033]
η


IT a ?
ΔΑ Zj Ψ)
J=I
[0034]步骤2,从多光源矩阵随机抽取若干行,形成缩减矩阵。
[0035]从矩阵A中随机选择r行,形成的rXn矩阵R,P ^是R的列,其中将R中的元素从以RGB标量转换为使用RGB三元组的2-范数(即范数)进行标量,P j是完整列4Pj的抽样版本,称作缩减列,矩阵R是完整的光照矩阵的一个缩小版本。
[0036]通过将矩阵A分成多个部分来分别进行处理可以将计算复杂度降低到0(m+n)。通过对各簇分别进行处理后,合成完整矩阵,可以获得近似结果。分簇方法影响了最终结果的误差度,所以需要依据误差估计来确定分簇方法,使最终结果的误差最小。
[0037]步骤3,将缩减矩阵分簇,对各簇进行渲染。
[0038]对于规格为mXn的矩阵A,将η列分为k个簇C1, C2,…,Q,缩减列的范数| | P」为簇Ck中光源j在整个图像上光照强度。定义Sk:= EjeckIhII,Sk是簇Ck的全部光照强度的测量值,定义簇Ck的光照强度为可以获得以下公式:
_9] χΑ:=^χ^φ4 = ^φι,.^11 Pj 11
[0040]其中第j列在簇Ck中的百分比为M , Xa代表矩阵A光照强度的估计量。
%
[0041]在每个簇中根据百分比选取来为缩减矩阵范数代表列。当所有11 P」I > O时,
可以获得以下等式:
[0042]
S-JI t iiI
E[Xa] = ^ E[Xa] = ^ ^.................1.............j j tPj = ^ ^ cPj = Σα
k=iJc=IjeCi k Il 剛 k= IjeCi
[0043]说明E[Xa]实际上是Σ A的无偏估计量。根据Ε[Χα] =Σ Α,完整矩阵A的误差的评估公式可以表示为:
[0044]ε[| |χΑ- ? aI I2]
[0045]最有效的分簇法即是使得e[I |χΑ- ?α||2]的值最小化。
[0046]R是从矩阵A中随机选择行形成的rXn矩阵,由于X|是独立的,Xk的预期误差就是)?的预期误差之和。将随机变量Xk及其对应评估值Σ κ标记为X和X’,可以将E[| Xa- Σ A| I2]以如下公式表示:
[0047]Ε[||Χα-ΣαΙΙ2] = ^Ε[||Χ-Χ?|2]
[0048]将簇度量E [ I I Xk- Σ κ I 12]以如下公式表示:
LI
E[||xR 一 ErII2] = ^E [||x| -= ^E [|x| - E[x|]||r
kssiIrss 1

?Mt 丄1?--*** J,
「n_V iipiii IPjIl % η % n|f



I
IV1 V1 II II II It 11 —— l|2

= ζΣΣ "p“卜IIpiI1.1b^Pill


k=i ijeCk
[0050]6表示j||,巧表示I^jfe
[0051]通过以上推导获得如下等式:
剛_丨4养办畴脉


k=l IjcCjc
[0053]将任意两个向量X和y之间的距离定义为¢1(?y)= -1M.IIyl.||χ — f||2e将任意两列分别作为向量X和向量y,则d代表同一个簇中两个光源的差异度量(即两列之间的距离),可以通过如下公式表示:

I
[0054]d(x;y) — - ||χ||.\\y\\.(I — cos ( x;y ))
[0055]cos (x,y)=又τγ是X与y夹角的余弦值。两个光源在图像上的光照强度的贡献可以通过它们之间的夹角来评估。
[0056]通过以上公式推导,分簇引入的误差可以通过以下公式表示:
L
[0057]^ ^ Wj * Wj * IN "xi If
k=l IjGCjc
[0058]其中X表示釆样点,w表示釆样点对应的权重,L表示簇数,根据先前E[| Xe- Σ E| I2]的公式,定义X1:= PlsWi ;= Ipil0
[0059]根据以上误差评估公式,分两步对完整矩阵进行分簇:
22
[0060]步骤3-1,使用采样分簇将矩阵分为;L.部分,具体方法是:随机选择=L个点(此
SS
处每个点表示一列)作为簇中心,并依据距离d的计算公式将与簇中心最近的列划分到这些簇中心所代表的簇中。定义a i为所有光源入射到点i的开销之和:

n
[0061]OEj = ^ d ( Pi? Pj )

J=I
[0062]接着重新选择各簇的中心点,在进行选择时,在所有列中优先选离得较远的点,当点i被选中时,设定其权重为1/Pi,其中Pi为点i (即第i列)光源开销在a i的比例,如果点已经被选过了,就将权重增加1/Pi。迭代进行选择,直到选中|L个点,然后根据各列权重确定簇的中心点,然后将所有点基于距离d进行簇划分。





2
[0063]步骤3-2,使用自顶向下分离法完成全部分簇。基于前一步完成的;L.分簇,对已经分簇的矩阵进行进一步分解,具体方法如下:在矩阵中随机划出一条线,每列的r行分为上下两个部分,将点i(iiCj投射到随机线上(r维空间),然后找到将线分成两段的最佳点,得到最终L个簇类。
[0064]通过以上步骤,可以实现对矩阵A的分成L个部分,并且使最终的计算结果误差最小。
[0065]基于上一步骤的分解,对各簇进行渲染。对矩阵A和缩减矩阵中的列按簇进行划分。可以获得L个簇C1, C2,…,Q。在每个簇中,选取完整一列作为代表,根据RGB颜色通道,分别进行渲染处理,使用GPU上的着色器对该列进行渲染,获得该列的完整光照采样值。
[0066]定义Pf为着色后的P」,根据公式GmeCkllpU)/||pi|对簇代表进行扩展。获得每个簇在RGB通道上的光照强度总和。
[0067]在每个簇上使用该方法进行处理,可以获得各簇C1, C2,…,Cl的RBG光照强度。
[0068]步骤4,将各簇合并,获得原始的光照矩阵各行的光照强度之和,完成渲染。
[0069]将前一步骤获得的I个经过渲染处理的簇进行合并,可以获得原始矩阵A的所有列之和,即获得原始场景的多光源渲染结果。
[0070]本发明将复杂场景下的多光源渲染问题转化为矩阵行列采样问题,通过对矩阵进行分块处理,提升了渲染效率,大大降低了内存开销,同时提升了渲染的实时性。可以应用于对渲染有实时性和高质量要求的场景。
【权利要求】
1.一种基于矩阵行列采样进行多光源渲染的方法,其特征在于,包括如下步骤: 步骤1,根据场景建立光照矩阵,所述光照矩阵中,每一列表示一个光源照射的所有采样点,每一行表不所有光源都进行照射的一个米样点; 步骤2,从多光源矩阵随机抽取若干行,形成缩减矩阵; 步骤3,将缩减矩阵分簇,对各簇进行渲染; 步骤4,将各簇合并,获得原始的光照矩阵各行的光照强度之和,完成渲染。
2.如权利要求1所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,在所述光照矩阵中,如采样点i对于光源j来说是不可见的,则元素Au值为O。
3.如权利要求1所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,在所述光照矩阵中,各元素为RGB标量,在步骤2中缩减矩阵的各个元素转换为使用RGB三元组的2-范数。
4.如权利要求1所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,在步骤3中,将缩减矩阵进行分簇的方法如下: 步骤3-1,首先设定分簇数目为L,使用采样分簇将矩阵分为§ L个簇;




S 步骤3-2,再使用自顶向下分离法完成全部分簇,得到L个簇。
5.如权利要求4所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,在步骤 2 23-1中,将采样分簇将矩阵分为个簇的具体方法为:随机选择$L.个列作为簇中心,将各列划分到离其距离最近的簇中心所代表的簇中。
6.如权利要求4所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,步骤3-1中,簇中心与列之间距离的计算公式如下:
其中,X与y任意一者为簇中心,另一者为待比较距离的列。
7.如权利要求4所述基于矩阵行列采样进行多光源渲染的方法,其特征在于,步骤3中,对各簇渲染的方法为,在每个簇中选取代表列进行渲染,获得该列的光照采样值,利用扩展公式对该簇的代表列进行扩展,获取该簇的光照强度,对于簇Ck,扩展公式如下:
其中,P」为簇Ck的代表列,Pf为着色后的Pp符号Il Il为2-范数计算符号,XmeCiIIp^ ll.表示簇ck中所有列的2-范数之和。
【文档编号】G06T15/50GK104200513SQ201410390703
【公开日】2014年12月10日 申请日期:2014年8月8日 优先权日:2014年8月8日
【发明者】陆琼, 张根源 申请人:浙江传媒学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1