场景内全频率互反射光照效果的绘制方法

文档序号:6512702阅读:211来源:国知局
场景内全频率互反射光照效果的绘制方法
【专利摘要】本发明公开了一种场景内全频率互反射光照效果的绘制方法,包括:读入预置场景,生成所述预置场景的场景模型;其中,所述场景模型包括多个子模型;对于上述多个子模型的每个子模型,计算预置场景中所述每个子模型的直接光照结果和所述每个子模型中每一个渲染点处的互反射光照结果;将所述直接光照结果和所述互反射光照结果相加,得到最终的渲染结果。
【专利说明】场景内全频率互反射光照效果的绘制方法
【技术领域】
[0001]本发明属于真实感图形绘制【技术领域】,涉及一种场景内全频率互反射光照效果的绘制方法,更具体地,涉及一种利用解析模型高效绘制全频率互反射光照效果的实用技术。
【背景技术】
[0002]绘制互反射光照效果是真实感图形绘制领域的常见问题。所谓互反射,即由光源发出的光线经一个表面反射后照射到另一个表面的现象。对于考虑了互反射光照效果的绘制结果,其在真实感上相较于仅拥有直接光照效果的绘制结果有很大的提升,但绘制互反射的效果往往也需要很大的计算代价。本发明的技术背景正源于此。
[0003]绘制互反射光照效果的一种有效的解决方案是在场景中引入一系列的虚拟点光源(VPLs),进而将反射光线表示为由虚拟点光源发出的光线。1997年,Keller在论文“Instant radiosity”中提出的瞬时光能算法就是一种经典的基于虚拟点光源的方法。这种方法通过追踪从真实光源发出的光线产生虚拟点光源,并使用shadow map算法来计算所有虚拟点光源对渲染点的光照贡献。当使用大量的虚拟点光源时,该方法可以生成高质量的?宣染结果。此后,2005年Walter等人的论文“Lightcuts:a scalable approachto illumination”, 2007 年 Hasan 等人的论文“Matrix row-column sampling for themany-light problem,,,以及 2011 年 Ou 等人的论文“Lightslice:matrix slice samplingfor the many-light problem”都针对虚拟点光源最后绘制步骤的效率做出了优化。虽然上述基于虚拟点光源的算法能够较好地处理漫反射材质的互反射光照效果,但此法很难处理高光泽的材质,具有一定的局限性。
[0004]在2001 年,Jensen 等人在论文“Realistic image synthesis using photonmapping”中提出了光子映射的方法。该方法首先追踪从光源打出的“光子”,并生成场景的一张光子映射图,然后利用这张映射图结合光线跟踪算法计算整个场景的光照效果。利用现代GPU,改进后的光子映射算法可以以较高的效率绘制特定材料间的互反射光照效果,但在渲染半光泽材质时计算时间会显著增加,不能够在短时间内得到高质量的绘制效果。
[0005]在2OO9 年,Ritschel 等人在论文 “Micro-rendering for scalable, parallelfinal gathering”中提出的micro-rendering技术,是一种快速绘制复杂场景中特定材质的互反射光照效果的方法,它通过引入层次结构,并结合重要性采样,利用GPU硬件实现了交互级别的全局光照效果渲染。但micro-rendering技术限制了场景中的反射表面必须为漫反射或具有低频BRDF的材质,具有很大的局限性。
[0006]综上所述,现有的绘制互反射光照效果的技术通常都假设场景中物体材质的反射特性被限制在一定频率范围之内,比如,基于虚拟点光源的算法能够较好地处理漫反射材质的互反射光照效果,而很难处理高光泽的材质;光子映射方法在处理漫反射材质和高光泽材质时效率较高,但在渲染半光泽材质时计算时间会显著增加;同样,micro-rendering技术也限制了场景中的反射表面必须为漫反射或具有低频BRDF的材质。因此所有现存的方法都无法统一处理复杂场景中全频率下的互反射光照效果的局限性,有鉴于此,有必要 提供一种技术方案,能够实现复杂场景中全频率互反射光照效果的高速绘制。

