实时点光源软阴影渲染方法

文档序号:6371953阅读:249来源:国知局
专利名称:实时点光源软阴影渲染方法
技术领域
本发明涉及图形学领域,特别是涉及一种针对点光源模型进行实时阴影渲染的方法。
背景技术
阴影对人类观察和认知三维世界有着非常重要的意义,阴影能够帮助人们判断遮挡物的位置、大小和几何信息,也能够帮助人们了解被遮挡物的几何形状。阴影给出了场景 中有关光源位置的信息,突出了物体之间的空间关系,所以阴影能够极大地增强场景的真实感,是渲染技术中一个不可缺少的组成部分,阴影渲染在计算机图形图像、数字多媒体等领域具有广泛的应用前景。作为室内场景大量使用的点光源模型,因为其投影是全方向性的,众多技术使用了阴影体(Shadow Volume)来实现阴影渲染。它们拥有阴影体固有的缺点阴影边缘过度生硬,不能达到真实软阴影的效果;三角形填充率过高,影响渲染性能。还有些技术使用了普通的阴影映射(Shadow Maps)来渲染某个方向的投影,但无法做到点光源模型的全方向投影特性。

发明内容
为解决上述问题,本发明公开了一种基于立方体纹理阴影映射(Cubemap ShadowMaps)的方法,使用特殊的优化方式对阴影边缘进行柔化,消除锯齿现象,实现较理想的点光源软阴影效果。为了达到上述目的,本发明提供如下技术方案
一种实时点光源软阴影渲染方法,包括以下步骤
(1)通过计算视角锥体和点光源光照球体是否相交判断场景中的点光源是否为可视化点光源,获取可视化点光源列表;
(2)针对每个可视化点光源,通过计算点光源光照球体和场景中物体的球形包围盒是否相交,判断是否为潜在投影体,从而获取潜在投影体列表;
(3)针对每个可视化点光源,将潜在投影体渲染到立方体纹理中;
(4)针对每个可视化点光源进行场景光照渲染,在阴影处理过程中进行百分比靠近过滤算法优化阴影边缘质量。作为一种优选方案,所述步骤(3)的具体实现方法是将点光源的全方向投影根据立方体的6个面进行6个方向的分解,得到6个投影视锥体,依次用6个投影视锥体对潜在投影体进行世界空间深度值渲染,并记录在立方体纹理对应方向的2D纹理中。作为一种优选方案,所述步骤(4)的具体实现方法是
(a)将立方体纹理看成由一个个虚拟像素点按照固定间距规则堆积而成,每个顶点代表了一个虚拟像素点;
(b)计算出当前光照着色的像素所在世界空间中的位置坐标,将此坐标减去点光源位置得到光照向量,将光照向量根据立方体纹素尺寸大小进行长度缩放,将光照向量变换为以纹素单位计数的向量为(X,y, z),该像素拥有8个相邻像素点,计算出相邻虚拟像素点光照向量为(x。,y0, z0),(x。,y0+l, z0), (x0+l, y0, z0), (x0+l, y0+l, z0), (x0, y0, z0+l),(x0, y0+l, z0+l), (x0+l, y0, z0+l), (x0+l, y0+l, z0+l),其中 x0=x 取整值,y。= y 取整值,Z0=Z取整值;
(c)对8个相邻虚拟像素进行对应的立方体纹理采样获得8个相邻像素记录的深度值,然后将目标像素到光源中心的深度值依次和8个虚拟像素对应记录的深度值进行大小对比从而获得各虚拟像素点的遮挡值;
(d)根据目标像素在X,Y,Z三个方向上的距离权重,对算出的8组遮挡值进行三线性插值计算,最终获取光照强度值。 与现有技术相比,本发明提供的软阴影渲染方法具有以下优点
I.算法简单,节省运算资源,有效柔化了点光源阴影的边缘细节,消除了锯齿现象。2.能够在仅支持Direct3D 9的计算机上高质量高性能的渲染点光源软阴影效果,可以广泛应用于3D游戏和虚拟现实应用程序中。


