CN109493406B - 快速百分比靠近软阴影绘制方法 - Google Patents

快速百分比靠近软阴影绘制方法 Download PDF

Info

Publication number
CN109493406B
CN109493406B CN201811300421.0A CN201811300421A CN109493406B CN 109493406 B CN109493406 B CN 109493406B CN 201811300421 A CN201811300421 A CN 201811300421A CN 109493406 B CN109493406 B CN 109493406B
Authority
CN
China
Prior art keywords
area
pixel
size
pixels
shadow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811300421.0A
Other languages
English (en)
Other versions
CN109493406A (zh
Inventor
朱敏
王建华
李晓伟
杨瑞丰
陈奕筱
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan University
Original Assignee
Sichuan University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan University filed Critical Sichuan University
Priority to CN201811300421.0A priority Critical patent/CN109493406B/zh
Publication of CN109493406A publication Critical patent/CN109493406A/zh
Application granted granted Critical
Publication of CN109493406B publication Critical patent/CN109493406B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Analysis (AREA)
  • Image Processing (AREA)

Abstract

本发明公开了一种快速百分比靠近软阴影绘制方法,包括以下步骤:步骤1:生成阴影图及相应的缩减式多尺度阴影图;步骤2:利用采样信息及复用方案对搜索区域图进行较为精确的快速遍历,得到遮挡物的平均深度;步骤3:计算各像素过滤区域的范围,并使用快速遍历和复用方案对该区域进行遍历,得到软阴影;步骤4:对软阴影图进行模糊处理。本发明能够在较少的运行时间下生成质量较好的软阴影,具有更高的运行效率。

Description

快速百分比靠近软阴影绘制方法
技术领域
本发明涉及计算机图形学中阴影绘制技术领域,具体涉及一种快速百分比靠近软阴影绘制方法,对百分比靠近软阴影绘制算法进行改进,在保证软阴影质量的情况下,降低其运行时间。
背景技术
近年来,虚拟现实的各种应用与大型游戏对虚拟场景的真实感要求越来越高,如何让用户在虚拟环境中体验到与现实世界相同的感受,是这一领域的研究热点之一。阴影可以表达物体间的空间关系,因此被视为提升虚拟场景真实感的重要手段。
阴影可分为硬阴影和软阴影,前者是在点光源下产生的,后者则是在面光源下产生的,更符合人们的认知。虚拟场景中软阴影生成算法可分为基于图像的方法和基于几何计算的方法,前者实现简单而且性能更高。鉴于人们对虚拟场景真实感的要求越来越高以及硬件资源的限制,研究者们将重点放在了基于图像的软阴影生成方法上。
百分比靠近软阴影(Percentage Closer Soft Shadow,PCSS)是一种基于图像的软阴影生成算法,具有实现简单、软阴影生成质量高的优点,因而成为研究的主流。但该方法的计算量很大,生成软阴影的速度较慢。一些研究通过使用预计算数据来重构阴影测试函数,在一定程度上提升了PCSS算法的性能,但会导致生成的软阴影出现漏光现象,影响了软阴影的质量。高质量快速百分比靠近软阴影(High Quality and Efficient PercentageCloser Soft Shadows,HQEPCSS)未进行阴影测试函数的重构,因而可以生成质量较高的软阴影,但是在某些场景中,该方法的效率不高。
发明内容
本发明所要解决的技术问题是提供一种快速百分比靠近软阴影绘制方法(FastPCSS,FPCSS),能够在较少的运行时间下生成质量较好的软阴影。
为解决上述技术问题,本发明采用的技术方案是:
一种快速百分比靠近软阴影绘制方法,包括以下步骤:
步骤1:生成缩减式多尺度阴影图;
步骤2:对场景进行延迟渲染,生成G缓存;
步骤3:计算各像素的搜索区域,并保存为搜索区域图;
步骤4:使用σ1=0.0,σ2=σ3=0.1的差异性上界、4×4的局部区域,并且在父亲像素中保存孩子的位置信息,得到搜索区域图的层级结构图;其中,σ1、σ2、σ3分别代表两像素间可容忍的区域大小差异、区域中心点差异、深度值差异的最大值;
步骤5:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的遮挡物平均深度;
步骤6:利用搜索区域图的层级结构图,填充其余像素的平均遮挡物深度;
步骤7:计算各像素的半影大小;
步骤8:根据半影大小计算各像素的过滤区域范围并保存为过滤区域图;
步骤9:利用σ1=0.0,σ2=σ3=0.1的差异性上界、2×2的局部区域,并且在父亲像素中保存孩子的位置信息,得到过滤区域图的层级结构图;
步骤10:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的软阴影值;
步骤11:利用过滤区域图的层级结构图,填充其余像素的软阴影值并保存为软阴影图;
步骤12:对软阴影图进行模糊处理,即使用过滤内核为3×3的高斯滤波,以使生成的软阴影更加平滑。
进一步的,所述步骤1具体为:
步骤1.1:设置阴影图的大小为2k×2k,k为自然数;以面光源中心为视点对场景进行绘制,将场景深度信息保存到阴影图中,并将阴影图作为缩减式多尺度阴影图的第0层;用i表示当前处理的层数,并设置i=1;
步骤1.2:如果i>k,流程结束;否则需要计算第i层数据,该层的大小为(2k-2i-1)×(2k-2i-1),相对于阴影图来说,左、上边少了2i-1个像素,右、下边少了2i-1-1个像素;在对第i层坐标为(x,y)的像素进行计算时,需要第i-1层4个像素存储的信息,这些信息包括区域内最小深度值、区域内最大深度值、区域内深度值之和以及区域内像素个数;如果i=1,则4个像素的坐标分别为(x-1,y-1)、(x-1,y)、(x,y-1)以及(x,y);否则,4个像素的坐标分别为(x-2i-2,y-2i-2)、(x+2i-2,y-2i-2)、(x-2i-2,y+2i-2)以及(x+2i-2,y+2i-2);i的值加1,重复步骤1.2。
进一步的,在使用缩减式多尺度阴影图对阴影图进行查询时,若查询区域的大小不是2n×2n,n为自然数,需要寻找一个与其相似且大小为2n×2n的区域来替代它;设原区域的中心点坐标为(qx,qy),区域大小为qs×qs,近似区域的中心点坐标为(qx′,qy′),大小为qs′×qs′,则近似区域的计算方式为:
1)计算原区域的左边界l、右边界r、上边界t以及下边界b;
Figure BDA0001852226140000031
Figure BDA0001852226140000032
Figure BDA0001852226140000033
Figure BDA0001852226140000034
2)设阴影图的大小为e,需要将区域的边界限制在阴影图内;
l=max(l,0)
r=min(l,e-1)
t=max(l,0)
b=min(l,e-1)
3)设w=r-l+1、h=b-t+1,w和h分别表示了查询区域的宽度和高度;设lw=log2w,lh=log2h,其反映查询区域的宽和高是否形如2n;用w′表示w的形如2n的近似值,如果lw为整数,则令w′=w;否则,将w写成二进制形式,如果次高位为1,则
Figure BDA0001852226140000035
否则
Figure BDA0001852226140000036
4)用h′表示h的形如2n的近似值,如果lh为整数,则令h′=h,否则,将h写成二进制形式,如果次高位为1,则
Figure BDA0001852226140000037
否则
Figure BDA0001852226140000038
5)如果w′=h′,则令qs′=w′,否则令qs′=min(min(w′,h′)×2,e);
6)计算限制后的区域的中心(qx′,qy′);
qx′=l+qs′/2
qy′=t+qs′/2
7)如果(qx′+qs′/2-1)≥e,则令qx′=e-1-qs′/2+1;如果(qy′+qs′/2-1)≥e,则令qy′=e-1-qs′/2+1。
进一步的,所述步骤5和步骤10中,进行快速遍历为:给定待测值test以及测试区域a,计算区域a中深度值小于test的像素总数count以及这些像素的像素值之和sum,具体如下:
1)将sum和count初始化为0;
2)得到测试区域a内所有像素的最大值vmax和最小值vmin
3)如果test<vmin,说明该区域内不存在小于test的值,因此不改变sum和count,并进行步骤4);如果test>vmax,说明该区域内所有的值都小于test,因此使用缩减式多尺度阴影图获取该区域内像素值之和以及像素总数,分别加到sum和count上,并进行步骤4);否则,说明当前信息不足以完成正确的计算,如果已经遍历到设置的最大层数,就会对该区域进行采样,并利用采样信息得到sum和count的估计值;否则,要将区域a分成多个更小的区域;
4):确定将要遍历的下一区域,如果下一区域存在,则进行步骤2)至3),否则说明已经完成遍历,流程结束。
进一步的,在进行快速遍历时利用采样信息提高计算结果的精确度,即:
使用数量为1、4以及16的采样点组,而且对于每种数量,生成8个不同的采样点组,将采样点的位置标准化到0~1之间,并将所有的采样点组保存为一幅大小为21×8的图像;对于中心为(px,py),大小为ps×ps区域,采样具体如下:
1)用g表示所需的采样点组序号,采样点数量为1的采样点组编号为0,采样点数量为4的采样点组编号为1,采样点数量为16的采样点组编号为2;设置g=ps/2,将g限定在1~4之间,并令g=log2g;
2)设m=(px+py)mod(8),则使用的采样点组为第m套,而且在第m套采样组中,所需的采样点的起始位置为(4g-1)/3,终止位置为4×(4g-1)/3;
3)对所有标准化的采样点位置按区域大小进行放缩,并进行采样。
进一步的,所述步骤3具体为:将各像素对应的三维空间中的点作为视点,则面光源在阴影图所在平面的投影即为其对应的搜索区域。
进一步的,所述步骤7计算各像素的半影大小具体为:设面光源大小为slight,当前像素相对于光源的深度值为dpixel,遮挡物平均深度为daverage,则半影大小spenumbra=((dpixel-daverage)/daverage)×slight
与现有技术相比,本发明的有益技术效果是:能够在较少的运行时间下生成质量较好的软阴影,具有更高的运行效率。
附图说明
图1是缩减式多尺度阴阴影图示意图。
图2是采样点信息组织方式示意图。
图3是局部区域划分方式示意图。
图4是为了说明本发明所提FPCSS方法的有效性,使用到的三个测试场景。
图5展示了HQEPCSS方法在三个场景下的运行时间。
图6展示了FPCSS方法在三个场景下的运行时间。
图7展示了HQEPCSS方法在三个场景下生成的软阴影效果。
图8展示了FPCSS方法在三个场景下生成的软阴影效果。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的说明。
缩减式多尺度阴影图是一个层级结构,其中每一层都是一幅图像,其构造流程为:
步骤1:设置阴影图的大小为2k×2k(k为自然数,通常取9~11)。以面光源中心为视点对场景进行绘制,将场景深度信息保存到阴影图中,并将阴影图作为缩减式多尺度阴影图的第0层。用i表示当前处理的层数,并设置i=1。
步骤2:如果i>k,流程结束;否则需要计算第i层数据,该层的大小为(2k-2i-1)×(2k-2i-1),相对于阴影图来说,左、上边少了2i-1个像素,右、下边少了2i-1-1个像素。在对第i层坐标为(x,y)的像素进行计算时,需要第i-1层4个像素存储的信息,这些信息包括区域内最小深度值、区域内最大深度值、区域内深度值之和以及区域内像素个数。如果i=1,则4个像素的坐标分别为(x-1,y-1)、(x-1,y)、(x,y-1)以及(x,y);否则,4个像素的坐标分别为(x-2i-2,y-2i-2)、(x+2i-2,y-2i-2)、(x-2i-2,y+2i-2)以及(x+2i-2,y+2i-2)。i的值加1,转步骤2。
在使用缩减式多尺度阴影图对阴影图进行查询时,如果查询区域的大小不是2n×2n(n为自然数),需要寻找一个与其相似且大小为2n×2n的区域来替代它,因为缩减式多尺度阴影图只对这样的区域进行了预处理,如果查询区域大小不为2n×2n,需要读取多个像素才可得到所需信息,会增加查询开销。设原区域的中心点坐标为(qx,qy),区域大小为qs×qs,近似区域的中心点坐标为(qx′,qy′),大小为qs′×qs′,则近似区域的计算方式为:
步骤1:计算原区域的左边界l、右边界r、上边界t以及下边界b。
Figure BDA0001852226140000051
Figure BDA0001852226140000052
Figure BDA0001852226140000053
Figure BDA0001852226140000054
步骤2:设阴影图的大小为e,需要将区域的边界限制在阴影图内。
l=max(l,0)
r=min(l,e-1)
t=max(l,0)
b=min(l,e-1)
步骤3:设w=r-l+1、h=b-t+1,w和h分别表示了查询区域的宽度和高度。对于w和h的处理过程相似,以w为例进行说明:设lw=log2w,其可以反映查询区域的宽度是否形如2n。如果lw为整数,则令lw′=lw,并转步骤5,否则执行步骤4。
步骤4:用w′表示w的形如2n的近似值。将w写成二进制形式,如果次高位为1,则
Figure BDA0001852226140000061
否则
Figure BDA0001852226140000062
步骤5:如果w′=h′,则令qs′=w′,否则令qs′=min(min(w′,h′)×2,e)。
步骤6:计算限制后的区域的中心(qx′,qy′)。
qx′=l+qs′/2
qy′=t+qs′/2
步骤7:如果(qx′+qs′/2-1)≥e,则令qx′=e-1-qs′/2+1;如果(qy′+qs′/2-1)≥e,则令qy′=e-1-qs′/2+1。
在快速遍历时可以利用采样信息提高计算结果的精确度。多重抖动采样可以生成较为均匀的采样点。但在实现时还需考虑一些问题。首先,如果在运行时动态计算各区域的采样点信息,会造成性能的下降。因此可以预先计算好采样点信息,一组采样点信息称为一个采样点组。在运行时,只需读取采样点组,省去了采样点位置信息的计算。其次,如果对于大小不同的区域采用相同数量的采样点,则对于较小区域,浪费了计算资源,对于较大区域,采样信息不充分,计算结果较为粗糙。为了对不同大小的区域使用不同数量的采样点,需要保存采样点数量不同的采样点组。最后,如果对所有大小相似区域采用同一采样点组,可能会造成相邻像素的计算结果基本相同,生成的软阴影不够平滑,因此,需要为每一种采样点数量生成多个采样点组,以便对大小相似的不同区域采用不同的采样点组。
本发明使用了数量为1、4以及16的采样点组,而且对于每种数量,生成8个不同的采样点组,将采样点的位置标准化到0~1之间,并将所有的采样点组保存为一幅大小为21×8的图像。对于中心为(px,py),大小为ps×ps区域,采样具体方式如下:
步骤1:用g表示所需的采样点组序号(采样点数量为1的采样点组编号为0,采样点数量为4的采样点组编号为1,采样点数量为16的采样点组编号为2)。设置g=ps/2,将g限定在1~4之间,并令g=log2g。
步骤2:设m=(px+py)mod8(),则使用的采样点组为第m套,而且在第m套采样组中,所需的采样点的起始位置为(4g-1)/3,终止位置为4×(4g-1)/3。
步骤3:对所有标准化的采样点位置按区域大小进行放缩,并进行采样。
软阴影绘制中涉及到快速遍历的问题是:给定待测值test以及测试区域a,计算区域a中深度值小于test的像素总数count以及这些像素的像素值之和sum,具体方法如下:
步骤1:将sum和count初始化为0。
步骤2:得到测试区域a内所有像素的最大值vmax和最小值vmin(利用缩减式多尺度阴影图)。
步骤3:如果test<vmin,说明该区域内不存在小于test的值,因此不改变sum和count,并进行步骤4;如果test>vmax,说明该区域内所有的值都小于test,因此获取该区域内像素值之和以及像素总数,分别加到sum和count上,并进行步骤4;否则,说明当前信息不足以完成正确的计算,如果已经遍历到设置的最大层数,就会对该区域进行采样,并利用采样信息得到sum和count的估计值;否则,要将区域a分成多个更小的区域。
步骤4:确定将要遍历的下一区域,如果下一区域存在,则进行步骤2-3,否则说明已经完成遍历,流程结束。
像素计算结果复用方案中的关键问题有两点:一是差异性的度量方式,用来判断两个像素是否相似;二是关联信息的存储方式,用来对相似像素进行关联。
对于差异性度量方式,像素包含的数据项分别是深度值、搜索区域中心坐标(2个分量)以及搜索区域的大小。设像素ti的深度值为di,区域中心的坐标为(xi,yi),区域大小为si,则对于两个像素t1和t2来说,如果满足:
|(s1-s2)/s2|≤σ1
|(x1-x2)/x2|≤σ2
|(y1-y2)/y2|≤σ2
|(d1-d2)/d2|≤σ3
就认为t1和t2相似,其中σ1、σ2、σ3分别代表两像素间可容忍的区域大小差异、区域中心点差异、深度值差异的最大值。但是使用上述判定条件,采用不同的计算顺序可能会产生不同的结果。因此,在具体实现时,判定条件中使用的除数是两测试数据中的较大值。
对于关联信息存储方式,如果某像素的左边像素和上边像素与其相似,则将其与当前像素关联起来(通过在一幅图像中设置标记)。当所有的像素都计算完成后,相似的像素就会关联到一起,形成多个相似像素组。
为了描述像素之间的关联性,可以将一个像素看作另一个像素的父亲或者孩子。关联信息可以存储在孩子中(在孩子中保存父亲的位置信息),也可以存储在父亲中(在父亲中保存孩子的位置信息)。对于前一种方式,代表像素的值计算完毕后,其它像素需要找到其祖先,然后将祖先像素的值赋值给自身,这种做法会增加总的计算量,因为不同像素查找祖先时经过的路径可能会重复,因而本发明使用后一种方式。在这种方式下,一个像素如果不是任何像素的孩子,它就是代表像素。代表像素需要负责其子孙像素的赋值工作。
上述方法可以达到复用计算结果的目的,但是会出现两方面的问题:一是误差累积现象。若像素t1和像素t2相似,像素t2和像素t3相似,则采用上述方法便会认为像素t1和像素t3相似,而实际上这两个像素不一定相似;二是当一个相似像素组中的像素过多时,代表像素需要为大量像素赋值,严重影响性能。
为了解决这两方面的问题,引入局部区域这一概念,只对位于同一局部区域中的像素执行复用方案。局部区域变相限制了相似像素组的大小,一方面,两像素间的最大误差有了上界,因此减轻了误差累积现象的影响;另一方面,形成的层次结构深度较低,减轻了代表像素的负担。
本发明使用了简单有效的局部区域实现方式,将图像均匀地划分为h×h大小的子区域。在计算关联信息时,设当前处理像素的坐标为(cx,cy),如果(cx)mod(h)≠0,并且(cy)mod(h)≠0,说明其位于局部区域内部,因此使用复用方案进行处理;否则说明其位于局部区域的边界上,于是不设置与其它区域中像素的关联关系,因而层级结构会停止增长,限制了相似像素组大小。
本发明中还涉及到一些原有算法中的重要部分,包括:延迟渲染、搜索区域的计算、线性四叉树以及半影大小的计算。
使用延迟渲染技术,将可见物体的信息保存到G缓存中,之后需要再次访问这些信息时,不需要重新计算,只需从G缓存中查找所需信息即可。
各像素对应的搜索区域的计算方式为:将各像素对应的三维空间中的点作为视点,则面光源在阴影图所在平面的投影即为其对应的搜索区域。
线性四叉树与普通四叉树一样,可以完成快速遍历中的剪枝操作。但是线性四叉树会使用较少的存储空间,降低了程序运行时的系统资源消耗。
半影大小的计算方式如下:
设面光源大小为slight,当前像素相对于光源的深度值为dpixel,遮挡物平均深度为daverage,则半影大小spenumbra=(dpixel-daverage/daverage)×slight
总的来说,本发明快速百分比靠近软阴影绘制方法,包括以下步骤:步骤1:生成缩减式多尺度阴影图;步骤2:对场景进行延迟渲染,生成G缓存;步骤3:计算各像素的搜索区域,并保存为搜索区域图;步骤4:使用σ1=0.0,σ2=σ3=0.1的差异性上界、4×4的局部区域,并且在父亲像素中保存孩子的位置信息,得到搜索区域图的层级结构图;其中,σ1、σ2、σ3分别代表两像素间可容忍的区域大小差异、区域中心点差异、深度值差异的最大值;步骤5:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的遮挡物平均深度;步骤6:利用搜索区域图的层级结构图,填充其余像素的平均遮挡物深度;步骤7:计算各像素的半影大小;步骤8:根据半影大小计算各像素的过滤区域范围并保存为过滤区域图;步骤9:利用σ1=0.0,σ2=σ3=0.1的差异性上界、2×2的局部区域,并且在父亲像素中保存孩子的位置信息,得到过滤区域图的层级结构图;步骤10:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的软阴影值;步骤11:利用过滤区域图的层级结构图,填充其余像素的软阴影值并保存为软阴影图;步骤12:对软阴影图进行模糊处理,即使用过滤内核为3×3的高斯滤波,以使生成的软阴影更加平滑。
为了说明本专利所提FPCSS方法的有效性,使用到的三个测试场景,如图4所示。图5展示了HQEPCSS方法在三个场景下的运行时间,图6展示了FPCSS方法在三个场景下的运行时间,图7展示了HQEPCSS方法在三个场景下生成的软阴影效果,图8展示了FPCSS方法在三个场景下生成的软阴影效果。
由图7和图8的对比可知,FPCSS方法与原有HQEPCSS方法生成的软阴影效果基本相同,但由图5和图6的对比可知,FPCSS方法拥有更快的生成速度。实验结果表明,FPCSS方法可以在保持软阴影真实感的条件下,大幅度提高软阴影的生成速度。