【发明内容】

[0007](一)要解决的技术问题
[0008]本发明要解决的技术问题是,针对现有技术的不足,提供一种场景内全频率互反射光照效果的绘制方法,能够准确处理场景中各种不同反射属性的材质间的互反射光照效果,同时保持较高的绘制效率,以增强绘制方法的实用性。
[0009](二)技术方案
[0010]本发明提供一种场景内全频率互反射光照效果的绘制方法,包括:
[0011]读入预置场景,生成所述预置场景的场景模型;其中,所述场景模型包括多个子模型;
[0012]对于上述多个子模型的每个子模型,计算预置场景中所述每个子模型的直接光照结果和所述每个子模型中每一个渲染点处的互反射光照结果;
[0013]将所述直接光照结果和所述互反射光照结果相加,得到最终的渲染结果。
[0014]其中,所述对于上述多个子模型的每个子模型,计算预置场景中所述每个子模型的直接光照结果和所述每个子模型中每一个渲染点处的互反射光照结果包括:
[0015]根据预置场景中光源的情况,计算预置场景中各子模型的直接光照结果;
[0016]判断所有所述子模型的三角面片数量是否均小于第一阈值;
[0017]若判定均小于第一阈值,则遍历所述预置场景中子模型的三角面片,得到所述子模型中每一个渲染点处的互反射光照结果;
[0018]若判定不均小于第一阈值,则为所述场景模型生成层次结构,并基于所述层次结构,计算预置场景中的每个子模型的三角网格上各个顶点的顶点reflector cut ;利用所述三角网格上各顶点上的顶点reflector cut插值计算出该所述子模型上每一个渲染点处的渲染reflector cut ;计算所述渲染reflector cut中的每一个节点对相应渲染点的光强度贡献值;以及,将所述渲染reflector cut中所有节点的光强度贡献值相加,得到所述相应渲染点处的互反射光照结果;其中,reflector cut是指场景中所有对某一节点的互反射光强度有贡献的节点的集合。
[0019]其中,所述为所述场景模型生成层次结构包括:
[0020]基于所述场景模型建立一棵二叉树,其中,所述二叉树的叶节点是单独的三角面片,所述二叉树的中间节点是三角面片的集合,中间节点包括所述中间节点的两个子节点的所有三角面片;
[0021]在所述场景模型上随机采样生成一定数量的虚拟光源,对于所述二叉树中的每个节点,计算并储存与其距离最近的至少一个虚拟光源的空间位置;以及,关联节点与所述空间位置,生成所述场景模型的层次结构。
[0022]其中,所述二叉树通过以下步骤建立:由包含所述场景模型中全部三角面片的根节点开始,基于三角面片的空间位置及法相通过递归方法自上而下地将所述二叉树的每个节点分裂成两个子节点,直至到达叶节点,最终生成所述二叉树。
[0023]其中,所述每一个节点对相应渲染点的光强度贡献值的计算步骤包括:
[0024]将所述渲染reflector cut分为已计算集合及未计算集合,并从所述未计算集合中选取一未计算节点;
[0025]基于BRDF和光源的球面高斯函数,计算所述未计算节点对相应渲染点的初始光强度贡献值;
[0026]基于所述未计算节点的虚拟光源的空间位置,结合ISM算法得到所述未计算节点对相应渲染点的可见性值;
[0027]将所述初始强度贡献值与可见性值相乘,得到最终光强度贡献值,并将所述未计算节点标记为已计算节点。
[0028]其中,所述基于BRDF和光源的球面高斯函数,计算所述未计算节点对相应渲染点的初始光强度贡献值包括:
[0029]判断所述未计算节点是否为叶节点;
[0030]若判定所述未计算节点为叶节点,则通过以下公式计算所述未计算节点对相应渲染点的初始光强度贡献值:
[0031]Lx (O).? Hirli )jo^ G(r; rh,Ah,c‘h )clr
[0032]其中,Lx(O)是节点在坐标X处沿0方向的亮度值,H是一光滑函数,rh'是一代表方向,01是对应的球面三角形,G是球面高斯函数,r是球面高斯函数的变量,rh是球面高斯函数的中心方向,Xh表示球面高斯函数的尖锐程度,Ch是球面高斯函数的标量系数;
[0033]若判定所述未计算节点不为叶节点,则通过以下公式计算所述未计算节点对相应渲染点的初始光强度贡献值: [0034]4(0) * H(rDLG(r;L人々乂力細
[0035]其中,Lx(O)是节点在坐标X处沿0方向的亮度值,H是一光滑函数,rh'是一代表方向,Ω是整个球面,G和6,是两个球面高斯函数,r是球面高斯函数的变量,rh是球面高斯函数的中心方向,Xh表示球面高斯函数的尖锐程度,Ch是球面高斯函数的标量系数,Gn(r)是6]^(1.;;!^,λ N, cN)的简写形式。
[0036]其中,所述顶点reflector cut和渲染ref lector cut的计算过程为:基于所述层次结构,从只包含根节点的初始集合开始迭代,每次迭代选出误差最大的节点,并用其两个子节点将其代替,直至集合中节点的最大误差小于阈值,或是集合的大小达到限定的最大值。
[0037]其中,所述误差通过以下公式计算:
[0038]HOV ).(tmax.gmax.I I Ω I max-tmin.gmin.I I Ω I Iniin),其中,H 是一光滑函数,rh'是一代表方向,t.和t.是节点中各三角面片纹理颜色的最大和最小值,g_和gnin是球面高斯函数G(r;rh,Ah, ch)在指定立体角范围内的最大和最小值,I I Ω I |_和I I Ω | |min是立体角可能取得的最大和最小值。
[0039](三)有益效果
[0040]本发明的方法能够适用于绘制各种场景内的全频率互反射光照效果。该方法利用BRDF和光源的球面高斯函数表示,解析推导了一种全新的一次反射模型,因此绘制的结果十分准确;同时,结合场景的层次结构表示及GPU硬件,该方法的绘制过程也较为迅速,使得本发明的方法具有较强的效率性、准确性和实用性。【专利附图】

【附图说明】
[0041]图1是实施例1场景内全频率互反射光照效果的绘制方法的绘制方法流程图;
[0042]图2是实施例1建立场景模型的层次结构的方法流程图;
[0043]图3是实施例1计算某一节点对相应渲染点的光强度贡献值的方法流程图;
[0044]图4是实施例2场景内全频率互反射光照效果的绘制方法流程图;
[0045]图5是实施例3场景内全频率互反射光照效果的绘制方法流程图;
[0046]图6是实施例4场景内全频率互反射光照效果的绘制方法流程图;
[0047]图7是实施例5场景内全频率互反射光照效果的绘制方法流程图;
[0048]图8是实施例6场景内全频率互反射光照效果的绘制方法流程图。
【具体实施方式】
[0049]本发明主要提供了一种场景内全频率互反射光照效果的绘制方法,主要包括预处理阶段和实时处理阶段,在预处理阶段,本方案根据场景模型中所有子模型的三角面片数量是否均小于第一阈值来判定是否为场景模型生成层次结构:若是,则不为场景模型生成层次结构。若否,则为场景模型生成层次结构。根据上述判定结构主要分成两类实施例,下面结合附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0050]实施例1:
[0051]请参阅图1至图3,本发明提供了一种场景内全频率互反射光照效果的绘制方法,其具体实施过程如下。
[0052]在步骤SlOl中,读入预置场景,生成所述预置场景的场景模型。在本实施例中,所述场景模型通过多个子模型组合而成。经过判断,判定并非所有所述子模型的三角面片数量小于第一阈值,因此需要为场景模型建立层次结构。在本实施例中,场景模型的层次结构的建立方法具体如图2所示。
[0053]在步骤SlOll中,基于所述场景模型建立一棵二叉树,其中,所述二叉树的叶节点是单独的三角面片,所述二叉树的中间节点是三角面片的集合,中间节点包括所述中间节点的两个子节点的所有三角面片。具体的,二叉树通过以下方法建立:由包含所述场景模型中全部三角面片的根节点开始,基于三角面片的空间位置及法相通过递归方法自上而下地将所述二叉树的每个节点分裂成两个子节点,直至到达叶节点,最终生成所述二叉树。
[0054]在步骤S1012中,在所述场景模型上随机采样生成一定数量的虚拟光源,对于所述二叉树中的每个节点,计算并储存与其距离最近的至少一个虚拟光源的空间位置;以及,关联节点与所述空间位置,生成所述场景模型的层次结构。在本实施例的具体实施中,本步骤计算并储存与其距离最近的三个虚拟光源的空间位置。
[0055]上述过程为预处理阶段,下面进入实时处理阶段。
[0056]在步骤S102中,根据预置场景中光源的情况,计算预置场景中各子模型的直接光照结果。
[0057]在步骤S103中,基于所述层次结构,计算预置场景中的每个子模型的三角网格上各个顶点的顶点reflector cut。在本发明中,ref lector cut是指场景中所有对某一节点的互反射光强度有贡献的节点的集合。在本发明中,reflector cut简称为反射节点集合。[0058]在步骤S104中,利用所述三角网格上各顶点上的顶点reflector cut插值计算出该所述子模型上每一个渲染点处的渲染reflector cut。
[0059]在步骤S105中,计算所述渲染reflector cut中的每一个节点对相应渲染点的光强度贡献值。在本实施例中,步骤S105具体通过以下步骤完成。
[0060]S1051、首先,将渲染reflector cut划分成两个集合:已计算集合和未计算集合,其中,已计算集合中的元素是已计算完对相应渲染点光强度贡献值的节点,未计算集合中的元素是未完成对相应渲染点光强度贡献值计算的节点。从未计算集合中选取一节点,进入步骤S1052。
[0061]S1052、基于BRDF和光源的球面高斯函数,计算所述未计算节点对相应渲染点的初始光强度贡献值。在本实施例中,本步骤是针对不同节点类型,使用不同的解析公式来计算所述未计算节点对相应渲染点的初始光强度贡献值的。具体的步骤包括:
[0062]判断所述未计算节点是否为叶节点;
[0063]若判定所述未计算节点为叶节点,则通过以下公式计算所述未计算节点对相应渲染点的初始光强度贡献值:
[0064]Lx(O) ?If (r; )[}τ G(r;rA,Aa,ch)dr
[0065]其中,Lx(O)是节点在坐标X处沿0方向的亮度值,H是一光滑函数,rh'是一代表方向,01是对应的球面三角形,G是球面高斯函数,r是球面高斯函数的变量,rh是球面高斯函数的中心方向,Xh表示球面高斯函数的尖锐程度,Ch是球面高斯函数的标量系数;
[0066]若判定所述未计算节点不为叶节点,则通过以下公式计算所述未计算节点对相应渲染点的初始光强度贡献值:
[0067]4.(0) ^ H(yI)j(^G{r;rh,Xh,Ch )GX (r)dr
[0068]其中,Lx(O)是节点在坐标X处沿0方向的亮度值,H是一光滑函数,rh'是一代表方向,Ω是整个球面,G和6,是两个球面高斯函数,r是球面高斯函数的变量,rh是球面高斯函数的中心方向,Xh表示球面高斯函数的尖锐程度,Ch是球面高斯函数的标量系数,Gn(r)是6]^(1.;;!^,λ N, cN)的简写形式。
[0069]在S1052中,本技术方案针对不同的节点类型使用不同的解析模型得到相应的初始光强度贡献值,使得最终的结果更为准确,得到的绘制结果也更为精确。
[0070]S1053、基于所述未计算节点的虚拟光源的空间位置,结合ISM算法得到所述未计算节点对相应渲染点的可见性值。具体的步骤为:对于所述未计算节点对应的每一个虚拟光源,使用ISM算法计算该虚拟光源对当前相应渲染节点的可见性值,则所述未计算节点的可见性值为其所有对应虚拟光源可见性值的平均值。
[0071]S1054、将所述初始强度贡献值与可见性值相乘,得到最终光强度贡献值。将所述未计算节点标记为已计算节点,并将此节点划分到已计算集合中。重复执行S1051至S1054的计算过程,直至未计算集合中的所有未计算节点被标记为已计算节点。
[0072]在步骤S106中,将所述渲染reflector cut中所有节点的光强度贡献值相加,得到所述相应渲染点处的互反射光照结果。
[0073]在上述过程中,顶点reflector cut和渲染ref lector cut的计算过程为:基于所述层次结构,从只包含根节点的初始集合开始迭代,每次迭代选出误差最大的节点,并用其两个子节点将其代替,直至集合中节点的最大误差小于阈值,或是集合的大小达到限定的最大值,这样最终得到的节点集合即为所需的顶点reflector cut或渲染reflector cut。其中,所述误差的计算公式为:
[0074]HOV ).(tmax.gmax.I I Ω I max-tmin.gmin.I I Ω I Lin)
[0075]上式中H是一光滑函数,r/是一代表方向,t-和tnin是节点中各三角面片纹理颜色的最大和最小值,8_和8_是球面高斯函数G(r;rh,λ h, ch)在指定立体角范围内的最大和最小值,I I Ω I I.和I I Ω I Iniin是立体角可能取得的最大和最小值。
[0076]在步骤S107中,将步骤S102得到的直接光照结果和步骤S106得到的互反射光照结果相加,得到最终的渲染结果,此渲染结果即为绘制结果。
[0077]在本发明中,渲染结果即为最终的绘制结果,为一具体的像素点值,可以通过这一具体的像素点值对预置场景的反射光照效果进行绘制。由于是通过解析公式计算得到一具体像素点值,那么绘制的反射光照效果也更为准确、其方法也更为实用。具体的,本方法还利用BRDF和光源的球面高斯函数,针对不同的节点类型相应地解析推导了一种全新的一次反射模型,得到具体的像素点值,因此绘制的结果十分准确且并不被场景中的反射条件所限制。同时,本发明还可结合场景的层次结构表示及GPU硬件对场景的反射光照效果进行绘制,该方法的绘制过程也较为迅速,使得本发明的方法具有较强的效率性、准确性和实用性。
[0078]实施例2及实施例3:请参阅图1-图5,与实施例1相比,计算各子模型的直接光照结果(步骤S102)与计算互反射光照结果(步骤S103-步骤S106)的顺序不分先后。既可如图4所示的后续执行,也可如图5所示的同步执行。本领域人员应该理解的的,步骤S102与步骤S103-S106中的任何步骤的执行顺序均不分先后。
[0079]实施例4:
[0080]请参阅图6,本发明提供了一种场景内全频率互反射光照效果的绘制方法,其具体实施过程如下。
[0081]在步骤S501中,读入预置场景,生成所述预置场景的场景模型。在本实施例中,所述场景模型通过多个子模型组合而成。经过判断,判定所有所述子模型的三角面片数量均小于第一阈值,因此不需要为场景模型建立层次结构。当所有子模型的三角面片数量均小于第一阈值时,对于得到相同的渲染结果,不建立层次结构与建立层次结构的所需的渲染时间相当,且计算步骤更为简洁。
[0082]在步骤S502中,根据预置场景中光源的情况,计算预置场景中各子模型的直接光照结果。
[0083]在步骤S503中,遍历所述预置场景中子模型的三角面片,得到所述子模型中每一个渲染点处的互反射光照结果。
[0084]在步骤S504中,将步骤S502中得到的直接光照结果和S503中得到的互反射光照结果相加,得到最终的渲染结果。
[0085]实施例5及实施例6:请参阅图7-图8,与实施例4相比,计算各子模型的直接光照结果(步骤S502)与计算互反射光照结果(步骤S503)的顺序不分先后。既可如图7所示的后续执行,也可如图8所示的同步执行。[0086]以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的【技术领域】,均同理包括在本发明的专利保护范围内。
【权利要求】
1.一种场景内全频率互反射光照效果的绘制方法,其特征在于,包括: 读入预置场景,生成所述预置场景的场景模型;其中,所述场景模型包括多个子模型; 对于上述多个子模型的每个子模型,计算预置场景中所述每个子模型的直接光照结果和所述每个子模型中每一个渲染点处的互反射光照结果; 将所述直接光照结果和所述互反射光照结果相加,得到最终的渲染结果。
2.根据权利要求1所述的方法,其特征在于,所述对于上述多个子模型的每个子模型,计算预置场景中所述每个子模型的直接光照结果和所述每个子模型中每一个渲染点处的互反射光照结果包括: 根据预置场景中光源的情况,计算预置场景中各子模型的直接光照结果; 判断所有所述子模型的三角面片数量是否均小于第一阈值; 若判定均小于第一阈值,则遍历所述预置场景中子模型的三角面片,得到所述子模型中每一个渲染点处的互反射光照结果; 若判定不均小于第一阈值,则为所述场景模型生成层次结构,并基于所述层次结构,计算预置场景中的每个子模型的三角网格上各个顶点的顶点reflector cut ;利用所述三角网格上各顶点上的顶点reflectorcut插值计算出该所述子模型上每一个渲染点处的渲染reflector cut ;计算所述渲染ref lector cut中的每一个节点对相应渲染点的光强度贡献值;以及,将所述渲染reflector cut中所有节点的光强度贡献值相加,得到所述相应渲染点处的互反射光照结果;其中,reflector cut是指场景中所有对某一节点的互反射光强度有贡献的节点的集合。
3.根据权利要求2所述`的方法,其特征在于,所述为所述场景模型生成层次结构包括: 基于所述场景模型建立一棵二叉树,其中,所述二叉树的叶节点是单独的三角面片,所述二叉树的中间节点是三角面片的集合,中间节点包括所述中间节点的两个子节点的所有三角面片; 在所述场景模型上随机采样生成一定数量的虚拟光源,对于所述二叉树中的每个节点,计算并储存与其距离最近的至少一个虚拟光源的空间位置;以及,关联节点与所述空间位置,生成所述场景模型的层次结构。
4.根据权利要求3所述的方法,其特征在于,所述二叉树通过以下步骤建立: 由包含所述场景模型中全部三角面片的根节点开始,基于三角面片的空间位置及法相通过递归方法自上而下地将所述二叉树的每个节点分裂成两个子节点,直至到达叶节点,最终生成所述二叉树。
5.根据权利要求2-4任一项所述的方法,其特征在于,所述每一个节点对相应渲染点的光强度贡献值的计算步骤包括: 将所述渲染reflector cut分为已计算集合及未计算集合,并从所述未计算集合中选取一未计算节点; 基于BRDF和光源的球面高斯函数,计算所述未计算节点对相应渲染点的初始光强度贡献值; 基于所述未计算节点的虚拟光源的空间位置,结合ISM算法得到所述未计算节点对相应渲染点的可见性值; 将所述初始强度贡献值与可见性值相乘,得到最终光强度贡献值,并将所述未计算节点标记为已计算节点。
6.根据权利要求5所述的方法,其特征在于,所述基于BRDF和光源的球面高斯函数,计算所述未计算节点对相应渲染点的初始光强度贡献值包括: 判断所述未计算节点是否为叶节点; 若判定所述未计算节点为叶节点,则通过以下公式计算所述未计算节点对相应渲染点的初始光强度贡献值:
7.根据权利要求2所述的方法,其特征在于,所述顶点reflectorcut和渲染reflector cut的计算过程为:基于所述层次结构,从只包含根节点的初始集合开始迭代,每次迭代选出误差最大的节点,并用其两个子节点将其代替,直至集合中节点的最大误差小于阈值,或是集合的大小达到限定的最大值。
8.根据权利要求7所述的方法,其特征在于,所述误差通过以下公式计算
【文档编号】G06T15/50GK103489215SQ201310436477
【公开日】2014年1月1日 申请日期:2013年9月23日 优先权日:2013年9月23日
【发明者】徐昆, 曹炎培, 马里千, 胡事民 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1