CN111784817A - 阴影的展示方法和装置、存储介质、电子装置 - Google Patents
阴影的展示方法和装置、存储介质、电子装置 Download PDFInfo
- Publication number
- CN111784817A CN111784817A CN202010621458.4A CN202010621458A CN111784817A CN 111784817 A CN111784817 A CN 111784817A CN 202010621458 A CN202010621458 A CN 202010621458A CN 111784817 A CN111784817 A CN 111784817A
- Authority
- CN
- China
- Prior art keywords
- shadow
- area
- animation
- client
- rendering
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 230000008859 change Effects 0.000 claims abstract description 17
- 238000009877 rendering Methods 0.000 claims description 88
- 230000015654 memory Effects 0.000 claims description 32
- 238000012545 processing Methods 0.000 claims description 16
- 238000005286 illumination Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 4
- 238000005516 engineering process Methods 0.000 abstract description 11
- 238000004364 calculation method Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000000007 visual effect Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 239000010421 standard material Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/60—Shadow generation
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Computer Graphics (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请公开了一种阴影的展示方法和装置、存储介质、电子装置。其中,该方法包括:在虚拟场景中定位出第一对象所在的第一位置,第一对象为通过客户端操控的对象;在第一位置位于第一区域内的情况下,获取第二对象的第一阴影,第一区域为虚拟场景中的区域,第二对象为位于第一区域内且位置未发生变化的对象,第一阴影是在第一对象进入第一区域时渲染得到的第二对象的阴影;在客户端显示的第一动画中展示第一阴影,第一动画用于表示第一对象位于第一位置。本申请解决了相关技术中实现阴影时消耗的资源较多的技术问题。
Description
技术领域
本申请涉及图像渲染领域,具体而言,涉及一种阴影的展示方法和装置、存储介质、电子装置。
背景技术
随着计算机技术的不断发展,移动端的3D游戏已经成为市场的主流,一般在游戏场景中,通过对场景中的物体进行阴影处理,优化来提升游戏画面质量。目前市面上已有的阴影处理方法有实时阴影渲染、烘焙阴影渲染或混合使用实时阴影和烘焙阴影。
其中,实时阴影渲染:利用底层的渲染引擎技术,对物体和光源进行实时的计算,绘制出阴影效果,如图1所示,在游戏引擎Unity的实时阴影处理中,是拍摄一张ShadowMap图(即利用3D实时阴影技术或者阴影贴图技术得到的阴影深度图),然后做光源方向的深度比较,它的问题是计算量大,每帧都需要重新拍摄光源方向的阴影深度图,计算量太大且性能比较低,消耗的运算资源过大,不适合应用到移动端。
烘焙阴影渲染:游戏中,对于场景中的静态物体,通常会使用烘焙阴影,以空间换时间,来提高性能。其方法是预先将阴影的计算结果保存到纹理中,光照计算时,不再实时计算阴影,而是在Mesh上多记录一个Lightmap UV(光照贴图),映射到烘焙的ShadowMask(一种烘焙方式)贴图上去,再直接采集该贴图得到阴影结果,如图2所示即为将光照贴图与不受光材质进行烘焙得到的最终结果。该方案确实节省了性能,但同时也带来了不少缺点:当地图较大、场景中对象较多时,阴影质量会比较差;如果要提高阴影质量的话,又不可避免地使包体变得很大,而对于移动端游戏来说,游戏应用安装包体积的太大会消耗大量的网络资源和本地存储资源;另外,这种方案烘焙的是某个光源方向的阴影,因此无法支持光源方向的变化,只适合静态,不变的物体,光线变化和动态物体上,显示效果不好。
混合使用实时阴影和烘焙阴影进行渲染:如图3所示,Unity提供了混合使用实时和烘焙阴影的Shadowmask方案,并支持近处使用实时阴影、远处使用烘焙阴影的DistanceShadowmask方案。但即使这样做,实际项目中同样有问题:用户其实很难权衡多少米内使用实时阴影,多少米外使用烘焙阴影,太近,可能比较近的距离内,就出现了质量低的阴影,而太远,则不可避免造成比较大的性能负担;混合使用实时阴影和烘焙阴影的方法,只是一种处理策略,因为实际上有完整的烘焙阴影,那么烘焙阴影的缺点,它同样有,玩家稍远处的阴影,质量就不能保证,而且也不支持光源方向变化,游戏应用安装包体积的大小也降下不来。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种阴影的展示方法和装置、存储介质、电子装置,以至少解决相关技术中实现阴影时消耗的资源较多的技术问题。
根据本申请实施例的一个方面,提供了一种阴影的展示方法,包括:在虚拟场景中定位出第一对象所在的第一位置,其中,第一对象为通过客户端操控的对象;在第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,第一区域为虚拟场景中的区域,第二对象为位于第一区域内且位置未发生变化的对象,第一阴影是在第一对象进入第一区域时渲染得到的第二对象的阴影;在客户端显示的第一动画中展示第一阴影,其中,第一动画用于表示第一对象位于第一位置。
根据本申请实施例的另一方面,还提供了一种阴影的展示装置,包括:第一定位单元,用于在虚拟场景中定位出第一对象所在的第一位置,其中,第一对象为通过客户端操控的对象;第一获取单元,用于在第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,第一区域为虚拟场景中的区域,第二对象为位于第一区域内且位置未发生变化的对象,第一阴影是在第一对象进入第一区域时渲染得到的第二对象的阴影;第一展示单元,用于在客户端显示的第一动画中展示第一阴影,其中,第一动画用于表示第一对象位于第一位置。
根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。
根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方法。
在本申请实施例中,考虑到应用运行的一段时间内,大多数情况下第一对象在一定时间内会在一定范围(即第一区域)内移动,而这个范围内,静止的第二对象的阴影大致是一样的(例如植被和房子这些静态物体投射的阴影应该大致是一致的),故在本申请的技术方案中,会记住在第一对象进入第一区域时渲染得到的第二对象的第一阴影,在定位出第一对象所在的第一位置位于第一区域内的情况下,在客户端显示的第一动画中直接展示上述第一阴影,该方案会重复利用静态阴影的计算结果,而不是每帧计算第一对象周围静态物体投射的阴影,从而可以降低对运算资源的消耗,另外,也不用预先存储大量的贴图,也可以降低对存储资源的消耗,从而可以解决相关技术中实现阴影时消耗的资源较多的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是相关技术中游戏引擎Unity的实时阴影渲染的示意图;
图2是相关技术中游戏引擎Unity的烘焙阴影渲染的示意图;
图3是相关技术中混合使用实时阴影和烘焙阴影进行渲染的配置图;
图4是根据本申请实施例的阴影的展示方法的硬件环境的示意图;
图5是根据本申请实施例的一种可选的阴影的展示方法的流程图;
图6是根据本申请实施例的一种可选的虚拟场景的示意图;
图7是根据本申请实施例的一种可选的场景区域的示意图;
图8是根据本申请实施例的一种可选的场景区域的示意图;
图9是根据本申请实施例的一种可选的场景区域的示意图;
图10是根据本申请实施例的一种可选的场景区域的示意图;
图11是根据本申请实施例的一种可选的场景区域的示意图;
图12是根据本申请实施例的一种可选的阴影的展示方法的流程图;
图13是根据本申请实施例的一种可选的阴影的展示装置的示意图;
以及
图14是根据本申请实施例的一种终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
Unity:Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
阴影作为3D游戏中的一个基本特性和技术,目前已经非常成熟,当前的主流引擎提供了较好的缺省阴影方案,然而,随着游戏场景规模和复杂度的大幅提升,对于阴影效果和性能的要求变得更高,基于此,根据本申请实施例的一方面,提供了一种阴影的展示方法的方法实施例,该实施例提供了一种对大规模场景的统一实时阴影的解决方案,如在Unity引擎下,可以插件的形式实现此方案。
可选地,在本实施例中,上述阴影的展示方法可以应用于如图4所示的由终端401和服务器403所构成的硬件环境中。如图4所示,服务器403通过网络与终端401进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库405,用于为服务器403提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端401并不限定于PC、手机、平板电脑等。
本申请实施例的阴影的展示方法可以由终端401来执行,还可以是由服务器403和终端401共同执行。其中,终端401执行本申请实施例的阴影的展示方法也可以是由安装在其上的客户端来执行。图5是根据本申请实施例的一种可选的阴影的展示方法的流程图,如图5所示,该方法可以包括以下步骤:
步骤S502,在虚拟场景中定位出第一对象所在的第一位置,第一对象为通过客户端操控的对象。
上述虚拟场景可以为游戏、社交、军事模拟等应用场景中的三维虚拟场景,相应地,第一对象即为游戏、社交、军事模拟等应用场景中的对象,如游戏场景中玩家控制的游戏角色,社交场景中用户控制的社交角色,军事场景中用户控制的军事角色等。
步骤S504,在第一位置位于第一区域内的情况下,获取第二对象的第一阴影,第一区域为虚拟场景中的区域,第二对象为位于第一区域内且位置未发生变化的对象,第一阴影是在第一对象进入第一区域时渲染得到的第二对象的阴影,第一阴影用于当第一对象位于第一区域内时进行复用。
上述第二对象为一段时间内保持位置、姿态不发生变化的对象,具体可以为场景对象(如山川河流、建筑、植物等)、也可以为满足前述条件的非玩家控制对象、宠物等。
步骤S506,在客户端显示的第一动画中展示第一阴影,第一动画用于表示第一对象位于第一位置。
考虑到应用(如游戏应用)运行的一段时间内,大多数情况下第一对象(如玩家角色)在一定时间内会在一定范围(即第一区域)内移动,而这个范围内,静止的第二对象的阴影大致是一样的(例如,在图6所示的示意图中,玩家在移动的过程中,植被和房子这些静态物体投射的阴影,应该大致是一致的,不需要每帧重新计算)基于此,在本申请的技术方案中,在第一对象进入第一区域时渲染得到的第二对象的第一阴影,在定位出第一对象所在的第一位置位于第一区域内(即第一区域内)的情况下,在客户端显示的第一动画中直接展示上述第一阴影,该方案相当于会记住周围的阴影,而不是重复计算周围的阴影,以便于当第一对象在此范围内时重复使用所记住的阴影(可称为阴影缓存,或者Shadow Cache),从而可以解决相关技术中实现阴影时消耗的资源较多的技术问题,由于它会重复利用静态阴影的计算结果,而不是每帧计算第一对象周围静态物体投射的阴影,从而可以降低对运算资源的消耗,另外,也不用预先存储大量的贴图,也可以降低对存储资源的消耗。
后续以将本申请的技术方案应用于游戏领域为例进行说明,将本申请的技术方案应用于游戏时,能够解决实阴影渲染中很难兼顾阴影性能、阴影质量和包体大小的问题,它并不局限于应用于游戏引擎Unity,同样适用于自研引擎和其他游戏引擎。下面结合图5所示的步骤进一步详述本申请的技术方案。
在步骤S502提供的技术方案中,在虚拟场景中定位出第一对象所在的第一位置,第一对象为通过客户端操控的对象,可以通过应用底层的SDK提供的接口(如位置获取接口)确定对象所在的位置。
在步骤S504提供的技术方案中,在第一位置位于第一区域内的情况下,获取第二对象的第一阴影。
第一区域为虚拟场景中的区域,该区域可以是以玩家在某个时刻所在位置为中心划分出来的区域,换言之,第一区域是根据第一对象的位置动态确定出来的区域,如图7所示的方形C2(位于C5内),C2以a为中心、长度为10个单位,若客户端的显示区域为5*5的区域(如C1、C4),当第一对象位于O时,划分出第一区域C2,当第一对象在第一区域内活动时,可以复用第一对象在O点时得到的阴影。
第一区域为从已有区域中选择的区域,如图8所示,可以预先将图7所示的虚拟场景划分为若干区域,第一对象所在的区域即第一区域。
在上述方案中,获取第二对象的第一阴影包括以下两种情况:
其一是在第一区域与第二区域不同(如第一区域为C2、第二区域为C3)的情况下,调用渲染引擎对第二对象进行渲染得到第一阴影,渲染得到的第一阴影被保存在存储器中,第二区域为虚拟场景中第二位置S所在的区域,第一位置O为第一对象在第一时间所在的位置,第二位置为第一对象在第二时间所在的位置,第二时间早于第一时间,相当于第一对象从位置S移动到了位置O。
可选地,在调用渲染引擎对第二对象进行渲染得到第一阴影时,可以直接一次性渲染得到所有第二对象的阴影,但是这样会消耗较多的设备硬件资源(如GPU和CPU资源),所以可以采用下述方案进行优化,采用多个周期进行分别渲染:
在第二对象的数量较多(如对象个数达到第二阈值,如达到100个)的情况下,在第一渲染周期通过渲染引擎渲染多个第二对象中的一部分第二对象的第一阴影,第一渲染周期为第一时间所在的渲染引擎的渲染周期;
在第二渲染周期通过渲染引擎渲染多个第二对象中的另一部分第二对象的第一阴影,第二渲染周期为第一渲染周期之后的渲染引擎的渲染周期。
上述第二渲染周期可以为一个或者多个,换言之,若数量不是足够多,可以利用2个周期完成渲染,如果数量非常多,可以分成3个或者更多个周期来完成渲染。
其二是在第一区域与第二区域相同(如第一对象在第二时间时位于位置O,在第一时间时移动到了位置R或Q,但是都在C1内)的情况下,从存储器中获取预先渲染好的第一阴影。
例如,在游戏世界中,可将世界划分成一个个的格子,阴影渲染时,会渲染玩家周围的3*3的九宫格内(一个格子相当于一个区域)的静态物体的阴影。假设格子的尺寸设置为20m,那么世界被划分成20m*20m的一个个的格子,在渲染阴影时,可首先计算出玩家所处的格子,比如示意图8的中心位置,然后制定更新和渲染策略。
在调用渲染引擎对第二对象进行渲染得到第一阴影的同时或之后,可以按照如下方式对第一区域周边的区域进行阴影渲染:
确定虚拟场景中与第一区域相邻的第三区域,查找第三区域内的第三对象,第三对象为第三区域内位置未发生变化的对象;调用渲染引擎渲染得到第三对象的阴影,第三对象的阴影用于在第三区域进入客户端的展示范围时进行展示。
如图7所示,在渲染时不仅仅渲染C2中的阴影,还会渲染C2和C3不相交部分的阴影,C1为第一对象位于中心O时在客户端显示的区域,C4第一区域的边缘Q为中心时显示的区域,可见,采用该方案后,当第一对象位于边缘时仍然有阴影可以用。
如图8所示,除了渲染中心格子的阴影,还会渲染与中心格子相邻的8个格子的阴影。
在步骤S506提供的技术方案中,在客户端显示的第一动画中展示第一阴影,第一动画用于表示第一对象位于第一位置。
在上述方案中,在客户端显示的第一动画中展示第一阴影时,可在客户端显示的第一动画中展示第六阴影,第六阴影是调用渲染引擎对第一对象进行渲染得到的。
可选地,在客户端显示的第一动画中展示第一阴影时,若第一对象所处的区域未发生变化,则直接显示预先渲染好的所有第二对象的第一阴影。
可选地,在客户端显示的第一动画中展示第一阴影时,若第一对象所处的区域发生变化,即在第一区域与第二区域不同的情况下,可在第一动画中展示一部分第二对象的第一阴影;在第一动画中展示另一部分第二对象的第五阴影,第五阴影为第一对象位于第二区域时调用渲染引擎渲染对第二对象进行渲染得到的阴影,换言之,此时可以显示一部分实时渲染的第二对象的阴影,并显示一部分之前缓存的阴影,以达到兼顾性能和效果的目的。
在经过若干渲染周期后,即可得到所有第二对象的阴影,在客户端显示的第一动画中展示第一阴影之后,在第三时间定位出第一对象位于第一区域的情况下,获取所有第二对象的第一阴影;在客户端显示的第三动画中展示所有第二对象的第一阴影,其中,第三动画为在第一动画之后播放的动画。
可选地,本申请的技术方案支持级联阴影,在客户端显示的第一动画中展示第一阴影时,在客户端显示的第一动画中展示第二阴影和第三阴影,其中,第一阴影包括第二阴影和第三阴影,第二阴影和第三阴影为具有相同形状的第二对象的阴影,第二阴影和第三阴影的阴影精度不同,即为级联阴影。
上述方案中,获取第二对象的第一阴影包括:确定第二对象的第一图像采集位置和第二图像采集位置,第二对象与第一图像采集位置之间的第一距离小于第二对象与第二图像采集位置之间的第二距离;获取在第一图像采集位置采集到的第二阴影、在第二图像采集位置采集到的第三阴影,第二阴影与第三阴影之间的缩放比值为第二距离与第一距离之间的比值。
可选地,本申请的技术方案支持日夜循环,在客户端显示的第一动画中展示第一阴影之后,当第一对象在第一区域内活动的时间达到第一阈值(如10分钟、1小时)的情况下,获取与当前时间匹配的光照配置信息(如光线强度、入射角等);调用渲染引擎,按照光照配置信息渲染得到第二对象的第四阴影,并将存储器中第二对象的阴影更新为第四阴影;在客户端显示的第二动画中展示第二对象的第四阴影,第二动画为在第一动画之后播放的动画。
对于间隔之间的阴影,如时间t1和时间t2(二者相隔第一阈值)之间的阴影,可以采用差值的方式实现过渡阴影,对于任意中间时刻(t1+△t),任意位置的像素值P(t1+△t)可以对时间t1时候相同位置的像素值Pt1和时间t2时候相同位置的像素值Pt2进行插值得到。
采用本申请的技术方案,在运用到游戏、社交等实际项目中时,能够兼顾阴影性能、阴影质量和包体大小的问题。作为一种可选的实施例,下面以具体的实施方式为例详述本申请的技术方案。
如图8所示,第一对象(如玩家角色)在中间的20m*20m的范围内时,无论怎样移动,阴影不会更新,而是当第一对象走出这个格子时,阴影才刷新。比如图8中,玩家一直在中心的格子中移动时,不会更新阴影,而只有当玩家移动到其他格子,比如图9中的位置,从中心格子移动到右边的格子,阴影会触发更新。
在渲染时,渲染的不是玩家所处格子的阴影,而是玩家周围九宫格的阴影,如果只渲染玩家所处格子的阴影的话,玩家移动到格子边缘,会发现没有阴影可以用,而如果渲染的是玩家周围的九宫格范围内的阴影,就能保证,无论玩家在格子的哪个位置,都有渲染的高质量阴影可用,在图7中,阴影的渲染范围是图9中的九宫格,而不是玩家所处的那个格子。
可选地,为了使得方案具备一定的偏移值容差,以避免玩家在格子边缘移动时导致的频繁更新,也就是说,当玩家在格子边缘移动时,可不用更新阴影,如图10中,黑色的较粗的线框描述的是,玩家在其中移动而不触发阴影更新的最大范围。
在解决阴影性能问题时,本方案采用了一种低频更新的阴影缓存策略。也就是说,静态物体投射的阴影,不每帧更新,而是当玩家走出了用户设定的格子才出发更新。除了渲染阴影的那一帧之外,其他帧,只是多采样了一次阴影,而不是渲染,这样就能保证阴影的性能。
在以上的基础上,本方案同时还考虑并支持了以下特性:级联阴影;支持融入原生unity阴影***;支持搭配日夜变换***使用;支持负载均衡。当然还可以扩展支持其他一些特性,比如软阴影、处理自阴影等等。
级联阴影:本方案支持多级阴影,每级阴影,可以分别设置不同的精度,用户可以针对每级阴影,设置不同的参数。本方案的级联阴影,跟游戏引擎(如Unity引擎)原生的cascade阴影不一样,本方案的每一级阴影是对世界画格子,只是画的精细程度不一样,越精细的阴影,每个格子的长度越小,反之越大。
如图11所示,在支持级联阴影后,假如设定两级阴影,右侧图中间Cascade0用较小的九宫格表示,对世界画格子,格子小一些,精细程度高一些;***的Cascade1用较大的九宫格表示,对世界画格子,格子大一些,精细程度低一些。
假如用户设置了三级阴影,Cascade0的格子大小为30m,用颜色1的视体表示,Cascade1的格子大小为80m,用颜色2的视体表示,Cascade2的格子大小为200m,用颜色3的视体表示,那么Cascade0的拍摄范围最小,精度最高,以保证玩家周围有高质量的阴影;Cascade2拍摄范围最大,更新频率最低(只在玩家走了很远距离后更新了一次),以保证玩家很远范围内仍然有正确的阴影,同时对这样比较大的视体,会切分视体,以保证性能。
融入原生的Unity计算阴影流程:融入原生的Unity阴影计算流程是指,对使用本方案的用户而言,几乎不需要修改原始代码逻辑。在虚拟场景中定位出第一对象所在的第一位置之前,接收到阴影处理请求,阴影处理请求用于请求调用游戏引擎中的阴影处理插件生成第一阴影。
在Unity原生的流程中,用户使用UNITY_LIGHT_ATTENUATION来计算阴影强度,在该流程中引入本方案(可称为ZShadow)后,用户可不做任何修改,即可以不用理解ZShadow阴影所做的各种复杂修改,仍然使用UNITY_LIGHT_ATTENUATION就可以拿到包括ZShadow阴影在内的阴影强度值,然后应用到指定材质上。ZShadow对于用户而言,正是这样的简洁设计,用户可以无感的应用它。下面结合图12以builtin管线Standard材质为例,描述UNITY_LIGHT_ATTENUATION的工作流程:
步骤S1201,用户通过调用UNITY_LIGHT_ATTENUATION来计算阴影,UNITY_LIGHT_ATTENUATION为UNITY中用于阴影计算的内置函数。
步骤S1202,对于方向光的阴影,获取与光源的间隔距离fixed atten=UNITY_SHADOW_ATTENUATION(input,worldPos),input为输入参数,worldPos为世界坐标,UNITY_SHADOW_ATTENUATION为UNITY中计算间隔距离的内置函数。
步骤S1203,通过HANDLE_SHADOWS_BLENDING_IN_GI判断是否在GI阶段混合实时阴影,若是则执行步骤S1204,否则执行步骤S1205,HANDLE_SHADOWS_BLENDING_IN_GI是UNITY中的内置函数。
步骤S1204,UNITY_SHADOW_ATTENUATION直接通过unitySampleShadow(UNITY中对阴影贴图进行采样的函数)采集阴影,然后在GI阶段进行混合,GI表示全局光照。
步骤S1205,在计算阴影时可混合好实时阴影和烘焙阴影,UNITY_SHADOW_ATTENUATION调用UnityComputeForwardShadows处理阴影,如利用烘焙需要的lightmapUV(即灯光烘焙贴图)和实时阴影需要的screenPos(即屏幕位置)来处理,UnityComputeForwardShadows是UNITY的内置函数。
步骤S1206,调用UNITY中的unitySampleShadow函数采集实时阴影,调用UNITY中的UnitySampleBakedOcclusion采集烘焙阴影。
步骤S1207,在UnityComputeForwardShadows中,采用本申请的计算方案计算阴影。
步骤S1208,在UnityComputeForwardShadows中,调用UNITY中的ZMixRealtimeAndBakedShadows函数混合所有阴影。
步骤S1209,在FragmentGI(被用于计算全局光照数据)阶段,装载UnityGI数据,将UNITY_LIGHT_ATTENUATION的计算结果给UnityGI的atten分量。
步骤S1210,FragmentGI调用UnityGlobalIllumination(Unity全局光照),UnityGlobalIllumination调用UNITY的函数UnityGI_Base。
步骤S1211,利用HANDLE_SHADOWS_BLENDING_IN_GI确定是要在GI阶段混合实时阴影。
步骤S1212,在GI阶段,采用本申请的方案计算阴影。
步骤S1213,在GI阶段,调用ZMixRealtimeAndBakedShadows函数混合所有阴影。
ZShadow融入进来的工作,主要涉及步骤S1207、S1208、S1212、S1213,ZShadow主要做了两部分工作,ComputeZShadows用来计算ZShadow,ZMixRealtimeAndBakedShadows用来替换UnityMixRealtimeAndBakedShadows来混合ZShadow、Unity实时阴影以及Unity烘焙阴影。如此,ZShadow阴影和Unity原生的阴影***可以完美融合,用户不用担心有任何冲突。
在本申请的技术方案中,支持搭配日夜循环***使用:很多游戏中,会设计自己的日夜循环***,日夜循环***加入之后,太阳光的方向就会一直改变,ZShadow的思想是要缓存阴影,而这时,要使得阴影要正确,就需要随着光源方向改变而不断地渲染阴影,若这样做,就回到前面提到的实时阴影的缺点上,计算量大,而性能又太低。
为了使得ZShadow能够配合日夜循环***一起使用,做了如下设计:分别计算t-Δt时刻的阴影和t时刻的阴影,其中Δt用户可设置;然后根据当前的时刻计算插值系数;计算当前像素点的阴影时,分别采样步骤第一个步骤计算出来的两张阴影图,根据插值系数计算出最终插值结果。在这样的视频中,日夜变化设置得非常快,差不多1秒钟相当于现实世界的几十分钟。在光源方向变化如此剧烈的情况下,ZShadow的效果还是非常不错的。
负载均衡:负载均衡是ZShadow为提高效率做的工作,要做了两个级别的负载均衡;支持了不同级别间阴影的负载均衡,ZShadow不会在一帧中,完成所有级别阴影的渲染,避免在一帧中出现太高的性能峰值;当阴影相机的拍摄范围太大时,ZShadow还会拆分视体,以避免在一帧中,有太多对象需要渲染,从而导致性能降低。
在解决阴影质量问题时,因为本方案拍摄的是玩家周围的阴影,再加上前文提到的级联阴影等技术,使得玩家周围的阴影质量得到了保证;在解决包体大小问题时,因为不存储任何烘焙阴影贴图,阴影的计算都在运行时完成,因此不会造成任何的包体负担。可见,本方案的基于阴影缓存策略,提供了一个低频率更新的九宫格阴影,相比原生的阴影(如Unity阴影)而言,既能保证较高的阴影质量,又不会造成性能和包体上的负担。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述阴影的展示方法的阴影的展示装置。图13是根据本申请实施例的一种可选的阴影的展示装置的示意图,如图13所示,该装置可以包括:
定位单元1301,用于在虚拟场景中定位出第一对象所在的第一位置,其中,所述第一对象为通过客户端操控的对象;
第一获取单元1303,用于在所述第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,所述第一区域为所述虚拟场景中的区域,所述第二对象为位于所述第一区域内且位置未发生变化的对象,所述第一阴影是在所述第一对象进入所述第一区域时渲染得到的所述第二对象的阴影;
第一展示单元1305,用于在所述客户端显示的第一动画中展示所述第一阴影,其中,所述第一动画用于表示所述第一对象位于所述第一位置。
需要说明的是,该实施例中的定位单元1301可以用于执行本申请实施例中的步骤S502,该实施例中的第一获取单元1303可以用于执行本申请实施例中的步骤S504,该实施例中的第一展示单元1305可以用于执行本申请实施例中的步骤S506。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图4所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。
通过上述模块,考虑到应用(如游戏应用)运行的一段时间内,大多数情况下第一对象(如玩家角色)在一定时间内会在一定范围(即第一区域)内移动,而这个范围内,静止的第二对象的阴影大致是一样的(例如,在图6所示的示意图中,玩家在移动的过程中,植被和房子这些静态物体投射的阴影,应该大致是一致的,不需要每帧重新计算)基于此,在本申请的技术方案中,会记住周围的阴影,而不是重复计算周围的阴影,以便于当第一对象在此范围内时重复使用所记住的阴影(可称为阴影缓存,或者Shadow Cache),从而可以解决相关技术中实现阴影时消耗的资源较多的技术问题,由于它会重复利用静态阴影的计算结果,而不是每帧计算第一对象周围静态物体投射的阴影,从而可以降低对运算资源的消耗,另外,也不用预先存储大量的贴图,也可以降低对存储资源的消耗。
可选地,所述第一展示单元还用于:在所述客户端显示的第一动画中展示第二阴影和第三阴影,其中,所述第一阴影包括所述第二阴影和所述第三阴影,所述第二阴影和所述第三阴影为具有相同形状的所述第二对象的阴影,所述第二阴影和所述第三阴影的阴影精度不同。
可选地,所述第一获取单元还用于:确定所述第二对象的第一图像采集位置和第二图像采集位置,其中,所述第二对象与所述第一图像采集位置之间的第一距离小于所述第二对象与所述第二图像采集位置之间的第二距离;获取在所述第一图像采集位置采集到的所述第二阴影、在所述第二图像采集位置采集到的所述第三阴影,其中,所述第二阴影与所述第三阴影之间的缩放比值为所述第二距离与所述第一距离之间的比值。
可选地,所述装置还包括:第二获取单元,用于在所述客户端显示的第一动画中展示所述第一阴影之后,当所述第一对象在所述第一区域内活动的时间达到第一阈值的情况下,获取与当前时间匹配的光照配置信息;渲染单元,用于调用渲染引擎,按照所述光照配置信息渲染得到所述第二对象的第四阴影,并将存储器中所述第二对象的阴影更新为所述第四阴影;第二展示单元,用于在所述客户端显示的第二动画中展示所述第二对象的所述第四阴影,其中,所述第二动画为在所述第一动画之后播放的动画。
可选地,所述装置还包括:接收单元,用于在虚拟场景中定位出第一对象所在的第一位置之前,接收到阴影处理请求,其中,所述阴影处理请求用于请求调用游戏引擎中的阴影处理插件生成所述第一阴影。
可选地,所述第一获取单元还用于:在所述第一区域与第二区域不同的情况下,调用渲染引擎对所述第二对象进行渲染得到所述第一阴影,其中,渲染得到的所述第一阴影被保存在存储器中,所述第二区域为所述虚拟场景中第二位置所在的区域,所述第一位置为所述第一对象在第一时间所在的位置,所述第二位置为所述第一对象在第二时间所在的位置,所述第二时间早于所述第一时间;在所述第一区域与所述第二区域相同的情况下,从所述存储器中获取预先渲染好的所述第一阴影。
可选地,所述第一获取单元还用于:在所述第二对象的对象个数达到第二阈值的情况下,在第一渲染周期通过所述渲染引擎得到多个所述第二对象中的一部分所述第二对象的所述第一阴影,其中,所述第一渲染周期为所述第一时间所在的所述渲染引擎的渲染周期;在第二渲染周期通过所述渲染引擎渲染得到多个所述第二对象中的另一部分所述第二对象的所述第一阴影,其中,所述第二渲染周期为所述第一渲染周期之后的所述渲染引擎的渲染周期。
可选地,在所述第一区域与第二区域不同的情况下,所述第一展示单元还用于:在所述第一动画中展示一部分所述第二对象的所述第一阴影;在所述客户端显示的第一动画中展示所述第一阴影的同时,在所述第一动画中展示另一部分所述第二对象的第五阴影,其中,所述第五阴影为所述第一对象位于所述第二区域时调用所述渲染引擎渲染对所述第二对象进行渲染得到的阴影。
可选地,所述第一展示单元还用于:在所述第一动画中展示另一部分所述第二对象的第五阴影之后,在第三时间定位出所述第一对象位于所述第一区域的情况下,获取所有所述第二对象的第一阴影;在所述客户端显示的第三动画中展示所有所述第二对象的所述第一阴影,其中,所述第三动画为在所述第一动画之后显示的动画。
可选地,渲染单元还用于:在调用渲染引擎对所述第二对象进行渲染得到所述第一阴影的同时或之后,查找第三区域内的第三对象,其中,所述第三区域为所述虚拟场景中与所述第一区域相邻的区域,所述第三对象为所述第三区域内位置未发生变化的对象;调用所述渲染引擎渲染得到所述第三对象的阴影,其中,所述第三对象的阴影用于在所述第三区域进入所述客户端的展示范围时进行展示。
可选地,所述第一展示单元还用于:其特征在于,在所述客户端显示的第一动画中展示所述第一阴影的同时,在所述客户端显示的所述第一动画中展示第六阴影,其中,所述第六阴影是调用渲染引擎对所述第一对象进行渲染得到的。
可选地,所述装置还包括:划分单元,用于在虚拟场景中定位出第一对象所在的第一位置之前,将所述虚拟场景划分为多个区域,其中,所述多个区域包括所述第一区域、第二区域以及第三区域、第二区域以及第三区域。
在本申请的技术方案中,支持搭配日夜循环***使用:很多游戏中,会设计自己的日夜循环***,日夜循环***加入之后,太阳光的方向就会一直改变,ZShadow的思想是要缓存阴影,而这时,要使得阴影要正确,就需要随着光源方向改变而不断地渲染阴影,若这样做,就回到前面提到的实时阴影的缺点上,计算量大,而性能又太低。
在解决阴影质量问题时,因为本方案拍摄的是玩家周围的阴影,再加上前文提到的级联阴影等技术,使得玩家周围的阴影质量得到了保证;在解决包体大小问题时,因为不存储任何烘焙阴影贴图,阴影的计算都在运行时完成,因此不会造成任何的包体负担。可见,本方案的基于阴影缓存策略,提供了一个低频率更新的九宫格阴影,相比原生的阴影(如Unity阴影)而言,既能保证较高的阴影质量,又不会造成性能和包体上的负担。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图4所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的另一个方面,还提供了一种用于实施上述阴影的展示方法的服务器或终端。
图14是根据本申请实施例的一种终端的结构框图,如图14所示,该终端可以包括:一个或多个(图14中仅示出一个)处理器1401、存储器1403、以及传输装置1405,如图14所示,该终端还可以包括输入输出设备1407。
其中,存储器1403可用于存储软件程序以及模块,如本申请实施例中的阴影的展示方法和装置对应的程序指令/模块,处理器1401通过运行存储在存储器1403内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的阴影的展示方法。存储器1403可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1403可进一步包括相对于处理器1401远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置1405用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1405包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1405为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,具体地,存储器1403用于存储应用程序。
处理器1401可以通过传输装置1405调用存储器1403存储的应用程序,以执行下述步骤:
在虚拟场景中定位出第一对象所在的第一位置,其中,所述第一对象为通过客户端操控的对象;
在所述第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,所述第一区域为所述虚拟场景中的区域,所述第二对象为位于所述第一区域内且位置未发生变化的对象,所述第一阴影是在所述第一对象进入所述第一区域时渲染得到的所述第二对象的阴影;
在所述客户端显示的第一动画中展示所述第一阴影,其中,所述第一动画用于表示所述第一对象位于所述第一位置。
处理器1401还用于执行下述步骤:
在所述第一区域与第二区域不同的情况下,调用渲染引擎对所述第二对象进行渲染得到所述第一阴影,其中,渲染得到的所述第一阴影被保存在存储器中,所述第二区域为所述虚拟场景中第二位置所在的区域,所述第一位置为所述第一对象在第一时间所在的位置,所述第二位置为所述第一对象在第二时间所在的位置,所述第二时间早于所述第一时间;
在所述第一区域与所述第二区域相同的情况下,从所述存储器中获取预先渲染好的所述第一阴影。
采用本申请实施例,考虑到应用运行的一段时间内,大多数情况下第一对象在一定时间内会在一定范围(即第一区域)内移动,而这个范围内,静止的第二对象的阴影大致是一样的(例如植被和房子这些静态物体投射的阴影应该大致是一致的)基于此,在本申请的技术方案中,会记住周围的阴影,而不是重复计算周围的阴影,以便于当第一对象在此范围内时重复使用所记住的阴影(可称为阴影缓存,或者Shadow Cache),由于它会重复利用静态阴影的计算结果,而不是每帧计算第一对象周围静态物体投射的阴影,从而可以降低对运算资源的消耗,另外,也不用预先存储大量的贴图,也可以降低对存储资源的消耗,从而可以解决相关技术中实现阴影时消耗的资源较多的技术问题。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图14所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile InternetDevices,MID)、PAD等终端设备。图14其并不对上述电子装置的结构造成限定。例如,终端还可包括比图14中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图14所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行阴影的展示方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
在虚拟场景中定位出第一对象所在的第一位置,其中,所述第一对象为通过客户端操控的对象;
在所述第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,所述第一区域为所述虚拟场景中的区域,所述第二对象为位于所述第一区域内且位置未发生变化的对象,所述第一阴影是在所述第一对象进入所述第一区域时渲染得到的所述第二对象的阴影;
在所述客户端显示的第一动画中展示所述第一阴影,其中,所述第一动画用于表示所述第一对象位于所述第一位置。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:
在所述第一区域与第二区域不同的情况下,调用渲染引擎对所述第二对象进行渲染得到所述第一阴影,其中,渲染得到的所述第一阴影被保存在存储器中,所述第二区域为所述虚拟场景中第二位置所在的区域,所述第一位置为所述第一对象在第一时间所在的位置,所述第二位置为所述第一对象在第二时间所在的位置,所述第二时间早于所述第一时间;
在所述第一区域与所述第二区域相同的情况下,从所述存储器中获取预先渲染好的所述第一阴影。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (15)
1.一种阴影的展示方法,其特征在于,包括:
在虚拟场景中定位出第一对象所在的第一位置,其中,所述第一对象为通过客户端操控的对象;
在所述第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,所述第一区域为所述虚拟场景中的区域,所述第二对象为位于所述第一区域内且位置未发生变化的对象,所述第一阴影是在所述第一对象进入所述第一区域时渲染得到的所述第二对象的阴影,所述第一阴影用于当所述第一对象位于所述第一区域内时进行复用;
在所述客户端显示的第一动画中展示所述第一阴影,其中,所述第一动画用于表示所述第一对象位于所述第一位置。
2.根据权利要求1所述的方法,其特征在于,在所述客户端显示的第一动画中展示所述第一阴影包括:
在所述客户端显示的第一动画中展示第二阴影和第三阴影,其中,所述第一阴影包括所述第二阴影和所述第三阴影,所述第二阴影和所述第三阴影为具有相同形状的所述第二对象的阴影,所述第二阴影和所述第三阴影的阴影精度不同。
3.根据权利要求2所述的方法,其特征在于,获取第二对象的第一阴影包括:
确定所述第二对象的第一图像采集位置和第二图像采集位置,其中,所述第二对象与所述第一图像采集位置之间的第一距离小于所述第二对象与所述第二图像采集位置之间的第二距离;
获取在所述第一图像采集位置采集到的所述第二阴影、在所述第二图像采集位置采集到的所述第三阴影,其中,所述第二阴影与所述第三阴影之间的缩放比值为所述第二距离与所述第一距离之间的比值。
4.根据权利要求1所述的方法,其特征在于,在所述客户端显示的第一动画中展示所述第一阴影之后,所述方法还包括:
当所述第一对象在所述第一区域内活动的时间达到第一阈值的情况下,获取与当前时间匹配的光照配置信息;
调用渲染引擎,按照所述光照配置信息渲染得到所述第二对象的第四阴影,并将存储器中所述第二对象的阴影更新为所述第四阴影;
在所述客户端显示的第二动画中展示所述第二对象的所述第四阴影,其中,所述第二动画为在所述第一动画之后播放的动画。
5.根据权利要求1所述的方法,其特征在于,在虚拟场景中定位出第一对象所在的第一位置之前,所述方法还包括:
接收到阴影处理请求,其中,所述阴影处理请求用于请求调用游戏引擎中的阴影处理插件生成所述第一阴影。
6.根据权利要求1至5中任意一项所述的方法,其特征在于,获取第二对象的第一阴影包括:
在所述第一区域与第二区域不同的情况下,调用渲染引擎对所述第二对象进行渲染得到所述第一阴影,其中,渲染得到的所述第一阴影被保存在存储器中,所述第二区域为所述虚拟场景中第二位置所在的区域,所述第一位置为所述第一对象在第一时间所在的位置,所述第二位置为所述第一对象在第二时间所在的位置,所述第二时间早于所述第一时间;
在所述第一区域与所述第二区域相同的情况下,从所述存储器中获取预先渲染好的所述第一阴影。
7.根据权利要求6所述的方法,其特征在于,调用渲染引擎对所述第二对象进行渲染得到所述第一阴影包括:
在所述第二对象的对象个数达到第二阈值的情况下,在第一渲染周期通过所述渲染引擎得到多个所述第二对象中的一部分所述第二对象的所述第一阴影,其中,所述第一渲染周期为所述第一时间所在的所述渲染引擎的渲染周期;
在第二渲染周期通过所述渲染引擎渲染得到多个所述第二对象中的另一部分所述第二对象的所述第一阴影,其中,所述第二渲染周期为所述第一渲染周期之后的所述渲染引擎的渲染周期。
8.根据权利要求7所述的方法,其特征在于,在所述第一区域与第二区域不同的情况下,
在所述客户端显示的第一动画中展示所述第一阴影包括:在所述第一动画中展示一部分所述第二对象的所述第一阴影;
在所述客户端显示的第一动画中展示所述第一阴影的同时,所述方法还包括:在所述第一动画中展示另一部分所述第二对象的第五阴影,其中,所述第五阴影为所述第一对象位于所述第二区域时调用所述渲染引擎渲染对所述第二对象进行渲染得到的阴影。
9.根据权利要求8所述的方法,其特征在于,在所述第一动画中展示另一部分所述第二对象的第五阴影之后,所述方法还包括:
在第三时间定位出所述第一对象位于所述第一区域的情况下,获取所有所述第二对象的第一阴影;
在所述客户端显示的第三动画中展示所有所述第二对象的所述第一阴影,其中,所述第三动画为在所述第一动画之后显示的动画。
10.根据权利要求6所述的方法,其特征在于,在调用渲染引擎对所述第二对象进行渲染得到所述第一阴影的同时或之后,所述方法还包括:
查找第三区域内的第三对象,其中,所述第三区域为所述虚拟场景中与所述第一区域相邻的区域,所述第三对象为所述第三区域内位置未发生变化的对象;
调用所述渲染引擎渲染得到所述第三对象的阴影,其中,所述第三对象的阴影用于在所述第三区域进入所述客户端的展示范围时进行展示。
11.根据权利要求1至5中任意一项所述的方法,其特征在于,在所述客户端显示的第一动画中展示所述第一阴影的同时,所述方法还包括:
在所述客户端显示的所述第一动画中展示第六阴影,其中,所述第六阴影是调用渲染引擎对所述第一对象进行渲染得到的。
12.根据权利要求1至5中任意一项所述的方法,其特征在于,在虚拟场景中定位出第一对象所在的第一位置之前,所述方法还包括:
将所述虚拟场景划分为多个区域,其中,所述多个区域包括所述第一区域、第二区域以及第三区域、第二区域以及第三区域。
13.一种阴影的展示装置,其特征在于,包括:
定位单元,用于在虚拟场景中定位出第一对象所在的第一位置,其中,所述第一对象为通过客户端操控的对象;
第一获取单元,用于在所述第一位置位于第一区域内的情况下,获取第二对象的第一阴影,其中,所述第一区域为所述虚拟场景中的区域,所述第二对象为位于所述第一区域内且位置未发生变化的对象,所述第一阴影是在所述第一对象进入所述第一区域时渲染得到的所述第二对象的阴影,所述第一阴影用于当所述第一对象位于所述第一区域内时进行复用;
第一展示单元,用于在所述客户端显示的第一动画中展示所述第一阴影,其中,所述第一动画用于表示所述第一对象位于所述第一位置。
14.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至12任一项中所述的方法。
15.一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述权利要求1至12任一项中所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010621458.4A CN111784817B (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
CN202410276255.4A CN118096992A (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010621458.4A CN111784817B (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410276255.4A Division CN118096992A (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111784817A true CN111784817A (zh) | 2020-10-16 |
CN111784817B CN111784817B (zh) | 2024-03-29 |
Family
ID=72759979
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410276255.4A Pending CN118096992A (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
CN202010621458.4A Active CN111784817B (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410276255.4A Pending CN118096992A (zh) | 2020-06-30 | 2020-06-30 | 阴影的展示方法和装置、存储介质、电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN118096992A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113570697A (zh) * | 2021-09-24 | 2021-10-29 | 深圳易帆互动科技有限公司 | 基于模型预烘焙的阴影渲染方法、装置及可读存储介质 |
CN113706683A (zh) * | 2021-08-06 | 2021-11-26 | 网易(杭州)网络有限公司 | 虚拟三维模型的阴影处理方法、阴影处理装置及电子装置 |
CN117331549A (zh) * | 2023-12-01 | 2024-01-02 | 成都福立盟科技有限公司 | 一种三维可视化开发框架构建方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090000083A (ko) * | 2006-12-28 | 2009-01-07 | 엔에이치엔(주) | 게임 서버의 광역 그림자 처리 방법 및 광역 그림자 처리시스템 |
CN104574496A (zh) * | 2014-12-30 | 2015-04-29 | 北京像素软件科技股份有限公司 | 一种计算光照图的静态阴影和动态阴影融合的方法及装置 |
CN107274476A (zh) * | 2017-08-16 | 2017-10-20 | 城市生活(北京)资讯有限公司 | 一种阴影图的生成方法及装置 |
CN108010120A (zh) * | 2017-11-30 | 2018-05-08 | 网易(杭州)网络有限公司 | 静态阴影的显示方法、装置、存储介质、处理器及终端 |
CN110832442A (zh) * | 2017-06-09 | 2020-02-21 | 索尼互动娱乐股份有限公司 | 注视点渲染***中的优化的阴影和自适应网状蒙皮 |
CN110992466A (zh) * | 2019-12-05 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 光照探针生成方法、装置、存储介质和计算机设备 |
-
2020
- 2020-06-30 CN CN202410276255.4A patent/CN118096992A/zh active Pending
- 2020-06-30 CN CN202010621458.4A patent/CN111784817B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090000083A (ko) * | 2006-12-28 | 2009-01-07 | 엔에이치엔(주) | 게임 서버의 광역 그림자 처리 방법 및 광역 그림자 처리시스템 |
CN104574496A (zh) * | 2014-12-30 | 2015-04-29 | 北京像素软件科技股份有限公司 | 一种计算光照图的静态阴影和动态阴影融合的方法及装置 |
CN110832442A (zh) * | 2017-06-09 | 2020-02-21 | 索尼互动娱乐股份有限公司 | 注视点渲染***中的优化的阴影和自适应网状蒙皮 |
CN107274476A (zh) * | 2017-08-16 | 2017-10-20 | 城市生活(北京)资讯有限公司 | 一种阴影图的生成方法及装置 |
CN108010120A (zh) * | 2017-11-30 | 2018-05-08 | 网易(杭州)网络有限公司 | 静态阴影的显示方法、装置、存储介质、处理器及终端 |
CN110992466A (zh) * | 2019-12-05 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 光照探针生成方法、装置、存储介质和计算机设备 |
Non-Patent Citations (1)
Title |
---|
曹雪峰;万刚;李科;李锋;: "三维交互场景中基于图像的实时阴影渲染与反走样技术", ***仿真学报, no. 1 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113706683A (zh) * | 2021-08-06 | 2021-11-26 | 网易(杭州)网络有限公司 | 虚拟三维模型的阴影处理方法、阴影处理装置及电子装置 |
CN113706683B (zh) * | 2021-08-06 | 2023-09-26 | 网易(杭州)网络有限公司 | 虚拟三维模型的阴影处理方法、阴影处理装置及电子装置 |
CN113570697A (zh) * | 2021-09-24 | 2021-10-29 | 深圳易帆互动科技有限公司 | 基于模型预烘焙的阴影渲染方法、装置及可读存储介质 |
CN117331549A (zh) * | 2023-12-01 | 2024-01-02 | 成都福立盟科技有限公司 | 一种三维可视化开发框架构建方法 |
CN117331549B (zh) * | 2023-12-01 | 2024-01-30 | 成都福立盟科技有限公司 | 一种三维可视化开发框架构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111784817B (zh) | 2024-03-29 |
CN118096992A (zh) | 2024-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2022116759A1 (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
CN111784817B (zh) | 阴影的展示方法和装置、存储介质、电子装置 | |
CN107358649B (zh) | 地形文件的处理方法和装置 | |
CN105912234B (zh) | 虚拟场景的交互方法和装置 | |
CN112241993B (zh) | 游戏图像处理方法、装置及电子设备 | |
EP4394713A1 (en) | Image rendering method and apparatus, electronic device, computer-readable storage medium, and computer program product | |
CN114344894B (zh) | 场景元素处理方法、装置、设备和介质 | |
CN113034658B (zh) | 一种模型贴图的生成方法和装置 | |
CN113409465A (zh) | 毛发模型的生成方法、装置、存储介质与电子设备 | |
CN117101127A (zh) | 虚拟场景中的图像渲染方法、装置、电子设备及存储介质 | |
CN115526976A (zh) | 虚拟场景渲染方法、装置、存储介质和电子设备 | |
CN110827400B (zh) | 三维场景中对象的模型生成方法、装置以及终端 | |
CN115564878A (zh) | 虚拟对象更新方法及装置 | |
EP4231243A1 (en) | Data storage management method, object rendering method, and device | |
CN111882637B (zh) | 一种画面渲染方法、装置、设备和介质 | |
CN114255312A (zh) | 植被图像的处理方法、装置及电子设备 | |
CN109300079A (zh) | 基于gpu的遥感影像实时匀光匀色预览技术 | |
CN115035231A (zh) | 阴影烘焙方法、装置、电子设备和存储介质 | |
CN111882639B (zh) | 一种画面渲染方法、装置、设备和介质 | |
CN114288647B (zh) | 基于AI Designer的人工智能游戏引擎、游戏渲染方法及装置 | |
WO2023165198A1 (zh) | 图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品 | |
CN110070597A (zh) | 一种基于OpenCL的Unity3D渲染加速方法 | |
CN117298571A (zh) | 星球数据构建方法及装置 | |
CN117852305A (zh) | 一种曲线道路建模方法及装置 | |
CN115937389A (zh) | 阴影渲染方法、装置、存储介质和电子设备 |
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 |