利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法与流程

文档序号:12179058阅读:362来源:国知局
利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法与流程

本发明涉及一种利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法, 属于三维图形绘制技术领域。



背景技术:

阴影是三维场景中的一种重要视觉效果,它能为三维场景的观察者提供不同三维物体之间的空间位置关系信息。阴影生成是三维场景绘制中的核心操作。在许多实时交互式三维场景绘制应用中,为了获得能支持实时人机交互的绘制速度,往往使用点光源照射三维场景。点光源照射下的三维场景阴影通常呈现清晰的边界,三维场景点要么处于阴影之中,要么可以被点光源直接照射,不存在从阴影区到非阴影区的过渡区,这种阴影通常被称为硬阴影。然而,现实生活场景中的阴影通常呈现柔和阴影特征,即从阴影区到非阴影区平滑过渡,没有清晰的边界。那些完全接收不到光源发射的光照的区域称为本影区,本影区和非阴影区之间的区域称为半影区。为了生成真实感强的三维场景画面,需要绘制出三维场景的柔和阴影效果。柔和阴影通常与面光源或者体光源联系在一起。为了绘制出逼真的柔和阴影效果,需要对面光源或者体光源进行采样,同时计算场景点对每个光源采样点的可见性。这通常会导致较大的计算开销,从而影响三维场景的绘制速度。因此,在许多交互式应用中,都不计算精确的柔和阴影结果,通常使用近似技术绘制近似柔和阴影效果。

阴影映射(Shadow Mapping)是一种基于图像的硬阴影绘制方法,该方法利用阴影图(Shadow Map)来实现场景点与点光源之间的可见性判断,目前已经得到广泛应用。现有文献中报道的各种近似柔和阴影绘制方法能够在不同的近似程度上生成三维场景的近似柔和阴影。逼真的柔和阴影通常具有如下特征:①半影区的阴影应该随阴影投射对象到阴影接收对象的距离的增加而变得更柔和;②当光源变得足够大时,本影区应该消失。不少现有近似柔和阴影绘制方法不能绘制出具备上述特征的柔和阴影,因此其绘制的近似柔和阴影的真实感并不是非常高。



技术实现要素:

本发明的目的在于提供一种利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法,通过对方向点光源照射下的三维场景中的光源可见性进行位置敏感的平滑滤波,能绘制出近似柔和阴影,可显著提高绘制出的三维场景直接光照效果画面的真实感。

本方法技术方案是这样实现的:一种利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法,其特征在于:首先把相机放在方向点光源所在位置,使相机的正前方向朝着方向点光源的光锥轴方向,使相机的视场角等于方向点光源的光锥的锥顶角,绘制三维场景以创建阴影图SM;然后把相机放在视点位置,按正常的观察方向和视场角参数绘制三维场景,计算每个可视场景点的空间位置以及不考虑遮挡时的源自方向点光源的直接光照值NCDI,利用阴影图SM判断每个可视场景点与方向点光源之间是否存在遮挡,如果存在遮挡,可视场景点对应的光源可见性值为0,否则可视场景点对应的光源可见性值为1;把所有可视场景点对应的光源可见性值保存成一个光源可见性图VM,利用位置敏感可见性平滑滤波方法对光源可见性图进行滤波,得到每个可视场景点对应的平滑光源可见性值SV;每个可视场景点的源自方向点光源的实际直接光照值等于直接光照值NCDI与平滑光源可见性值SV之乘积;最后把每个可视场景点的实际直接光照值转换成对应像素的颜色值,并输出到计算机屏幕上,从而显示出三维场景直接光照效果画面中的柔和阴影。方向点光源只在光锥的锥顶角范围内发射光照,在与光锥轴方向夹成的夹角大于锥顶角的一半的方向上无光照发射。可视场景点就是从视点透过虚拟像素平面能直接看见的场景点,可视场景点与像素一一对应。从视点出发的穿过虚拟像素平面的像素的射线与三维几何对象相交,离视点最近的交点就是可视场景点。具体步骤如下:

一、创建阴影图:

步骤S101:按照阴影映射方法的流程,把相机放在方向点光源所在位置,使相机的正前方向朝着方向点光源的光锥轴方向,使相机的视场角等于方向点光源的光锥的锥顶角,绘制三维场景以创建阴影图SM;