Claims (3)

1.一种快速百分比靠近软阴影绘制方法,其特征在于,包括以下步骤:
步骤1:生成缩减式多尺度阴影图;
步骤1.1:设置阴影图的大小为2k×2k,k为自然数;以面光源中心为视点对场景进行绘制,将场景深度信息保存到阴影图中,并将阴影图作为缩减式多尺度阴影图的第0层;用i表示当前处理的层数,并设置i=1;
步骤1.2:如果i>k,流程结束;否则需要计算第i层数据,该层的大小为(2k-2i-1)×(2k-2i-1),相对于阴影图来说,左、上边少了2i-1个像素,右、下边少了2i-1-1个像素;在对第i层坐标为(x,y)的像素进行计算时,需要第i-1层4个像素存储的信息,这些信息包括区域内最小深度值、区域内最大深度值、区域内深度值之和以及区域内像素个数;如果i=1,则4个像素的坐标分别为(x-1,y-1)、(x-1,y)、(x,y-1)以及(x,y);否则,4个像素的坐标分别为(x-2i-2,y-2i-2)、(x+2i-2,y-2i-2)、(x-2i-2,y+2i-2)以及(x+2i-2,y+2i-2);i的值加1,重复步骤1.2;
在使用缩减式多尺度阴影图对阴影图进行查询时,若查询区域的大小不是2n×2n,n为自然数,需要寻找一个与其相似且大小为2n×2n的区域来替代它;设原区域的中心点坐标为(qx,qy),区域大小为qs×qs,近似区域的中心点坐标为(qx′,qy′),大小为qs′×qs′,则近似区域的计算方式为:
1)计算原区域的左边界l、右边界r、上边界t以及下边界b;
Figure FDA0003820727640000011
Figure FDA0003820727640000012
Figure FDA0003820727640000013
Figure FDA0003820727640000014
2)设阴影图的大小为e,需要将区域的边界限制在阴影图内;
l=max(l,0)
r=min(l,e-1)
t=max(l,0)
b=min(l,e-1)
3)设w=r-l+1、h=b-t+1,w和h分别表示了查询区域的宽度和高度;设lw=log2w,lh=log2h,其反映查询区域的宽和高是否形如2n;用w′表示w的形如2n的近似值,如果lw为整数,则令w′=w;否则,将w写成二进制形式,如果次高位为1,则
Figure FDA0003820727640000021
否则
Figure FDA0003820727640000022
4)用h′表示h的形如2n的近似值,如果lh为整数,则令h′=h,否则,将h写成二进制形式,如果次高位为1,则
Figure FDA0003820727640000023
否则
Figure FDA0003820727640000024
5)如果w′=h′,则令qs′=w′,否则令qs′=min(min(w′,h′)×2,e);
6)计算限制后的区域的中心(qx′,qy′);
qx′=l+qs′/2
qy′=t+qs′/2
7)如果(qx′+qs′/2-1)≥e,则令qx′=e-1-qs′/2+1;如果(qy′+qs′/2-1)≥e,则令qy′=e-1-qs′/2+1;
步骤2:对场景进行延迟渲染,生成G缓存;
步骤3:计算各像素的搜索区域,并保存为搜索区域图;
步骤4:使用σ1=0.0,σ2=σ3=0.1的差异性上界、4×4的局部区域,并且在父亲像素中保存孩子的位置信息,得到搜索区域图的层级结构图;其中,σ1、σ2、σ3分别代表两像素间可容忍的区域大小差异、区域中心点差异、深度值差异的最大值;
步骤5:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的遮挡物平均深度;
步骤6:利用搜索区域图的层级结构图,填充其余像素的平均遮挡物深度;
步骤7:计算各像素的半影大小;
步骤8:根据半影大小计算各像素的过滤区域范围并保存为过滤区域图;
步骤9:利用σ1=0.0,σ2=σ3=0.1的差异性上界、2×2的局部区域,并且在父亲像素中保存孩子的位置信息,得到过滤区域图的层级结构图;
步骤10:利用3层的线性四叉树进行快速遍历,在遍历时使用缩减式多尺度阴影图查询当前遍历区域,接着使用查询到的信息,对代表像素进行处理,得到代表像素的软阴影值;
步骤11:利用过滤区域图的层级结构图,填充其余像素的软阴影值并保存为软阴影图;
步骤12:对软阴影图进行模糊处理,即使用过滤内核为3×3的高斯滤波,以使生成的软阴影更加平滑;
所述步骤5和步骤10中,进行快速遍历为:给定待测值test以及测试区域a,计算区域a中深度值小于test的像素总数count以及这些像素的像素值之和sum,具体如下:
1)将sum和count初始化为0;
2)得到测试区域a内所有像素的最大值v max和最小值v min;
3)如果test<vmin,说明该区域内不存在小于test的值,因此不改变sum和count,并进行步骤4);如果test>vmax,说明该区域内所有的值都小于test,因此使用缩减式多尺度阴影图获取该区域内像素值之和以及像素总数,分别加到sum和count上,并进行步骤4);否则,说明当前信息不足以完成正确的计算,如果已经遍历到设置的最大层数,就会对该区域进行采样,并利用采样信息得到sum和count的估计值;否则,要将区域a分成多个更小的区域;
4)确定将要遍历的下一区域,如果下一区域存在,则进行步骤2)至3),否则说明已经完成遍历,流程结束;
在进行快速遍历时利用采样信息提高计算结果的精确度,即:
使用数量为1、4以及16的采样点组,而且对于每种数量,生成8个不同的采样点组,将采样点的位置标准化到0~1之间,并将所有的采样点组保存为一幅大小为21×8的图像;对于中心为(px,py),大小为ps×ps区域,采样具体如下:
1)用g表示所需的采样点组序号,采样点数量为1的采样点组编号为0,采样点数量为4的采样点组编号为1,采样点数量为16的采样点组编号为2;设置g=ps/2,将g限定在1~4之间,并令g=log2g;
2)设m=(px+py)mod(8),则使用的采样点组为第m套,而且在第m套采样组中,所需的采样点的起始位置为(4g-1)/3,终止位置为4×(4g-1)/3;
3)对所有标准化的采样点位置按区域大小进行放缩,并进行采样。
2.根据权利要求1所述的快速百分比靠近软阴影绘制方法,其特征在于,所述步骤3具体为:将各像素对应的三维空间中的点作为视点,则面光源在阴影图所在平面的投影即为其对应的搜索区域。
3.根据权利要求1所述的快速百分比靠近软阴影绘制方法,其特征在于,所述步骤7计算各像素的半影大小具体为:设面光源大小为slight,当前像素相对于光源的深度值为dpixel,遮挡物平均深度为daverage,则半影大小spenumbra=((dpixel-daverage)/daverage)×slight
CN201811300421.0A 2018-11-02 2018-11-02 快速百分比靠近软阴影绘制方法 Active CN109493406B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811300421.0A CN109493406B (zh) 2018-11-02 2018-11-02 快速百分比靠近软阴影绘制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811300421.0A CN109493406B (zh) 2018-11-02 2018-11-02 快速百分比靠近软阴影绘制方法