图I为视角锥体和点光源光照球体相交示意 图2为点光源光照球体和场景中物体的球形包围盒的二维投影示意 图3为立方体纹理渲染原理 图4为阴影映射基本原理 图5为本发明提供的软阴影渲染原理 其中图5-a为虚拟像素点堆积而成的立方体纹理图,图5-b为目标像素点落入的小方格示意图。
具体实施例方式以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式
仅用于说明本发明而不用于限制本发明的范围。本发明提供的实时点光源软阴影渲染方法,包括以下步骤
(I)首先获取可视化点光源列表(Visible point lights)。通过计算视角锥体和点光源光照球体是否相交判断场景中的点光源是否为可视化点光源,获取所有可视化点光源。图I为视角锥体和点光源光照球体的二维投影示意图。其中,点V为视点,图中三角形区域为视角锥体,图中分散的数个球体为点光源,某些球体与视角锥体相交,即这些球体的斜线部分落入视角锥体范围内,拥有斜线部分的球体即为可视化光源。(2)针对每个可视化点光源,获取潜在投影体列表(Potential projectionobjects)。
通过计算点光源光照球体和场景中物体的球形包围盒是否相交判断是否为潜在投影体。图2为点光源光照球体和场景中物体的球形包围盒的二维投影示意图。其中,中间的大球为点光源光照球体,其他球体为场景物体球形包围盒,图2中数个场景物体球形包围盒与点光源光照球体相交,即场景物体球形包围盒的斜线部分落入点光源光照球体范围内,拥有斜线部分的球体表示对应的物体为潜在投影体。(3)针对每个可视化点光源,将潜在投影体渲染到立方体纹理中。如图3所示,立方体中心为点光源,将点光源的全方向投影根据立方体的6个面进行6个方向的分解,分别是正前,正后,正左,正右,正上,正下,这样能够得到如图3所示的6个方向的聚光灯光照模型及对应的6个投影视锥体,并且投影视锥体裁剪面的长宽相等,锥体张角为90度,其中斜线标出的区域,表示向右光照的聚光灯,这样便得到6个聚光灯投影,每个聚光灯投影对应立方体贴图的某个方向2D纹理。依次用6个投影视锥体对潜在投影体进行世界空间深度值渲染,并记录在立方体纹理对应方向的2D纹理中。(4)针对每个可视化点光源进行场景光照渲染。渲染阴影的一般做法为绘制场景物体光照遍(Lighting Pass)时,在像素着色器(Pixel Shader)里使用普通的Phong光照模型进行光照计算,同时计算出当前光照着色的像素(即目标像素)所在世界空间中的位置坐标,将此坐标减去点光源位置得到方向向量,此方向向量可以对立方体贴图进行采样获取之前记录的投影体深度值,另外再对此方向向量求模获得当前像素到光源中心的深度值。将两个深度值进行大小比较可以决定当前像素是否需要光照或不光照,即是否有阴影。深度值的比较过程如图4中基于Cubemap的阴影映射原理示意图中所示,光照目标像素到光源的距离为D印thl,再对此目标像素进行对应的立方体纹理采样,获得了一个深度值D印th2,此数值代表了投影体到光源的距离。当Depthl大于D印th2时,目标像素不需要进行光照计算,即产生了阴影,则进行阴影处理。但通过上述方法得到的渲染场景“非亮即暗”,因此在阴影边缘的处理上效果生硬突兀,不能达到真实世界中阴影边界过渡自然的软阴影效果。本发明为达到阴影边缘的自然过渡效果,在阴影处理过程中进行百分比靠近过滤(PCF)算法优化阴影边缘质量。本算法区别于传统2D纹理的百分比靠近过滤(PCF)算法,创新了针对立方体纹理(Cubemap)的PCF算法。 具体优化原理如下由于立方体纹理采样的坐标实际上是一个三维方向向量,此向量以立方体中心为起点,而终点是任意的,因此可以将立方体纹理想象成如图5-a所示的由一个个虚拟像素点按照固定间距规则堆积而成,每个顶点代表了一个虚拟像素点,标有斜线的小方格代表了某个由8个相邻虚拟像素点构成的空间区域。计算出当前光照着色的像素(即目标像素)所在世界空间中的位置坐标,将此坐标减去点光源位置得到光照向量,将光照向量根据立方体纹素尺寸大小进行长度缩放,将光照向量变换为以纹素单位计数的向量,该光照向量的终点即目标像素T必然落在如图5-b所示的小方格里,小方格的单位长度为I个纹素。T的8个相邻虚拟像素点的光照向量的求取过程为首先获取终点向量中各分量的整数部分,再分别加/减I个纹素单位得出,设目标像素T的光照向量为(X,y, z),设Xci=X取整值,yf y取整值,Zci=Z取整值,计算出相邻虚拟像素点光照向量为
(x0, y0, z0), (x0, y0, z0+l),(x0, y0+l, z0), (x0, y0+l, z0+l),(x0+l, y0, z0), (x0+l,y0, z0+l), (x0+l, y0+l, z0), (x0+l, y0+l, z0+l)o
以下以一组数据为例,目标像素T光照向量为(3. 6,2. 7,5. 2),则8个相邻虚拟像素点的光照向量分别为
(3,2,5),(3,2,6),(3,3,5),(3,3,6),(4,2,5),(4,2,6),(4,3,5),(4,3,6)。对8个相邻虚拟像素进行对应的立方体纹理采样获得8个相邻像素记录的深度值,然后将目标像素到光源中心的深度值D印thl依次和8个虚拟像素对应记录的深度值进行大小对比从而获得各虚拟像素点的遮挡关系,可以如图5-b所示用O表示未被遮挡,I表示被遮挡,得到8组或O或I的遮挡值。最后以小方格为参照系,根据目标像素在X,Y,Z三个方向上的距离(即目标像素到小方格各个面上的距离,可以通过获取目标像素T的光照向量的小数部分得出)权重,对前面算出的8组遮挡值进行三线性插值计算,最终获取一个O到I之间的浮点型数值,设O为最亮,I为最暗,因此该浮点型数值表示了光照强度值,根据该光照强度值进行阴影的渲染,达到了软阴影效果。通过上述运算,在阴影边缘处,由于目标像素附近的虚拟像素有些被遮挡,有些未被遮挡,通过三线性插值运算,得到一个介 于最亮与最暗之间的灰度值,使得阴影过渡自然柔和。本发明方案所公开的技术手段不仅限于上述技术手段所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。
权利要求
1.一种实时点光源软阴影渲染方法,其特征在于,包括以下步骤 (1)通过计算视角锥体和点光源光照球体是否相交判断场景中的点光源是否为可视化点光源,获取可视化点光源列表; (2)针对每个可视化点光源,通过计算点光源光照球体和场景中物体的球形包围盒是否相交,判断是否为潜在投影体,从而获取潜在投影体列表; (3)针对每个可视化点光源,将潜在投影体渲染到立方体纹理中; (4)针对每个可视化点光源进行场景光照渲染,在阴影处理过程中进行百分比靠近过滤算法优化阴影边缘质量。
2.根据权利要求I所述的实时点光源软阴影渲染方法,其特征在于,所述步骤(3)的具体实现方法是将点光源的全方向投影根据立方体的6个面进行6个方向的分解,得到6个投影视锥体,依次用6个投影视锥体对潜在投影体进行世界空间深度值渲染,并记录在立方体纹理对应方向的2D纹理中。
3.根据权利要求I或2所述的实时点光源软阴影渲染方法,其特征在于,所述步骤(4)的具体实现方法是 (a)将立方体纹理看成由一个个虚拟像素点按照固定间距规则堆积而成,每个顶点代表了一个虚拟像素点; (b)计算出当前光照着色的像素所在世界空间中的位置坐标,将此坐标减去点光源位置得到光照向量,将光照向量根据立方体纹素尺寸大小进行长度缩放,将光照向量变换为以纹素单位计数的向量为(X,y, z),该像素拥有8个相邻像素点,计算出相邻虚拟像素点光照向量为(x。,y0, z0), (x0, y0+l, z0), (x0+l, y0, z0), (x0+l, y0+l, z0), (x0, y0, z0+l),(x0, y0+l, z0+l), (x0+l, y0, z0+l), (x0+l, y0+l, z0+l),其中 x0=x 取整值,y。= y 取整值,Z0=Z取整值; (c)对8个相邻虚拟像素进行对应的立方体纹理采样获得8个相邻像素记录的深度值,然后将目标像素到光源中心的深度值依次和8个虚拟像素对应记录的深度值进行大小对比从而获得各虚拟像素点的遮挡值; (d)根据目标像素在X,Y,Z三个方向上的距离权重,对算出的8组遮挡值进行三线性插值计算,最终获取光照强度值。
全文摘要
为解决目前阴影渲染中普遍存在的阴影边缘过度生硬,不能达到真实软阴影的效果的缺陷,本发明公开了一种基于立方体纹理阴影映射的方法,使用特殊的优化方式对阴影边缘进行柔化,消除锯齿现象,实现较理想的点光源软阴影效果。本发明包括以下步骤通过计算视角锥体和点光源光照球体是否相交判断场景中的点光源是否为可视化点光源,获取可视化点光源列表;针对每个可视化点光源,通过计算点光源光照球体和场景中物体的球形包围盒是否相交,判断是否为潜在投影体,从而获取潜在投影体列表;针对每个可视化点光源,将潜在投影体渲染到立方体纹理中;针对每个可视化点光源进行场景光照渲染,在阴影处理过程中进行百分比靠近过滤算法优化阴影边缘质量。
文档编号G06T15/60GK102768765SQ20121021009
公开日2012年11月7日 申请日期2012年6月25日 优先权日2012年6月25日
发明者张子龙 申请人:南京安讯网络服务有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1