二、计算不考虑遮挡时的可视场景点的源自方向点光源的直接光照值NCDI并创建可见性图VM:

步骤S201:把相机放在视点位置,按正常的观察方向和视场角参数绘制三维场景,计算每个可视场景点的空间位置以及不考虑遮挡时的源自方向点光源的直接光照值NCDI;在计算机系统的存储器中创建一个二维数组DIS,二维数组DIS的行数等于虚拟像素平面的像素行数,二维数组DIS的列数等于虚拟像素平面的像素列数,把二维数组DIS的每个元素都赋值为−1,二维数组DIS的元素与虚拟像素平面上的像素一一对应,二维数组DIS的元素也与可视场景点一一对应;

步骤S202:使用阴影映射方法的技术,利用阴影图SM判断每个可视场景点与方向点光源之间是否存在遮挡,如果存在遮挡,则令可视场景点对应的光源可见性值为0,同时把与可视场景点对应的二维数组DIS的元素赋值为阴影映射方法在执行可视场景点与方向点光源之间的遮挡判断操作时使用的阴影图SM的像素值,否则令可视场景点对应的光源可见性值为1;

步骤S203:在计算机系统的存储器中创建一个二维数组B001,二维数组B001的行数等于虚拟像素平面的像素行数,二维数组B001的列数等于虚拟像素平面的像素列数,把二维数组B001的每个元素都赋值为1;

步骤S204:对于步骤S202中的每个可视场景点,计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,把二维数组B001的第irow行、第jcol列的元素赋值为可视场景点对应的光源可见性值。

步骤S205:执行完步骤S204后,二维数组B001就是最终得到的可见性图VM;

三、计算每个可视场景点对应的位置敏感可见性平滑滤波器的空间宽度:

步骤S301:在计算机系统的存储器中创建一个二维数组C001,二维数组C001的行数等于虚拟像素平面的像素行数,二维数组C001的列数等于虚拟像素平面的像素列数,把二维数组C001的每个元素都赋值为0,二维数组C001的元素与步骤S202中的可视场景点一一对应;

步骤S302:对于步骤S202中的每个可视场景点,计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,如果可见性图VM的第irow行、第jcol列的元素值为0,则令,并把二维数组C001的第irow行、第jcol列的元素赋值为K,其中dLP为可视场景点到方向点光源的距离,dCPdLP与二维数组DIS的第irow行、第jcol列的元素值之差,c1为比例控制系数,W表示虚拟面光源尺寸,w表示虚拟遮挡球尺寸,M表示位置敏感可见性平滑滤波器的空间宽度最大值,min(x, y)表示取xy二者的最小值,max(x, y)表示取xy二者的最大值,表示对x求向下取整运算。

四、对可见性图VM进行位置敏感可见性平滑滤波并根据滤波结果实现近似柔和阴影绘制:

步骤S401:对于步骤S202中的每个可视场景点,首先计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,然后令Kf等于二维数组C001的第irow行、第jcol列的元素的值,把可见性图VM的以第irow行、第jcol列的元素为中心的包含(2Kf+1)×(2Kf+1)个元素的正方形区域内的所有元素之和赋值给Vs,令Vf = Vs/[(2Kf+1)×(2Kf+1)],可视场景点的源自方向点光源的实际直接光照值等于可视场景点的直接光照值NCDI与Vf之乘积;可视场景点的直接光照值NCDI在步骤S201中计算得到,Vf就是对可见性图VM进行位置敏感可见性平滑滤波后得到的可视场景点对应的平滑光源可见性值SV;

步骤S402:把所有可视场景点的实际直接光照值转换成对应像素的颜色值,并输出到计算机屏幕上。

在步骤S401中,可视场景点的位置敏感可见性平滑滤波操作就是用一个包含(2Kf+1)×(2Kf+1)个元素的正方形空间平滑滤波模板覆盖在可见性图VM上,并使正方形空间平滑滤波模板的中心元素与可见性图VM的第irow行、第jcol列的元素重合,进而求解可见性图VM的被正方形空间平滑滤波模板覆盖的所有元素的值之平均值AVG的过程;平均值AVG就是步骤S401得到的Vf。对于给定的可视场景点,如果正方形空间平滑滤波模板覆盖的区域超出了可见性图VM的有效元素区域,则在执行平滑滤波操作时对可见性图VM进行延展,使正方形空间平滑滤波模板覆盖的所有区域都有可见性图VM的元素,并令所有延展的可见性图VM的元素的值为1。