Publications (2)

Publication Number Publication Date
CN109493406A CN109493406A (zh) 2019-03-19
CN109493406B true CN109493406B (zh) 2022-11-11

Family

ID=65692270

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811300421.0A Active CN109493406B (zh) 2018-11-02 2018-11-02 快速百分比靠近软阴影绘制方法

Country Status (1)

Country Link
CN (1) CN109493406B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111790150B (zh) * 2020-06-18 2021-05-28 完美世界(北京)软件科技发展有限公司 阴影数据确定方法、装置、设备和可读介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5613048A (en) * 1993-08-03 1997-03-18 Apple Computer, Inc. Three-dimensional image synthesis using view interpolation
US7508390B1 (en) * 2004-08-17 2009-03-24 Nvidia Corporation Method and system for implementing real time soft shadows using penumbra maps and occluder maps
CN101882324A (zh) * 2010-05-19 2010-11-10 北京航空航天大学 基于双向半影图的软阴影实时绘制方法
CN103366396A (zh) * 2013-07-06 2013-10-23 北京航空航天大学 基于局部阴影图的高质量软阴影快速生成方法
CN104103089A (zh) * 2014-07-29 2014-10-15 无锡梵天信息技术股份有限公司 一种基于图像屏幕空间的实时软阴影实现方法
CN104463853A (zh) * 2014-11-22 2015-03-25 四川大学 一种基于图像分割的阴影检测与去除算法
US9576393B1 (en) * 2014-06-18 2017-02-21 Amazon Technologies, Inc. Dynamic rendering of soft shadows for interface elements
CN106485776A (zh) * 2016-11-23 2017-03-08 北京三体高创科技有限公司 一种3d游戏实时渲染大规模场景的方法及系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7969438B2 (en) * 2007-01-23 2011-06-28 Pacific Data Images Llc Soft shadows for cinematic lighting for computer graphics
GB2537973B (en) * 2015-03-03 2018-01-10 Imagination Tech Ltd Systems and methods for soft shadowing in 3-D rendering

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5613048A (en) * 1993-08-03 1997-03-18 Apple Computer, Inc. Three-dimensional image synthesis using view interpolation
US7508390B1 (en) * 2004-08-17 2009-03-24 Nvidia Corporation Method and system for implementing real time soft shadows using penumbra maps and occluder maps
CN101882324A (zh) * 2010-05-19 2010-11-10 北京航空航天大学 基于双向半影图的软阴影实时绘制方法
CN103366396A (zh) * 2013-07-06 2013-10-23 北京航空航天大学 基于局部阴影图的高质量软阴影快速生成方法
US9576393B1 (en) * 2014-06-18 2017-02-21 Amazon Technologies, Inc. Dynamic rendering of soft shadows for interface elements
CN104103089A (zh) * 2014-07-29 2014-10-15 无锡梵天信息技术股份有限公司 一种基于图像屏幕空间的实时软阴影实现方法
CN104463853A (zh) * 2014-11-22 2015-03-25 四川大学 一种基于图像分割的阴影检测与去除算法
CN106485776A (zh) * 2016-11-23 2017-03-08 北京三体高创科技有限公司 一种3d游戏实时渲染大规模场景的方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Revectorization-Based Shadow Mapping;Macedo;《Canadian Human-Computer Communications Society》;20161231;全文 *
基于多层深度图的软阴影生成算法;唐珂;《中国优秀硕士论文辑信息科技》;20131015;全文 *
高质量快速百分比邻近滤波软影算法;沈笠;《计算机辅助设计与图形学学报》;20140315;全文 *

