首页> 中国专利> 基于局部阴影图的高质量软阴影快速生成方法

基于局部阴影图的高质量软阴影快速生成方法

摘要

本发明提出了一种基于局部阴影图的高质量软阴影快速生成方法,该方法的流程图包括以下两个部分:自适应光源采样,通过将生成的部分阴影图反投影到相机视点下来判断是否进一步细分光源采样点,从而实现对光源进行自适应采样,生成足够保证高质量阴影的阴影图;局部阴影图加速,在反投影阴影图时计算可见阴影像素对应的面光源阴影图区域,并以此调整阴影图生成的投影矩阵和视口,从而加速阴影图的生成。本方法在保证高质量阴影的同时,能大大提高渲染效率,尤其适用于不可见阴影部分较多的场景。本方法支持动态面光源、动态可变形场景且无须预计算,具有实施简单、效果逼真、渲染高效等优点。

著录项

  • 公开/公告号CN103366396A

    专利类型发明专利

  • 公开/公告日2013-10-23

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201310282795.5

  • 发明设计人 王莉莉;张鑫维;马志强;

    申请日2013-07-06

  • 分类号G06T15/60(20060101);

  • 代理机构11251 北京科迪生专利代理有限责任公司;

  • 代理人杨学明;顾炜

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2024-02-19 21:18:53

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-28

    未缴年费专利权终止 IPC(主分类):G06T15/60 授权公告日:20160210 终止日期:20180706 申请日:20130706

    专利权的终止

  • 2016-02-10

    授权

    授权

  • 2013-11-20

    实质审查的生效 IPC(主分类):G06T15/60 申请日:20130706

    实质审查的生效

  • 2013-10-23

    公开

    公开

说明书

技术领域

本发明属于高质量软阴影的技术领域,具体涉及一种基于多阴影图的软阴影生成方法。

背景技术

在真实的自然界中,任何场景都可以看到软阴影。许多硬阴影生成方法已经广泛地应用 于游戏、动画以及虚拟现实系统中,然而如何快速地生成高质量的软阴影,增强虚拟场景的 真实感,使场景显得更逼真依旧是一个复杂的任务,具有很高的研究价值。这些年,人们已 经提出了很多关于软阴影生成的方法,主要集中在对于Shadow Maps算法和Shadow Volumes 算法的改进及扩展的研究上。因为基于物理的软阴影生成方法需要大量的可见性计算,现在 的交互式应用大多数采用基于单张阴影图的方法,通过启发式方法来近似软阴影的半影区 (部分光源被遮挡住的区域)。这些方法虽然能快速的绘制出近似的软阴影效果,可与真实 的阴影效果还是不相同的。

Wyman等人于2003年在“Penumbra Maps:Approximate Soft Shadows in Real-Time”中 通过分析光源下物体的轮廓来生成“半影图”,并结合单张阴影图来估计并渲染半影区域。 Fernando于2005年在“Percentage-closer Soft Shadows”中将Percentage Closer Filtering方法和 局部搜索相结合,通过比较阴影图对应位置附近的所有深度值来确定阴影值;这种方法能根 据光源、遮挡物、接收物三者之间的关系调整过滤范围,在软化了阴影边界,减少锯齿现象 的同时,避免半影区大小一样带来的不真实感。为了减少该方法中大量的纹理查询操作, Donnelly等人于2006年在“Variance Shadow Maps”以及Annen等人于2009年在“Convolution  Shadow Maps”中分别提出了一些经典的预过滤方法,使近似软阴影的生成达到了实时。

Guennebaud等人于2006年和2007年分别在“Real-time Soft Shadow Mapping by  Backprojection”和“High-Quality Adaptive Soft Shadow Mapping”、Atty等人于2006年在“Soft  Shadow Maps:Efficient Sampling of Light Source Visibility”、Aszódi等人于2006年在 “Real-time Soft Shadows with Shadow Accumulation”以及Schwarzm等人于2007在“Bitmask  Soft Shadows”中提出了一类称之为Backprojection的方法。该类算法不仅将阴影图用作于生 成阴影时的深度比较,而且其看作为一种简单的场景离散化表示。对于屏幕像素点p,阴影 图上的每个纹元被从p点反投影到光源上。通过计算光源上被遮挡部分大小即可求得p点的 阴影值。这些算法能比较准确地产生软阴影,可当遮挡物存在重叠或者光源离遮挡物过近时, Backprojection算法容易产生错误的阴影。同时将大量的阴影图纹元反投影,也产生较大的 开销。

一种最直观的基于阴影图的高质量软阴影算法是将面光源离散为多个点光源。首先,通 过对面光源进行多点采样,在每个采样点生成一张场景的阴影图;然后,利用形成的多张阴 影图共同渲染物体的阴影。这种算法较好的模拟出软阴影的形成,当采样点足够多时该算法 生成可以出高质量的软阴影。这种算法的不足也显而易见,多张阴影图意味着多次场景渲染, 当要求的阴影图太多时,渲染效率就得不到保证。

Heckbert等人与1997年在“Simulating Soft Shadows with Graphics Hardware”中提出一种 只对均匀分布的少数光源采样点进行采样来生成软阴影的方法,先为每个阴影遮挡物计算一 个“衰减图”,然后利用其来渲染物体光影。Agrawala于2000年在“Efficient Image-based  Methods for Rendering Soft Shadows”提出为整个场景创建一个“分层衰减图”,从而使渲染速 率达到实时。St-Amour等人于2005年在“Soft Shadows from Extended Light Sources with  Penumbra Deep Shadow Maps”中将多张阴影图的可见性信息存在一个预处理的三维压缩可 见性数据结构中,用以生成阴影。Sintorn等人于2008年在“Sample-based Visibility for Soft  Shadows Using Alias-free Shadow Maps”中利用CUDA支持的非规则数据结构,准确的计算每 个像素的阴影值。Scherzer等人于2009年在“Real-Time Soft Shadows Using Temporal  Coherence”中利用帧间连续性,将对光源的采样平均到多个帧中。尽管对于一些场景,该方 法能快速收敛,得到高质量的软阴影效果,但不适用于产生快速移动物体的软阴影。

Michael等人于2012年在“Fast Accurate Soft Shadows with Adaptive Light Source  Sampling”中提出了一种自适应光源采样方法(FASS)。该方法首先对光源的几个点进行采样, 生成阴影图。然后对这几张阴影图产生的场景阴影进行比较,选出能提高阴影质量的采样点 进一步生成新的阴影图。当场景简单且视点离物体较远时,该算法能根据阴影的变化自适应 地选择较少的采样点,从而提高软阴影的渲染效率。然而当视点靠近阴影,半影区在屏幕的 面积变大,该算法得到的采样点数目很容易就到达最大值,从而导致效率急剧下降。

发明内容

本发明解决的技术问题是:基于多阴影图的软阴影方法存在阴影图生成时间过长的缺 陷;且当视点靠近某一物体的阴影时,场景中可见的阴影变少,渲染时只有部分阴影图的信 息会被利用到。因此需要设计出一种方法,在保证高质量的软阴影同时,减少阴影图生成时 间,从而来提高绘制效率。方法本身要保持多阴影图渲染方法的特性,支持含有可移动可变 形物体的完全动态场景,同时支持移动的面光源属性。

本发明的技术解决方案为:借鉴FASS方法来自适应采样光源,减少需要的阴影图数目; 同时利用局部阴影图的思想加速后续过程中每一张阴影图的生成。由此提出了一种基于局部 阴影图的高质量软阴影快速绘制方法,包括如下步骤:

(1)初始化光源采样点,根据场景大小确定阴影图生成的投影矩阵和视口以及其他初始 化设置。

(2)利用自适应方法对光源进行采样,确定只生成能保证高质量软阴影的最少数目阴影 图;同时通过初始阴影图信息自适应调整阴影图生成的投影矩阵和视口,从而生成局部阴影 图来加速后续阴影图生成的过程。

(3)应用步骤(2)得到的阴影图生成软阴影,从视点位置绘制一遍整个场景,使用Phong 光照模型结合阴影图上的可见性信息,渲染得到整个场景的光影效果。

在减少阴影图生成时间的处理上,一方面借鉴FASS方法的做法,采样自适应光源采样 方法减少不必要的阴影图,另一方面利用局部阴影图技术对阴影图的生成进行加速,其特征 在于:根据光源初始采样点生成的阴影图信息,调整投影矩阵和视口,从而利用更精细的光 源视景体使后续生成的阴影图成为局部阴影图,只保留了对可见阴影有贡献的部分,加速了 整个软阴影的绘制。具体包括以下步骤:

(1)采样点阴影图生成分两个阶段:首先是初始采样点处阴影图,这时候生成的阴影图 是完整的阴影图,采用统一的只依赖于场景的透视投影矩阵和视口生成,不随视点的移动而 变化;接下来是为了提高阴影质量而产生的细分采样点处的阴影图,这些阴影图随当前视点 对应的ALSMR改变而改变,属于局部阴影图。

(2)每一帧对光源进行自适应采样,只生成能保证高质量软阴影最少数目的阴影图:通 过将生成的四张相邻采样点的阴影图反投到场景中,再根据阴影灰度值变化来统计需要细分 的像素点;由需要细分的像素点个数来确定是否需要进一步采样,从而达到了减少阴影图数 目,加快渲染的目的。

(3)快速求取面光源阴影图范围(Area Light Shadow Maps Range,以下简称ALSMR) ALSMR:记录视点下每个可见阴影像素对应的阴影图位置(U,V),并根据其在各初始阴影 图上的位置信息得到该阴影像素的面光源阴影图范围,可以证明该像素在面光源上任何一采 样点生成的阴影图上的位置不会超过该范围。

如图3-A所示,分别在面光源两个顶点S1和S2处采样,生成的p的阴影示意图;图3-B 则显示在采样点位置不变情况下,将p点逆向平移与l1(l1为S1与S2之间的距离)成比例的 相应位移l2后,得到空间点p’。投影p’就可以得到相同的阴影示意图。如此,对于同一个三 维空间点p,在面光源上任意一点Sr的采样都可以等价于将空间点逆向平移与lr(lr=Sr-S1) 相应的位移后,在初始位置S1处采样得到的阴影图。由于光源面积有限,所以一定存在p 的面光源阴影图范围ALSMR,使得p对于在该面光源上任意一点的采样得到的阴影图对应 位置不会超过该范围。利用Ping-pong技术在GPU端快速合并所有可见阴影像素对应的 ALSMR。如图4所示,对p点在四张阴影图上的UV坐标值取极小值和极大值,即可得到p 点的ALSMR(图中最右边正方形中的红色区域)。由于本发明是要通过只生成对可见阴影有 贡献的阴影图部分来提高软阴影渲染的效率,故只考虑处于阴影中的屏幕像素对应的空间点 p(以下简称“可见阴影点”)的ALSMR。通过比较可见阴影点的ALSMR对应UV方向上的 最大值和最小值,可将所有可见阴影点的ALSMR合并,由此得到的当前视点下总ALSMR, 将为后续局部阴影图的生成提供必要参数。

(4)根据可见阴影区域的ALSMR,重新调整阴影图生成的投影矩阵和视口,产生能生成 局部阴影图的更精细视景体。

(5)单pass的多阴影图软阴影渲染:利用纹理数组和统一缓冲对象进行多阴影图的软阴 影绘制。通过将生成的多张阴影图存放到纹理数组中,将与之对应的投影矩阵存在UBO中 一起传给shader,实现在一个pass中利用多张阴影图对软阴影进行绘制,提高了渲染效率。

本发明具有以下有益效果:第一,提出了局部阴影图技术,对于多阴影图渲染方法起到 普遍性的加速作用。第二,结合自适应光源采样方法,提出了基于局部阴影图的高质量软阴 影快速生成方法,大大提高了多阴影图渲染方法的效率。

附图说明

图1算法整体流程图;

图2完整阴影图和局部阴影图;

图3局部阴影图技术说明图;

图4可见阴影像素ALSMR示意图;

图5局部阴影图生成示意图;

图6ALSMR合并示意图;

图7本发明方法与已有方法的软阴影效果对比图。

具体实施方式

下面结合附图以及本发明的具体实施方式进一步说明本发明。

(1)成采样点阴影图

本发明的软阴影方法是基于多张阴影图的,这些阴影图分两个阶段分别生成。第一个阶 段生成初始采样点处阴影图(对于矩形面光源,即面光源四个顶点处的阴影图)。初始阴影 图是完整的阴影图,采用统一的只依赖于场景的透视投影矩阵和视口生成,不随视点的移动 而变化。第二个阶段生成为提高阴影质量而产生的细分采样点处的阴影图。生成这些阴影图 的投影矩阵和视口随当前视点对应的ALSMR而改变,这些细分采样点处得到的是局部阴影 图。

ALSMR表示绘制当前视点下的阴影所需要的阴影图区域,其以外的阴影图信息在当前 帧没有被用到,可以不用生成。由此可以根据ALSMR自适应调整后续阴影图生成的视景体 大小(图5中蓝色视景体)。为了保证与初始阴影图分辨率的一致,本发明在后续阴影图的 生成过程中采用与初始采样点阴影图一致的视景体前后裁剪面及相机方向,同时对视口的位 置和大小也做了相应调整。

(2)阴影图比较

在获得了光源采样点的阴影图后,需要将阴影图进行比较,用以判断是否应该进一步细 分采样点,获得更多的阴影图来提升阴影质量。阴影图比较分为反投阴影图和统计需要细分 的像素点两个步骤。

反投阴影图:将在四个相邻采样点得到的阴影图重投到视点下。这一步类似于传统 Shadow Maps算法的第二步。不过,此处不是将阴影图中的信息直接用于光照渲染,而是在 shader中计算每个片段(fragment)在多少张阴影图中处于光源照亮处。片段的数值由0到4 变化,0表示该片段对于四张阴影图对应的采样位置全不可见,处于完全阴影中;4表示该 片段能被四个采样点位置的光源全部照亮,处于完全照亮处。如果比较的阴影图是初始阴影 图,这一步中还要记录每个处于阴影中的片段在相应阴影图中所对应的UV坐标,用以求取 ALSMR(具体见步骤(3))。

统计需要细分的像素点:将反投阴影图中得到的结果送到新的pass中处理。在pixel  shader中,查询每个片段周围8个片段。如果存在某个片段,其周围8个片段被照亮的采样 点数都与当前片段相同,则说明这四张阴影图产生的硬阴影边界太大,用于绘制软阴影会出 现“带状边缘”的误差,需要对光源的采样点进一步细分。否则,说明已经产生足够多的阴影 图来保证渲染除高质量的软阴影。这一步的具体实现可以利用硬件的遮挡查询(Occlusion  Query)功能。在做以上处理时,抛弃掉存在数值不相同的邻近片段的片段。最后统计该pass 中通过测试的片段数,当通过测试的数目为0时,说明所有可见阴影部分达到了足够的细化 程度,停止光源采样细分。

(3)快速求取ALSMR

在对初始阴影图进行比较的过程中,需要快速求得当前视点下的ALSMR。为此,将用 于反投阴影图的pixel shader增加一张四通道输出纹理,用以保存每个屏幕像素对应的 ALSMR。纹理的四个通道分别对应着ALSMR在UV两个方向上的最小值和最大值,记为 (Umin,Vmin,Umax,Vmax),其初始值为(1,1,0,0,)。在将初始阴影图重投到当前视点下时,如 果每个屏幕像素在某张阴影图的深度比较后处在阴影中,则记录像素在该阴影图中对应的 UV坐标值,并用其更新ALSMR。

在获得屏幕每个像素的ALSMR后,需要将其合并以得到当前视点的总ALSMR。本文 利用Ping-pong技术在GPU上快速实现,整个过程类似于纹理的Mipmap生成。不过这里新 一层Mipmap的生成不是对上一层纹理颜色进行过滤,而是将其对应的四个像素ALSMR合 并起来存在新的一层中。最后一层Mipmap是1x1的纹理,其四个通道对应的数值即当前视 点下场景的ALSMR。

(4)调整阴影图生成的投影矩阵和视口

将步骤(3)得到的ALSMR信息传输到CPU端后,可以根据此得到新的阴影投影矩阵 和新的视口位置和大小,在后续阶段生成局部阴影图。

(5)利用生成的阴影图渲染软阴影

为了获得高质量的软阴影,必须对所有的阴影图进行查询和深度比较。在统计了所有的 阴影图信息后才能估计出每个像素对光源的可见度,进而计算出阴影值。一种传统的做法是 利用延迟渲染技术。该做法对于每一张阴影图,做一个渲染pass,产生的阴影则乘以一个相 应的权值。将所有pass的阴影值累加起来则得到最终的阴影效果图。这种方法对于阴影图数 目较多时,渲染效率不高。

本发明利用OpenGL3.1的新特性——纹理数组和统一缓冲对象进行多阴影图的软阴影 绘制。较新图形显示卡能最多将2048张相同大小和格式的纹理传给shader程序,并且使 shader能随机访问这些纹理;同时也支持将最多65536byte的外部数据以UBO方式传给 shader程序,供其随机访问。将生成的多张阴影图存放到纹理数组中,将与之对应的投影矩 阵存在UBO中一起传给shader,这样就可以在在一个pass中,利用多张阴影图对软阴影进 行了绘制,大大提升了渲染效率。

本发明的方法使用OpenGL4.1和Cg2.0在MS Visual Studio2010环境下编程实现。所有 实验在一台配置Intel Core i7-3770CPU,6GB内存,显存为1GB的Nvidia Geforce570GTX 机器上测试完成。

当场景较简单,在大多数视点下都可以将场景看全时本文的算法和FASS差不多,不能 达到很好的性能提升。为了表现本文算法在复杂的、较大规模的场景中的优势,本文设计了 三种测试场景——Bunny、小树林和牛群进行实验。所有实验的渲染分辨率均为512x512, 采用512x512的32bit浮点类型纹理作为阴影图,以GL_LINEAR方式存储深度。光源采样 点细分最大层为4层,最多可采样生成289张阴影图。

三种实验场景下阴影效果比较如如图7所示,从左往右每一列的图像分别是A)作为对 比的Reference(用规则采样生成289张阴影图渲染得到),B)本说明的方法渲染结果,C) 本说明的方法和Reference作差的结果(为分辨需要,将差异放大5倍),D)FASS渲染结 果,E)本说明的方法与FASS得到的渲染结果作差(为分辨需要,将结果放大100倍)。从 图中可以看出,本说明的方法与FASS所绘制的效果完全一样,需要的阴影图数目也是一样; 与Reference相比,效果相差非常小。表1反映了用三种不同的方法绘制场景软阴影的渲染 效率,表中的三个场景与图7中显示的阴影效果图相对应。

表1三种实验场景下方法效率的比较单位:帧/秒

*括号中为渲染场景的方法所需要的阴影图数目

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号