本发明的积极效果是能够根据可视场景点的位置及遮挡点的位置确定不同的可见性平滑滤波器的空间宽度,从而使绘制出的近似柔和阴影的柔和度依赖于场景点、方向点光源以及遮挡点的空间位置。本方法绘制的三维场景的半影区会随阴影投射对象到阴影接收对象的距离的增加而变得更柔和,绘制的三维场景的本影区会随光源靠近阴影接收对象而相应地缩小。因此,本方法能够绘制出更加符合人们的日常认知的近似柔和阴影。

附图说明

图1为方向点光源示意图。

图2为视点、虚拟像素平面、像素和可视场景点之间的关系示意图。

图3为可见性平滑滤波中定义的正方形区域示意图。

图4为正方形空间平滑滤波模板覆盖区域超出可见性图VM的有效元素区域的示意图。

具体实施方式

为了使本发明的特征和优点更加清楚明白,下面结合具体实施例对本发明作进一步的描述。

在本实施例中,计算机系统的CPU 选择Intel(R) Xeon(R) CPU E3-1225 v3 @ 3.20GHz,内存选择金士顿 8GB DDR3 1333,磁盘选择Buffalo HD-CE 1.5 TU2,显卡选用NVidia Quadro K2000;计算机操作系统选用Windows 7,软件编程工具选用VC++ 2010。在本实施例中,虚拟像素平面的像素行数为768,虚拟像素平面的像素列数为1024;三维场景为一个室内场景,用一个方向点光源从天花板向下照射三维场景。

按照阴影映射方法的流程,首先把相机放在方向点光源所在位置,使相机的正前方向朝着方向点光源的光锥轴方向,使相机的视场角等于方向点光源的光锥的锥顶角,绘制三维场景以创建阴影图SM;然后把相机放在视点位置,按正常的观察方向和视场角参数绘制三维场景,计算每个可视场景点的空间位置以及不考虑遮挡时的源自方向点光源的直接光照值NCDI,利用阴影图SM判断每个可视场景点与方向点光源之间是否存在遮挡,如果存在遮挡,可视场景点对应的光源可见性值为0,否则可视场景点对应的光源可见性值为1;把所有可视场景点对应的光源可见性值保存成一个光源可见性图VM,利用位置敏感可见性平滑滤波方法对光源可见性图进行滤波,得到每个可视场景点对应的平滑光源可见性值SV;每个可视场景点的源自方向点光源的实际直接光照值等于直接光照值NCDI与平滑光源可见性值SV之乘积;最后把每个可视场景点的实际直接光照值转换成对应像素的颜色值,并输出到计算机屏幕上,从而显示出三维场景直接光照效果画面中的柔和阴影。方向点光源的光锥轴方向和光锥的锥顶角如图1所示。可视场景点就是从视点透过虚拟像素平面能直接看见的场景点,可视场景点与像素一一对应。视点、虚拟像素平面、像素和可视场景点之间的关系如图2所示。下面详细地说明如何实现本方法。

一、创建阴影图SM,具体方法如下:

步骤S101:按照阴影映射方法的流程,把相机放在方向点光源所在位置,使相机的正前方向朝着方向点光源的光锥轴方向,使相机的视场角等于方向点光源的光锥的锥顶角,绘制三维场景以创建阴影图SM;

二、计算不考虑遮挡时的可视场景点的源自方向点光源的直接光照值NCDI并创建可见性图VM,具体方法如下:

步骤S201:把相机放在视点位置,按正常的观察方向和视场角参数绘制三维场景,计算每个可视场景点的空间位置以及不考虑遮挡时的源自方向点光源的直接光照值NCDI;在计算机系统的存储器中创建一个二维数组DIS,二维数组DIS的行数等于虚拟像素平面的像素行数,二维数组DIS的列数等于虚拟像素平面的像素列数,把二维数组DIS的每个元素都赋值为−1,二维数组DIS的元素与虚拟像素平面上的像素一一对应,二维数组DIS的元素也与可视场景点一一对应;

