一种场景阴影绘制方法及装置、计算设备及存储介质
技术领域
本申请涉及互联网技术领域,特别涉及一种场景阴影绘制方法及装置、计算设备及存储介质。
背景技术
场景阴影图是一种基于图像的阴影生成方法,对场景空间的复杂度依赖性很低,它的复杂度仅取决于光源数和阴影图分辨率。阴影绘制对于真实感场景绘制具有重要的意义,不仅能够反映空间中物体之间的相互遮挡关系,也能反映遮挡物以及接收表面的几何信息,阴影的实时绘制还大大增加了场景绘制的真实度。
传统的阴影绘制包括以下两个过程:
1)将光源作为视点,对整个场景进行绘制。此时,把阴影相机放在光照方向后,用阴影相机渲染深度图。这样,仅在缓存中保存从光源到场景的最小深度值,从而得到一张阴影图。在动态场景中,一旦场景中的遮挡关系发生改变,就需要实时地更新阴影图。
2)回到以虚拟相机为视点的视图中,按照传统的渲染流水线方式对场景进行绘制。不同的是,在绘制过程中要进行阴影判断,即判断某个像素是否处于场景的阴影中。若像素不在阴影中,则正常绘制;否则绘制成阴影。
现有三维场景绘制中,将阴影相机每帧相对上一帧移动的距离称为步长。在阴影相机相对场景阴影的移动过程中,若步长和像素的精度不匹配,也就是说,步长不是单个像素距离的整数倍,会导致某些像素点在有的帧中可见,在另一些帧中不可见,从而产生阴影闪烁现象。
发明内容
有鉴于此,本申请实施例提供了一种场景阴影绘制方法及装置、计算设备及存储介质,以解决现有技术中存在的技术缺陷。
本申请实施例公开了一种场景阴影绘制方法,所述场景中设置有阴影相机;所述方法包括:
计算阴影相机拍摄的当前时间帧内场景阴影的移动距离;
判断所述场景阴影的移动距离是否为设定步长的整数倍;
若是,根据所述移动距离移动所述阴影相机;
若否,将所述移动距离进行修正得到修正距离,然后根据所述修正距离移动所述阴影相机,其中,所述修正距离为设定步长的整数倍。
可选地,所述场景中还设置有虚拟相机;
在根据所述移动距离移动所述阴影相机的情况下,所述方法还包括:
根据所述移动距离将所述虚拟相机移动至目标位置。
可选地,所述场景中还设置有虚拟相机;
在根据所述修正距离移动所述阴影相机的情况下,所述方法还包括:
根据所述修正距离将所述虚拟相机移动至目标位置。
可选地,将所述移动距离进行修正得到修正距离,包括:
确定所述移动距离位于n倍设定步长以及n+1倍设定步长的区间内,其中,n≥1,且n为正整数;
将n+1倍设定步长作为修正距离,将所述移动距离修正至所述修正距离。
可选地,所述场景阴影包括多个阴影像素,所述设定步长为阴影像素的直径的整数倍;
判断所述场景阴影的移动距离是否为设定步长的整数倍,包括:
判断所述场景阴影的阴影像素的移动距离是否为阴影像素的直径的整数倍。
本申请实施例还公开了一种场景阴影绘制装置,所述场景中设置有阴影相机;所述装置包括:
计算模块,被配置为计算阴影相机拍摄的当前时间帧内场景阴影的移动距离;
判断模块,被配置为判断所述场景阴影的移动距离是否为设定步长的整数倍;若是,执行第一移动模块,若否,执行第二移动模块;
第一移动模块,被配置为根据所述移动距离移动所述阴影相机;
第二移动模块,被配置为将所述移动距离进行修正得到修正距离,然后根据所述修正距离移动所述阴影相机,其中,所述修正距离为设定步长的整数倍。
可选地,所述场景中还设置有虚拟相机;
所述装置还包括:
第三移动模块,被配置为在根据所述移动距离移动所述阴影相机的情况下,根据所述移动距离将所述虚拟相机移动至目标位置。
可选地,所述场景中还设置有虚拟相机;
所述装置还包括:
第四移动模块,被配置为在根据所述修正距离移动所述阴影相机的情况下,根据所述修正距离将所述虚拟相机移动至目标位置。
可选地,所述第二移动模块具体被配置为:
确定所述移动距离位于n倍设定步长以及n+1倍设定步长的区间内,其中,n≥1,且n为正整数;
将n+1倍设定步长作为修正距离,将所述移动距离修正至所述修正距离。
可选地,所述场景阴影包括多个阴影像素,所述设定步长为阴影像素的直径的整数倍;
所述判断模块具体被配置为:判断所述场景阴影的阴影像素的移动距离是否为阴影像素的直径的整数倍。
本申请实施例还公开了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现如上所述场景阴影绘制方法的步骤。
本申请实施例还公开了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如上所述场景阴影绘制方法的步骤。
本申请提供的场景阴影绘制方法及装置,通过计算阴影相机拍摄的时间帧内场景阴影的移动距离,判断场景阴影的移动距离是否为设定步长的整数倍,若是,根据移动距离移动阴影相机;若否,将移动距离进行修正得到修正距离,然后根据修正距离移动阴影相机,从而避免场景阴影绘制的过程中由于阴影相机和场景阴影之间产生相对移动而产生的闪烁现象。
附图说明
图1是本申请实施例的计算设备的结构框图;
图2是本申请实施例的场景阴影绘制方法的流程示意图;
图3是本申请实施例的场景阴影绘制方法的流程示意图;
图4是本申请实施例的场景阴影绘制的效果示意图;
图5是本申请实施例的场景阴影绘制装置的结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本发明一个或多个实施例涉及的名词术语进行解释。
阴影相机:用来生成场景阴影的相机,阴影相机必须和场景的主光源(Directional Light)有一样的朝向,一般地可以认为处于从上到下俯视角度的相机。
虚拟相机:跟随场景阴影的移动而移动,主要用于渲染场景。
在本申请中,提供了一种场景阴影绘制方法及装置、计算设备及存储介质,在下面的实施例中逐一进行详细说明。
图1是示出了根据本说明书一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
其中,处理器120可以执行图2所示方法中的步骤。图2是示出了根据本申请一实施例的场景阴影绘制方法的示意性流程图,包括步骤202~208:
202、计算阴影相机拍摄的当前时间帧内场景阴影的移动距离。
其中,阴影相机拍摄的时间帧的长度可以预先自行设置,例如0.5s、1s等。
具体地,在生成场景阴影时,先从产生阴影的光源(在通常项目中为DirectionalLight)放置一个相机,即阴影相机渲染一次场景,获取场景深度贴图;然后对场景中的物体进行渲染,得到二维的场景阴影图。
场景阴影包括多个顺序排列的阴影像素,场景阴影的移动,实质为阴影像素的移动。
204、判断所述场景阴影的移动距离是否为设定步长的整数倍;若是,执行步骤206,若否,执行步骤208。
具体地,判断所述场景阴影的移动距离是否为设定步长的整数倍,包括:判断所述场景阴影的阴影像素的移动距离是否为阴影像素的直径的整数倍。
在一个具体的应用场景中,阴影像素的直径为0.5mm,那么在步骤204中,就需要判断场景阴影的阴影像素的移动距离是否为0.5的整数倍。如果不是,则会导致部分像素点在某些帧中可见,也某些帧中不可见,从而产生阴影闪烁的现象。
206、根据所述移动距离移动所述阴影相机。
具体地,场景阴影的移动可以包括长度方向的移动和宽度方向的移动,移动距离可以包括长度方向的距离和宽度方向的距离。
208、将所述移动距离进行修正得到修正距离,然后根据所述修正距离移动所述阴影相机,其中,所述修正距离为设定步长的整数倍。
具体地,参见图3,步骤208中将移动距离进行修正得到修正距离,包括:
2082、确定所述移动距离位于n倍设定步长以及n+1倍设定步长的区间内,其中,n≥1,且n为正整数。
2084、将n+1倍设定步长作为修正距离,将所述移动距离修正至所述修正距离。
另外,场景中还设置有虚拟相机,虚拟相机需要做与阴影相机同步的位移。
可选地,在根据所述移动距离移动所述阴影相机的情况下,所述方法还包括:根据移动距离将虚拟相机移动至目标位置。
可选地,在根据所述修正距离移动所述阴影相机的情况下,所述方法还包括:根据修正距离将虚拟相机移动至目标位置。
本申请提供的场景阴影绘制方法,通过计算阴影相机拍摄的时间帧内场景阴影的移动距离,判断场景阴影的移动距离是否为设定步长的整数倍,若是,根据移动距离移动阴影相机;若否,将移动距离进行修正得到修正距离,然后根据修正距离移动阴影相机,从而避免场景阴影绘制的过程中由于阴影相机和场景阴影之间产生相对移动而产生的闪烁现象。
然后,根据阴影相机的移动距离或修正距离调整虚拟相机403的移动距离,保证虚拟相机与阴影相机的同步移动。
为了进一步地对本申请的场景阴影绘制方法进行说明,图4示出了本实施例的场景阴影绘制的示意图。由图4中可见,第一阴影401包括多个排列为一行的阴影像素402。第二阴影404包括多个沿多行多列排列的阴影像素402。
其中,虚拟相机403和阴影相机移动的距离相同。
假设虚拟相机403在第一帧的时候位于位置1,假若下一帧时虚拟相机403相对图4中的第一阴影401移动到位置2,则其步长大于一个阴影像素402的尺寸,且小于两个阴影像素402的尺寸,则意味着阴影相机的移动位置并不满足步长的整数倍的要求,则会导致绘制的阴影产生闪烁现象。假如下一帧时虚拟相机403相对图4中的第一阴影401移动到位置3,则此时虚拟相机403的步长刚好等于3个阴影像素402的尺寸,则意味着阴影相机的移动位置满足步长的整数倍的要求。在这种情况下,绘制的阴影完全不会产生闪烁现象。
本实施例的场景阴影绘制方法包括:
1)计算阴影相机拍摄的当前时间帧内场景阴影的移动距离。
在一个具体应用中,当前时间帧内场景阴影的移动距离为1.7mm。
2)判断所述场景阴影的移动距离是否为0.5的整数倍,若是,执行步骤3);若否,执行步骤4)。
3)根据所述移动距离移动所述阴影相机。
4)确定所述移动距离位于n倍设定步长以及n+1倍设定步长的区间内,其中,n≥1,且n为正整数。
假设阴影像素402的直径为0.5mm,以当前时间帧内场景阴影的移动距离为1.7mm为例,确定移动距离位于3倍设定步长以及4倍设定步长的区间内。
5)将n+1倍设定步长作为修正距离,将所述移动距离修正至所述修正距离。
仍以当前时间帧内场景阴影的移动距离为1.7mm为例,确定4倍设定步长作为修正距离,即修正距离为2.0mm。
6)根据修正距离移动所述阴影相机。
7)根据修正距离将虚拟相机移动至目标位置。
上述为本申请实施例的场景阴影绘制方法的具体方案。下面对本申请实施例的场景阴影绘制装置进行示意性的说明。
本申请实施例还公开了一种场景阴影绘制装置,所述场景中设置有阴影相机;参见图5,所述装置包括:
计算模块502,被配置为计算阴影相机拍摄的当前时间帧内场景阴影的移动距离;
判断模块504,被配置为判断所述场景阴影的移动距离是否为设定步长的整数倍;若是,执行第一移动模块506,若否,执行第二移动模块508;
第一移动模块506,被配置为根据所述移动距离移动所述阴影相机;
第二移动模块508,被配置为将所述移动距离进行修正得到修正距离,然后根据所述修正距离移动所述阴影相机,其中,修正距离为设定步长的整数倍。
可选地,所述场景中还设置有虚拟相机;所述装置还包括:
第三移动模块,被配置为在根据所述移动距离移动所述阴影相机的情况下,根据所述移动距离将所述虚拟相机移动至目标位置。
可选地,所述场景中还设置有虚拟相机;所述装置还包括:
第四移动模块,被配置为在根据所述修正距离移动所述阴影相机的情况下,根据所述修正距离将所述虚拟相机移动至目标位置。
可选地,所述第二移动模块508具体被配置为:
确定所述移动距离位于n倍设定步长以及n+1倍设定步长的区间内,其中,n≥1,且n为正整数;
将n+1倍设定步长作为修正距离,将所述移动距离修正至所述修正距离。
可选地,所述场景阴影包括多个阴影像素,所述设定步长为阴影像素的直径的整数倍;
所述判断模块504具体被配置为:判断所述场景阴影的阴影像素的移动距离是否为阴影像素的直径的整数倍。
本申请提供的场景阴影绘制装置,通过计算阴影相机拍摄的时间帧内场景阴影的移动距离,判断场景阴影的移动距离是否为设定步长的整数倍,若是,根据移动距离移动阴影相机;若否,将移动距离进行修正得到修正距离,然后根据修正距离移动阴影相机,从而避免场景阴影绘制的过程中由于阴影相机和场景阴影之间产生相对移动而产生的闪烁现象。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述场景阴影绘制方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的场景阴影绘制方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述场景阴影绘制方法的技术方案的描述。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。