在计算机中实现图形渲染的方法及装置与流程

文档序号:13558080阅读:391来源:国知局
在计算机中实现图形渲染的方法及装置与流程

本发明涉及图形处理领域,更具体地说,涉及一种在计算机中实现图形渲染的方法及装置。



背景技术:

在现实世界中,任何非自发光的物体,都是因为反射了光,才能够被人的眼睛所感知。计算机的渲染实际上就是模拟了光与物体的交互行为。但是光与物体的相互影响是一个非常复杂的过程,以目前的技术水平并不能达到在可交互的帧率范围内进行如此复杂的计算。因此,在实时图形渲染中,一般会采用近似的算法,用一种简化的描述光与物体交互的数学模型来尽量逼近真实世界的情况。其中,高光的数学模型对于物体质感的表现尤为重要。一个物体究竟是湿润,还是干燥,是光滑,还是粗糙,几乎完全体现在高光表现上。传统的高光模型是基于经验的数学模型,如著名的phong高光模型和blinn-phong高光模型。这些模型同时考虑了光源、视线,以及物体表面法线方向,并以基于经验的公式模拟了高光强度随这些向量变化而发生的变化。随着图形硬件的计算能力日益增强,实时渲染开始引入更加复杂的、更加接近真实物理情况的光照模型,称之为基于物理的光照模型。这些光照模型通常指的是基于微平面理论,使用了满足能量守恒定律且衰减形状更接近真实情况的brdf(双方向反射分布函数)的光照模型。而克莱门高光(kelemen-szirmay-kalosspecular)正是基于物理的高光中的一种。归功于其细腻的表现力,克莱门高光已被广泛应用到各种大型3d游戏中,尤其是在角色的皮肤表现上。传统的克莱门高光除了计算出高光强度外,还事先生成一个贴图,在处理时将其读出并粘贴在材质上。但是,这样的处理方法对于对性能要求很高的网络游戏,尤其是网页游戏来说,基于物理的高光给性能带来的负担仍然是不能忽视的。另外贴图的读取,也会增加游戏加载量的负担;同时,这种贴图使得渲染后的图形效果较为生硬。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述开销较大、负担较重的缺陷,提供一种开销较小、负担较轻、效果较好的在计算机中实现图形渲染的方法及装置。

本发明解决其技术问题所采用的技术方案是:构造一种在计算机中实现图形渲染的方法,包括如下步骤:

a)确定将当前场景中光源产生的高光施加到物体上的方式,该方式与计算得到的双方向反射分布函数相关,其中,该双方向反射分布函数的高光强度和菲涅尔项按照克莱门高光算法的方式得到;

b)设置对应的多组第一参量和第二参量取值,得到对应于光源在材质上的扩散范围内的曝光曲线;并按照所述曝光曲线计算高光衰减强度参数;

c)将上述高光衰减强度参数代入所述双方向反射分布函数的相关项,实现渲染;

其中,所述第一参量表示该高光在材质上的扩散范围,所述第二参量表示该高光最终体现在材质上的光强度。

更进一步地,所述第一参量和第二参量的多组取值分别表示在所述高光的扩散范围内,正对光源位置到完全偏离光源位置的光强度。

更进一步地,所述步骤b)中进一步包括:

b1)通过对多组第一参量和第二参量的拟合,得到曝光曲线;

b2)分别将所述曝光曲线上的多组第一参量取值和第二参量取值代入计算中间参量,并通过对每组中间参量进行计算得到表示多个分别在所述高光扩散范围内由正对该光源到偏离该光源不同距离的点的高光衰减强度参数。

更进一步地,所述中间参量包括其自变量是半角向量的、描述物体表面微平面朝向的概率密度函数和物体表面法线和半角向量夹角的正切值。

更进一步地,所述步骤b2)中,进一步包括如下步骤:

