1.一种利用位置敏感可见性平滑滤波实现三维场景近似柔和阴影绘制的方法,其特征在于:首先把相机放在方向点光源所在位置,使相机的正前方向朝着方向点光源的光锥轴方向,使相机的视场角等于方向点光源的光锥的锥顶角,绘制三维场景以创建阴影图SM;然后把相机放在视点位置,按正常的观察方向和视场角参数绘制三维场景,计算每个可视场景点的空间位置以及不考虑遮挡时的源自方向点光源的直接光照值NCDI,利用阴影图SM判断每个可视场景点与方向点光源之间是否存在遮挡,如果存在遮挡,可视场景点对应的光源可见性值为0,否则可视场景点对应的光源可见性值为1;把所有可视场景点对应的光源可见性值保存成一个光源可见性图VM,利用位置敏感可见性平滑滤波方法对光源可见性图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为可视场景点到方向点光源的距离,dCP为dLP与二维数组DIS的第irow行、第jcol列的元素值之差,c1为比例控制系数,W表示虚拟面光源尺寸,w表示虚拟遮挡球尺寸,M表示位置敏感可见性平滑滤波器的空间宽度最大值,min(x, y)表示取x和y二者的最小值,max(x, y)表示取x和y二者的最大值, 表示对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。