Also Published As

Publication number Publication date
CN109493406A (zh) 2019-03-19

Similar Documents

Publication Publication Date Title
US10249085B2 (en) Graphics processing method and system for processing sub-primitives using sub-primitive indications in a control stream
Zuiderveld et al. Acceleration of ray-casting using 3-D distance transforms
US9396512B2 (en) Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit
US8570322B2 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
TWI546770B (zh) 圖形處理單元中3d加速結構之完全並列原地建構
GB2542131B (en) Graphics processing method and system for processing sub-primitives
JP7330306B2 (ja) 変換方法、逆変換方法、エンコーダ、デコーダ及び記憶媒体
US9196021B2 (en) Video enhancement using related content
US9355491B2 (en) Ray tracing apparatus and method
US8773422B1 (en) System, method, and computer program product for grouping linearly ordered primitives
CN112785710B (zh) Osgb三维模型建筑物快速单体化方法、系统、存储器及设备
US20200005524A1 (en) Graphics Processing Method and System for Processing Sub-Primitives
US20230101072A1 (en) Nearest neighbour search method, encoder, decoder and storage medium
US9875528B2 (en) Multi-frame patch correspondence identification in video
CN109493406B (zh) 快速百分比靠近软阴影绘制方法
Pätzold et al. Grid-free out-of-core voxelization to sparse voxel octrees on GPU
Hu et al. Parallel BVH construction using locally density clustering
CN110738719A (zh) 一种基于视距分层优化的Web3D模型渲染方法
Lee et al. A bimodal empty space skipping of ray casting for terrain data
Hochstetter et al. Adaptive sampling for on-the-fly ray casting of particle-based fluids.
Frolov et al. Implementing irradiance cache in a GPU realistic renderer
CN114202611A (zh) 基于时空瓦片的三维图形渲染方法及装置
Zhao et al. A pencil drawing algorithm based on wavelet transform multiscale
CN117808949B (zh) 一种场景渲染方法
Li View-dependent Adaptive HLOD: real-time interactive rendering of multi-resolution models

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant