一种基于图像屏幕空间的实时软阴影实现方法
【专利摘要】本发明公开一种基于图像屏幕空间的实时软阴影实现方法,包括如下步骤:A、遍历场景内所有在虚拟相机可见范围内的对象。B、构建一个光源空间,并创建一个用于保存屏幕空间内深度的纹理,生成一张shadow?map。C、经过投影变换将世界位置坐标转化到灯光空间,获得像素的新位置的深度图。D、将像素的新位置的深度和shadow?map进行比较,判定哪些像素处于阴影中,从而得到一张shadow?mask。E、对shadow?mask进行高斯模糊处理。F、将模糊后的shadow?mask与场景颜色进行叠加,实现软阴影效果。本发明改良了传统基于采样纹理的PCF,有效的解决了场景模型边界出现锯齿的现象,实现了较好的软阴影效果,而且对于较复杂的场景实现软阴影的效果也非常好,绘制效率高。
【专利说明】一种基于图像屏幕空间的实时软阴影实现方法
【技术领域】
[0001] 本发明涉及软阴影【技术领域】,尤其涉及一种基于图像屏幕空间的实时软阴影实现 方法。
【背景技术】
[0002] 作为游戏引擎中一个非常重要功能的光影效果,阴影在虚拟的游戏有着至关重要 的作用,加入了此效果,图像的立体感和层次将更加的丰富,同时也提高了场景的真实感受 度。阴影可以分为软硬两种阴影,硬阴影算法比较简单,而实时软阴影比硬阴影更具有真 实感,可是动态的软阴影的实现是计算机图形学研究的一个难点。传统实时软阴影的实现 过程如下:首先以光源为视点生成包含场景深度信息的深度图(shadow map),然后从观察 者视点将场景渲染到一张屏幕纹理缓冲中,进而对此采样的纹理进行多次采样取平均值 (percentage closer filtering, PCF),这种方法产生的软阴影质量和采样次数有直接关 系,如果要得到比较柔和的软阴影效果,则需要大量的纹理采样,效率低下。
【发明内容】
[0003] 本发明的目的在于通过一种基于图像屏幕空间的实时软阴影实现方法,来解决以 上【背景技术】部分提到的问题。
[0004] 为达此目的,本发明采用以下技术方案:
[0005] -种基于图像屏幕空间的实时软阴影实现方法,包括如下步骤:
[0006] A、遍历场景内所有在虚拟相机可见范围内的对象;
[0007] B、构建一个光源空间,并创建一个用于保存屏幕空间内深度的纹理,生成一张 shadow map ;
[0008] C、经过投影变换将世界位置坐标转化到灯光空间,获得像素的新位置的深度图;
[0009] D、将所述像素的新位置的深度和shadow map进行比较,判定哪些像素处于阴影 中,从而得到一张 shadow mask ;
[0010] E、对所述shadow mask进行高斯模糊处理;
[0011] F、将模糊后的shadow mask与场景颜色进行叠加,实现软阴影效果。
[0012] 特别地,所述步骤B具体包括:在相机可见范围内,构建一个光源空间,将相机的 朝向与光源方向调为一致,并创建一个用于保存屏幕空间内深度的纹理,然后绘制场景、 读取深度缓冲的内容,将场景的深度缓冲信息渲染到浮点格式的纹理中,生成一张 shadow map。
[0013] 特别地,所述步骤E具体包括:首先创建一个纹理并获得纹理的表面信息,然后利 用高斯模糊对纹理表面进行处理,其中,在渲染该纹理时需要渲染两个目标:水平方向和垂 直方向;对shadow mask做高斯模糊,经过GPU光栅化后,渲染出一个屏幕大小的方形即模 糊后的纹理。
[0014] 本发明提出的基于图像屏幕空间的实时软阴影实现方法改良了传统基于采样纹 理的PCF,有效的解决了场景模型边界出现锯齿的现象,实现了较好的软阴影效果,而且对 于较复杂的场景实现软阴影的效果也非常好,绘制效率高。
【专利附图】
【附图说明】
[0015] 图1为本实施例提供的基于图像屏幕空间的实时软阴影实现方法流程图;
[0016] 图2为本实施例提供的模糊前纹理图;
[0017] 图3为本实施例提供的模糊后纹理图;
[0018] 图4为本实施例提供的中心点相邻像素所占的权重示意图。
【具体实施方式】
[0019] 下面结合附图和实施例对本发明作进一步说明。可以理解的是,此处所描述的具 体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描 述,附图中仅示出了与本发明相关的部分而非全部内容。
[0020] 请参照图1所示,图1为本实施例提供的基于图像屏幕空间的实时软阴影实现方 法流程图。
[0021] 本实施例中基于图像屏幕空间的实时软阴影实现方法包括如下步骤:
[0022] 步骤S101、遍历场景内所有在虚拟相机可见范围内的对象。遍历场景中的对象是 否在虚拟相机可见范围内,只渲染相机内可见的区域。
[0023] 步骤S102、构建一个光源空间,并创建一个用于保存屏幕空间内深度的纹理,生成 一张 shadow map。在相机可见范围内,构建一个光源空间,将相机的朝向与光源方向调为一 致,并创建一个用于保存屏幕空间内深度的纹理,然后绘制场景、读取深度缓冲的内容,将 场景的深度缓冲信息渲染到浮点格式的纹理中,生成一张 shadow map即深度图。
[0024] 步骤S103、经过投影变换将世界位置坐标转化到灯光空间,获得像素的新位置的 深度图。根据步骤S102生成的shadow map,在屏幕空间计算阴影的过程中,经过投影变换 将世界位置坐标转化到灯光空间。
[0025] 步骤S104、将所述像素的新位置和深度图进行比较,判定哪些像素处于阴影中,从 而得到一张 shadow mask,S卩非阴影的地方是白色,阴影的地方是黑色。从灯光空间渲染场 景时,把该空间下场景中的像素逐个和shadow map中保存的深度进行比较,当像素深度大 于深度图的深度时,则判定该像素是受阴影的,当等于深度图的深度时,则判定该像素是受 光的,从而得到一张屏幕大小纹理图的shadow mask即阴影遮罩。
[0026] 步骤S105、对所述shadow mask进行高斯模糊处理。首先创建一个纹理并获得纹 理的表面信息,然后利用高斯模糊对纹理表面进行处理,其中,在渲染该纹理时需要渲染两 个目标:水平方向和垂直方向;对shadow mask做高斯模糊,经过GPU光栅化后,渲染出一个 屏幕大小的方形即模糊后的纹理。其中,GPU是Graphic Processing Unit的缩写,简称图 形处理单元。模糊处理后的效果对比如图2和图3所示,图2为模糊前的纹理图,图3为模 糊后的纹理图。
[0027] 高斯模糊是一种图像模糊的滤波器,它正态分布计算图像中每个像素的变换,因 为深度信息是记录二维空间的坐标信息,则它在二维空间的方程为: / 、 1 ~(u2+v2)/
[0028] G(U,V)=_L^e /2σ 2 2πσ2
[0029] 其中,〇是正态分布的方差,u和v是像素的坐标值。利用相邻像素的加权值来表 示该点的像素值,它的应用原理是取shadow mask中每个像素的周边像素的平均值。具体 过程如下:一、计算权重值。需要根据σ的值来确定,一般取值为σ =2。如图4所示,把 w5所占格子的像素定为中心像素,临近的w8像素的权重值和中心像素相加并平均,就可以 得到中心像素的权重值,但是由于所有像素权重值的总和必须为1,因此把所有的像素权重 除以中心像素的权重值就可以了。由此得到相邻每个像素的权重值。二、获得各个像素的 权重值和各个像素的颜色值后就可以计算高斯模糊了。把每个点的像素值*对应像素的权 重值,然后就把9个值加在一起即为中心点的高斯模糊值。
[0030] 步骤S106、将模糊后的shadow mask与场景颜色进行叠加,实现软阴影效果。模糊 后的纹理投射到屏幕上,实现实时软阴影。
[0031] 本发明的技术方案改良了传统基于采样纹理的PCF,有效的解决了场景模型边界 出现锯齿的现象,实现了较好的软阴影效果,而且对于较复杂的场景实现软阴影的效果也 非常好,绘制效率高。
[0032] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解, 本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、 重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行 了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还 可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【权利要求】
1. 一种基于图像屏幕空间的实时软阴影实现方法,其特征在于,包括如下步骤: A、 遍历场景内所有在虚拟相机可见范围内的对象; B、 构建一个光源空间,并创建一个用于保存屏幕空间内深度的纹理,生成一张 shadow map ; C、 经过投影变换将世界位置坐标转化到灯光空间,获得像素的新位置的深度图; D、 将所述像素的新位置的深度和shadow map进行比较,判定哪些像素处于阴影中,从 而得到一张 shadow mask ; E、 对所述shadow mask进行高斯模糊处理; F、 将模糊后的shadow mask与场景颜色进行叠加,实现软阴影效果。
2. 根据权利要求1所述的基于图像屏幕空间的实时软阴影实现方法,其特征在于,所 述步骤B具体包括:在相机可见范围内,构建一个光源空间,将相机的朝向与光源方向调为 一致,并创建一个用于保存屏幕空间内深度的纹理,然后绘制场景、读取深度缓冲的内容, 将场景的深度缓冲信息渲染到浮点格式的纹理中,生成一张 shadow map。
3. 根据权利要求1或2任一项所述的基于图像屏幕空间的实时软阴影实现方法,其特 征在于,所述步骤E具体包括:首先创建一个纹理并获得纹理的表面信息,然后利用高斯模 糊对纹理表面进行处理,其中,在渲染该纹理时需要渲染两个目标:水平方向和垂直方向; 对shadow mask做高斯模糊,经过GPU光栅化后,渲染出一个屏幕大小的方形即模糊后的纹 理。
【文档编号】G06T15/60GK104103089SQ201410367545
【公开日】2014年10月15日 申请日期:2014年7月29日 优先权日:2014年7月29日
【发明者】张翼 申请人:无锡梵天信息技术股份有限公司