b21)通过ta=sqrt(1.0-pow(dot(n,h),2.0)/dot(n,h)得到所述物体表面法线和半角向量夹角的正切值;

b22)通过ph=exp(-(ta*ta)/(x*x))/((x*x)/(y*y*y*y))得到所述描述物体表面微平面朝向的概率密度函数;

b23)通过speccoeff=max((ph*ff)/dot(h,h,0.0)得到当前位置上的高光衰减参数;

其中,其中,n是表面法线,h是已归一化的半角向量,h是未归一化的半角向量,x是当前第一参量取值,y是当前第二参量取值,ff=exponential+f0*(1.0-exponential),f0是垂直入射时的反射率。

更进一步地,所述步骤b2)中,还包括如下步骤:

b24)通过float4(clamp(dot(l,h),0.0,1.0))*dot(speccoeff,y)计算得到所述高光颜色;

其中,float4表示浮点四维向量;l是光源向量。

更进一步地,用于拟合所述曝光曲线的第一参量和第二参量至少包括4组,其默认取值分别为x(0.45,0.3,0.16,0.09)和y(1.0,0.35,0.1,0.015),其中,排列位置相同的第一参量和第二参量为一组。

本发明还涉及一种实现上述方法的装置,包括:

高光方式确定单元:用于确定将当前场景中光源产生的高光施加到物体上的方式,该方式与计算得到的双方向反射分布函数相关,其中,该双方向反射分布函数的高光强度和菲涅尔项按照克莱门高光算法的方式得到;

高光衰减强度参数取得单元:用于设置对应的多组第一参量和第二参量取值,得到对应于光源在材质上的扩散范围内的曝光曲线;并按照所述曝光曲线计算高光衰减强度参数;

渲染实现单元:用于将上述高光衰减强度参数代入所述双方向反射分布函数的相关项,实现渲染;

其中,所述第一参量表示该高光在材质上的扩散范围,所述第二参量表示该高光最终体现在材质上的光强度。

更进一步地,所述高光强度取得单元按照克莱门高光算法的方式得到所述高光强度;所述第一参量和第二参量的多组取值分别表示在所述高光的扩散范围内,正对光源位置到完全偏离光源位置的光强度。

更进一步地,所述高光衰减强度参数取得单元中进一步包括:

曝光曲线取得模块:用于通过对多组第一参量和第二参量的拟合,得到曝光曲线;

高光衰减强度取得模块:用于分别将所述曝光曲线上的多组第一参量取值和第二参量取值代入计算中间参量,并通过对每组中间参量进行计算得到表示多个分别在所述高光扩散范围内由正对该光源到偏离该光源不同距离的点的高光衰减强度参数。

实施本发明的在计算机中实现图形渲染的方法及装置,具有以下有益效果:由于在渲染后期使用曝光曲线对设定区域(即高光扩散区域)进行处理,且这种处理是按照该区域内各像素与光源的位置关系进行的,因此,采用本发明的图形渲染方法,不需要进行传统的克莱门高光算法中的事先生成贴图,渲染时读出并粘贴该贴图的步骤,而仅仅需要进行简单的函数运算和曝光;这就避免了在渲染时读取并粘贴大量数据的步骤,减小了系统和处理器的开销,提升了处理速度;同时,按照具光源中心的距离处理的方法能够清楚地体现多层次的光线感觉,从而使得图形渲染更加贴近实际效果。因此,其开销较小、负担较轻、效果较好。

附图说明

图1是本发明在计算机中实现图形渲染的方法及装置实施例中方法的流程图;

图2是所述实施例中取得并通过曝光曲线进行渲染的具体流程图;

图3是所述实施例中曝光曲线示意图;

图4是所述实施例中装置的结构示意图。

具体实施方式

下面将结合附图对本发明实施例作进一步说明。

如图1所示,在本发明的一种在计算机中实现图形渲染的方法及装置实施例中,该方法包括如下步骤:

步骤s11确定场景中将光源产生的高光施加到物体上的方式:在本实施例中,以一个基于克莱门高光算法的渲染过程为例,说明本实施例中的渲染方法和传统的渲染方法存在的差别,具体来讲是在处理高光时存在的差别。也就是说,在本实施例中提供了一种变种的克莱门高光算法,能够在节约计算资源及存储空间的同时,获得足够丰富、细腻的视觉效果。总体上来讲,在本实施例中,利用两组四维向量模拟出一条曝光曲线,用于取代现有的克莱门高光算法中的beckmanntexture(分布函数的预烘焙贴图)。一个维度的组合均代表一层高光,因此可以模拟出最多4层高光的混合,以实现复杂的非线性高光衰减,达到细腻的视觉效果表现。

在本实施例,由场景中每个光源产生的高光强度通过如下计算施加到物体上:

specularlight+=lightcolor[i]*lightshadow[i]*intensity*specbrdf(n,v,l[i],eta,m)*saturate(dot(n,l[i]))*attenuation;

其中specbrdf为物体材质的双方向反射分布函数,该函数决定了高光的主要特性。

通常,基于物理的高光一般采用解析函数来描述材质的brdf,并在fragmentshader(片段着色器)中直接求值。这样的高光brdf模型通常包含菲涅尔项、微平面分布项,以及几何衰减项等部分。brdf函数的输入包括表面法线n,视线向量v,光源向量l,材质的折射率eta,以及粗糙度参数m。

材质的菲涅尔项使用schlick的近似计算,输入包括皮肤的折射率,半角向量h,以及垂直入射时的反射率f0。在本实施例中,菲涅尔项的近似计算如下:

floatbase=1.0-dot(v,h);

floatexponential=pow(base,5.0);

floatff=exponential+f0*(1.0-exponential);

对于brdf的剩余项,原始克莱门高光算法中通过对beckmann分布函数进行预计算并保存在贴图中,然后在运行时读取以减少实时运算。而在本实施例中,并不采用现有技术中的上述预计算贴图的方式,而是采用通过构成曝光曲线并取得高光衰减参数的处理方式。换句话说,使用了上述高光衰减参数取代了现有技术中的读取贴图的方式。总之,在本步骤中,是通过双向反射分布函数计算当前场景中一个光源产生的高光施加到物体上方式和强度等的,其中高光的强度和菲涅尔项是按照克莱门高光算法的方式得到的,但是,后续的方式或采取的步骤是不同的,并不采用实现计算贴图并在处理时读取的方式。

步骤s12在该高光扩散范围内生成曝光曲线,并得到高光衰减参数:在本在步骤中,设置该高光对应的多组第一参量和第二参量取值,通过拟合得到对应于该高光在材质上的扩散范围内的曝光曲线;其中,所述第一参量表示该高光在材质上的扩散范围,所述第二参量表示该高光最终体现在材质上的光强度。所述第一参量和第二参量的多组取值分别表示在所述高光的扩散范围内,正对光源位置到完全偏离光源位置的光强度。当得到曝光曲线后,选择该曝光曲线上的多个点,得到多组第一参量和第二参量,然后通过对这些参量的计算,得到高光衰减参数。

步骤s13在双方向反射分布函数的相关项中代入上述高光衰减参数,实现渲染:在本步骤中,将上述高光衰减强度参数代入所述双方向反射分布函数的相关项,实现渲染。具体来讲,在本实施例中,使得specbrdf等于dot(speccoeff,weight)从而实现高光衰减的渲染效果;换句话说,在本实施例中用两组参数拟合出的曲线来代替剩余项的作用,通过计算微平面分布函数ph,然后使用多组ph的叠加来模拟出了包括且不限于原算法的高光衰减效果,即得到的高光衰减效果可以涵盖现有技术中的贴图效果且其效果更加丰富。

图2示出了在本实施例中上述高光衰减参数取得的具体步骤,包括:

步骤s21使用默认取值的多组第一参量和第二参量,通过拟合得到曝光曲线:在本步骤中,在一个以光强度为纵轴、与光源中心的距离为横轴的坐标系的第一象限中标记或放入多组默认取值的洗衣参量和第二参量,得到该象限内的多个点,这些点之间的连线就是上述曝光曲线,请参见图3。在本实施例中,默认的第一参量x和第二参量y的取值包括4组,其取值分别为x(0.45,0.3,0.16,0.09)和y(1.0,0.35,0.1,0.015),其中,位置相同的第一参量和第二参量为一组,并用于一个高光衰减参数的计算。如前所述,当x取值为0.45时,y的取值是1.0,构成一组第一参量x和第二参量y;其余取值以此类推。

步骤s22分别代入曝光曲线上的多组第一参量取值和第二参量取指,得到多个高光衰减参数:在本步骤中,分别将所述曝光曲线上的多组第一参量取值和第二参量取值代入计算中间参量,并通过对每组中间参量进行计算得到表示多个分别在所述高光扩散范围内由正对该光源到偏离该光源不同距离的点的高光衰减强度参数。值得一体的是,在本实施例中,在本步骤中选择进行计算的第一参量和第二参量的值,可以是默认取值中的全部或部分,也可以完全不是上述默认取值中的,而是由该曝光曲线中取得的其他值。

具体的计算步骤包括:通过ta=sqrt(1.0-pow(dot(n,h),2.0)/dot(n,h)得到所述物体表面法线和半角向量夹角的正切值;

通过ph=exp(-(ta*ta)/(x*x))/((x*x)/(y*y*y*y))得到所述描述物体表面微平面朝向的概率密度函数;

通过speccoeff=max((ph*ff)/dot(h,h,0.0)得到当前位置上的高光衰减参数;

通过float4(clamp(dot(l,h),0.0,1.0))*dot(speccoeff,y)计算得到所述高光颜色;

其中,其中,n是表面法线,h是已归一化的半角向量,h是未归一化的半角向量,x是当前第一参量取值,y是当前第二参量取值,ff=exponential+f0*(1.0-exponential),f0是垂直入射时的反射率;float4表示浮点四维向量;l是光源向量。在本实施例中,float4表示浮点型四维向量,如果其后跟随的括号里为一个标量时,则表示每个元素都等于该标量的四维向量。例如,float4(0.5),得到的向量就是(0.5,0.5,0.5,0.5)。此处得到的高光颜色前三个元素相等,意味着高光颜色的rgb值相等,因此颜色是灰白色。实际应用中,通常是使用该灰白色乘以其他颜色,以实现不同颜色的高光。

在本实施例中,还涉及一种实现上述方法的装置,图4示出了该装置的具体结构。在图4中,该装置包括:高光方式确定单元1、高光衰减强度参数取得单元2和渲染实现单元3;其中,高光方式确定单元1用于确定将当前场景中光源产生的高光施加到物体上的方式,该方式与计算得到的双方向反射分布函数相关,其中,该双方向反射分布函数的高光强度和菲涅尔项按照克莱门高光算法的方式得到;高光衰减强度参数取得单元2用于设置对应的多组第一参量和第二参量取值,得到对应于光源在材质上的扩散范围内的曝光曲线;并按照所述曝光曲线计算高光衰减强度参数;渲染实现单元3用于将上述高光衰减强度参数代入所述双方向反射分布函数的相关项,实现渲染;

其中,所述第一参量表示该高光在材质上的扩散范围,所述第二参量表示该高光最终体现在材质上的光强度。所述第一参量和第二参量的多组取值分别表示在所述高光的扩散范围内,正对光源位置到完全偏离光源位置的光强度。

此外,所述高光衰减强度参数取得单元2中进一步包括:曝光曲线取得模块21用于通过对多组第一参量和第二参量的拟合,得到曝光曲线;高光衰减强度取得模块22用于分别将所述曝光曲线上的多组第一参量取值和第二参量取值代入计算中间参量,并通过对每组中间参量进行计算得到表示多个分别在所述高光扩散范围内由正对该光源到偏离该光源不同距离的点的高光衰减强度参数。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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