一种利用局部保守光栅化方法实现硬阴影反走样的方法与流程

文档序号:12888168阅读:739来源:国知局
一种利用局部保守光栅化方法实现硬阴影反走样的方法与流程

本发明涉及一种利用局部保守光栅化方法实现硬阴影反走样的方法,属于3d真实感图形学技术领域。



背景技术:

真实感图像生成是计算机图形学重要研究内容之一,也是虚拟现实、混合现实技术的重要组成部分。阴影效果能极大增强虚拟场景的真实感,是虚拟场景中最重要的视觉元素。目前,可交互的阴影绘制技术主要包括:光线跟踪技术、基于几何体的技术和基于图像的技术。其中,基于图像技术的阴影图(shadowmap,sm)算法是目前应用最广泛的方法,该方法利用场景表面可见点的离散深度图测试采样点的深度,算法的计算时间独立于场景的复杂性,是目前图形硬件支持最广泛的实时阴影绘制技术。阴影图算法包括绘制阶段:首先,从光源视角发射若干条离散光线,计算光线与场景前表面的第一个交点,将最短距离dz存储在z-buffer中,构成阴影图;然后,从相机视角(view/cameraspace)绘制场景,计算光源到屏幕每个像素对应场景点的距离dp,并比较dp与阴影图中对应坐标存储的深度值dz,当dp>dz时,说明采样点不能被光源直接照射,即处于阴影之中(见附图1)。阴影图算法效率高,但是容易产生产生锯齿状阴影边界。其主要原因是阴影图的分辨率与屏幕空间的分辨率不匹配。因此,基于阴影图技术的阴影反走样研究是该技术的关键。保守光栅化(conservativerasterization)方法由hasselgren提出(见附图2),该方法通过三角形扩展算法,实现对每个有图元经过的像素都执行光栅化操作。对全部阴影区域执行保守光栅化操作的增加了计算复杂性,根据观察发现,硬阴影的边界走样发生在阴影图的深度不连续区域,因此,本发明提出了一种局部保守光栅化方法的硬阴影反走样方法,本方法通过对深度不连续区域进行识别,然后只对深度不连续区域执行保守光栅化操作,实现局部优化,进而改进绘制效率和效果。首先,方法对阴影图深度值进行分析,利用牛顿二阶差分识别阴影图的深度连续区域和不连续区域。然后,构造几何阴影图,对深度不连续区域采用保守光栅化方法存储表面可见几何面片的顶点,使得有图元经过的像素均能被光栅化生成片元;而对于深度连续的阴影内部区域,则采用非保守光栅化的几何阴影图方法。最后,利用几何阴影图的连续深度测试,以及边界恢复算法,快速实现准确的阴影反走样绘制。



技术实现要素:

本发明的目的在于提供一种利用局部保守光栅化方法实现硬阴影反走样的方法,其有效的降低了保守光栅化几何阴影图方法的计算的复杂度,而且保持了亚像素级硬阴影反走样的精度问题。

本发明的技术方案是这样实现的:一种利用局部保守光栅化方法实现硬阴影反走样的方法,其特征在于:构建光源为视点的阴影图,利用牛顿二阶差分测试深度的连续性,将阴影图分为连续区域ca和不连续区域da。再次以光源为视点,抽取三维场景表面可见三角面片信息,存储三角形的顶点信息f,对不连续区域da实施保守光栅化方法,对连续区域ca保留其离散深度值,构造深度图t2。根据纹素坐标保持两个深度图的对应关系,其过程可描述为:原始深度图t1,其分辨率为nxn,纹素坐标表示为t1i,j,其中1i,jn。经过深度划分后,形成深度图t2,使t2保持纹理图t1的分辨率,即t1i,jt2i,j对应位置具有相同的纹素坐标。最后,进行深度测试判断阴影区域,运用边界恢复算法绘制场景。其具体的方法按以下步骤实现:

步骤1、设三维虚拟场景点光源位置为l,生成以光源位置l为视点的分辨率为nxn的阴影图s。对与s中的离散深度值,执行牛顿二阶差分测试,分别按照水平方向和垂直方向以及对角线方向对阴影图的深度值进行检测,当水平方向和垂直方向及对角线方向的二阶牛顿差分值分别小于阈值ed,ied,j时(见公式1和公式2),将s分成深度连续区域ca和深度不连续区域da。

设矩阵为阴影图中某一纹素,记ed,ied,j,分别为ti,j中对应行和列深度值的数学期望,则:

(1)

(2)

其中,n为阴影图大小。设表示纹素texeli,j的保守化深度,在公式(1)和公式(2)中,分别表示应行和列对应纹素的保守化深度值。

步骤2、再次以光源位置l为视点,开启深度测试生成前表面可见图元;

步骤3、识别、抽取可见图元信息,压缩存储三角形顶点坐标,在一个128位的纹理存储单元中,32位rgb分量存储三角形的2d顶点坐标v0.xy,v1.xy,v2.xy根据顶点坐标计算三角形法向量,用于深度重建,16位用于存储三角形面片深度及三角形id信息,16位存储三角形斜率,用于计算任意采样点深度值。

步骤4、压缩存储纹素中心深度,法向量及三角形id。完成抽取场景表面可见三角面片,存储三角形顶点坐标及其中心深度值dc,形成与s相同尺寸的几何阴影图g。

步骤5、构建s与g的坐标对应关系,由于s与g的大小相同(分辨率均为nxn),通过坐标建立对应关系。识别出g中的深度不连续区域范围da。对da内的几何面片(三角形)开启保守光栅化操作,通过三角形扩展算法,使得对每个有图元经过的像素都执行光栅化操作。对于ca区域,则直接保持其几何阴影图及纹素中心坐标的离散深度值。

步骤6、深度重建,将视角转换到相机(观察者),绘制屏幕像素对应的场景采样点,根据采样点在光照空间对应的投影三角形,利用公式(4)重建并计算该点在几何阴影图中的深度

(4)

步骤7、深度比较,计算光源到屏幕每个像素对应场景点的距离dp,比较dp与阴影图中对应坐标存储的深度值dz(即重建的深度),当dp>dz时,采样点处于阴影之中,绘制为暗点(处于阴影之中),否则为亮点。

步骤8、边界恢复,为了防止细小三角形面皮的缺失,再结合已有的边界恢复方法,完成反走样绘制。

通过以上步骤可以实现精确的硬阴影边界的亚像素级反走样绘制,同时提高绘制效率。

本发明的积极效果是可以提高亚像素级几何阴影图算法的绘制效率,减少了光栅化阶段的像素计算量,提高了传统阴影图算法的绘制效果。该方法在三维虚拟场景绘制,尤其是动态虚拟场景绘制中,对实时性和效果要求较高的环境下具有实际价值,可以用在影视动漫渲染和计算机仿真中。

附图说明

图1阴影图算法阴影绘制原理图。

图2保守光栅化功能示意图。

图3为rgba缓存存储结构。

图4表面可见几何图元抽取示意图。

具体实施方式

下面结合附图对本发明做进一步的描述:一种利用局部保守光栅化方法实现硬阴影反走样的方法,其特征在于:构建光源为视点的阴影图如图1的深度图,利用牛顿二阶差分测试深度的连续性,将阴影图分为连续区域ca和不连续区域da。再次以光源为视点,抽取三维场景表面可见三角面片信息,存储三角形的顶点信息f,对不连续区域da实施保守光栅化方法,对连续区域ca保留其离散深度值,根据纹素坐标保持两个深度图的对应关系,即将原始深度图存储为纹理图t1,分辨率为nxn,纹素坐标分别为tij其中,1i,jn,对t1进行深度划分后,需保持其分辨率不变,即对应纹素顶点坐标不变。最后,进行深度测试判断阴影区域,运用边界恢复算法绘制场景,其特征在于具体步骤如下:步骤1、设三维虚拟场景点光源位置为l,生成以光源位置l为视点的分辨率为nxn的阴影图s。对与s中的离散深度值,执行牛顿二阶差分测试,分别按照水平方向和垂直方向对阴影图的深度值进行检测,当水平方向和垂直方向的二阶牛顿差分值分别小于阈值ed,ied,j时(见公式1和公式2),将s分成深度连续区域ca和深度不连续区域da。

设矩阵为阴影图中某一纹素,记ed,ied,j,分别为ti,j中对应行和列深度值的数学期望,则:

(1)

(2)

其中,n为阴影图大小,为纹素texeli,j的保守化深度。深度连续性的定义如公式(3-6)所示:

(3)

(4)

(5)

(6)

步骤2、再次以光源位置l为视点,开启深度测试生成前表面可见图元;

步骤3、识别、抽取可见图元信息,压缩存储三角形顶点坐标,在一个128位的纹理存储单元中,32位rgb分量存储三角形的2d顶点坐标v0.xy,v1.xy,v2.xy根据顶点坐标计算三角形法向量,用于深度重建,16位用于存储三角形面片深度及三角形id信息,16位存储三角形斜率,用于计算任意采样点深度值。

步骤4、压缩存储纹素中心深度,法向量及三角形id。如图3所示,完成抽取场景表面可见三角面片,存储三角形顶点坐标及其中心深度值dc,形成与s相同尺寸的几何阴影图g。

步骤5、构建s与g的坐标对应关系,由于s与g的大小相同(分辨率均为nxn),通过坐标建立对应关系。识别出g中的深度不连续区域范围da。对da内的几何面片(三角形)开启保守光栅化操作,通过三角形扩展算法,使得对每个有图元经过的像素都执行光栅化操作。对于ca区域,则直接保持其几何阴影图及纹素中心坐标的离散深度值。

步骤6、深度重建,将视角转换到相机(观察者),绘制屏幕像素对应的场景采样点,根据采样点在光照空间对应的投影三角形,利用公式(4)重建并计算该点在几何阴影图中的深度

(4)

步骤7、深度比较,计算光源到屏幕每个像素对应场景点的距离dp,比较dp与阴影图中对应坐标存储的深度值dz(即重建的深度),当dp>dz时,采样点处于阴影之中,绘制为暗点(处于阴影之中),否则为亮点。通过以上步骤可以实现精确的硬阴影边界的亚像素级反走样绘制,同时提高绘制效率。

步骤8、边界恢复,为了防止细小三角形面片的缺失,结合已有的边界恢复方法,完成反走样绘制。

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