步骤S202:使用阴影映射方法的技术,利用阴影图SM判断每个可视场景点与方向点光源之间是否存在遮挡,如果存在遮挡,则令可视场景点对应的光源可见性值为0,同时把与可视场景点对应的二维数组DIS的元素赋值为阴影映射方法在执行可视场景点与方向点光源之间的遮挡判断操作时使用的阴影图SM的像素值,否则令可视场景点对应的光源可见性值为1;

步骤S203:在计算机系统的存储器中创建一个二维数组B001,二维数组B001的行数等于虚拟像素平面的像素行数,二维数组B001的列数等于虚拟像素平面的像素列数,把二维数组B001的每个元素都赋值为1;

步骤S204:对于步骤S202中的每个可视场景点,计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,把二维数组B001的第irow行、第jcol列的元素赋值为可视场景点对应的光源可见性值。

步骤S205:执行完步骤S204后,二维数组B001就是最终得到的可见性图VM;

三、计算每个可视场景点对应的位置敏感可见性平滑滤波器的空间宽度,具体方法如下:

步骤S301:在计算机系统的存储器中创建一个二维数组C001,二维数组C001的行数等于虚拟像素平面的像素行数,二维数组C001的列数等于虚拟像素平面的像素列数,把二维数组C001的每个元素都赋值为0,二维数组C001的元素与步骤S202中的可视场景点一一对应;

步骤S302:对于步骤S202中的每个可视场景点,计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,如果可见性图VM的第irow行、第jcol列的元素值为0,则令,并把二维数组C001的第irow行、第jcol列的元素赋值为K,其中dLP为可视场景点到方向点光源的距离,dCPdLP与二维数组DIS的第irow行、第jcol列的元素值之差,c1为比例控制系数,W表示虚拟面光源尺寸,w表示虚拟遮挡球尺寸,M表示位置敏感可见性平滑滤波器的空间宽度最大值,min(x, y)表示取xy二者的最小值,max(x, y)表示取xy二者的最大值,表示对x求向下取整运算。

四、可见性图VM进行位置敏感可见性平滑滤波并根据滤波结果实现近似柔和阴影绘制,具体方法如下:

步骤S401:对于步骤S202中的每个可视场景点,首先计算出与之对应的虚拟像素平面上的像素的行号irow和列号jcol,然后令Kf等于二维数组C001的第irow行、第jcol列的元素的值,把可见性图VM的以第irow行、第jcol列的元素为中心的包含(2Kf+1)×(2Kf+1)个元素的正方形区域内的所有元素之和赋值给Vs,令Vf = Vs/[(2Kf+1)×(2Kf+1)],可视场景点的源自方向点光源的实际直接光照值等于可视场景点的直接光照值NCDI与Vf之乘积;可视场景点的直接光照值NCDI在步骤S201中计算得到,Vf就是对可见性图VM进行位置敏感可见性平滑滤波后得到的可视场景点对应的平滑光源可见性值SV;

步骤S402:把所有可视场景点的实际直接光照值转换成对应像素的颜色值,并输出到计算机屏幕上。

图3示出了Kf = 2时的步骤S401中的包含(2Kf+1)×(2Kf+1)个元素的正方形区域,每个方格代表一个元素。在步骤S401中,可视场景点的位置敏感可见性平滑滤波操作就是用一个包含(2Kf+1)×(2Kf+1)个元素的正方形空间平滑滤波模板覆盖在可见性图VM上,并使正方形空间平滑滤波模板的中心元素与可见性图VM的第irow行、第jcol列的元素重合,进而求解可见性图VM的被正方形空间平滑滤波模板覆盖的所有元素的值之平均值AVG的过程;平均值AVG就是步骤S401得到的Vf。对于给定的可视场景点,如果正方形空间平滑滤波模板覆盖的区域超出了可见性图VM的有效元素区域,如图4所示,则在执行平滑滤波操作时对可见性图VM进行延展,使正方形空间平滑滤波模板覆盖的所有区域都有可见性图VM的元素,并令所有延展的可见性图VM的元素的值为1。

在步骤S302中,设置W为整个三维场景的立方体包围盒的最长边的长度的1/50,设置wW的1/6,设置c1为200,设置M为25。

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