阴影渲染方法、游戏文件打包方法及相应装置与流程

文档序号:29089895发布日期:2022-03-02 02:28阅读:203来源:国知局
阴影渲染方法、游戏文件打包方法及相应装置与流程

1.本公开涉及游戏技术领域,具体地,涉及一种阴影渲染方法、游戏文件打包方法及相应装置。


背景技术:

2.阴影是游戏画面中相当重要的视觉元素,人眼观察到的立体感很大程度上依赖于阴影。目前主流的阴影算法是阴影图(shadow map)算法,其主要过程是,首先从光源方向上渲染一张深度图,然后在渲染相机视角时,通过对比屏幕像素在光源坐标系中的深度值与深度图中的对应值得到遮挡关系,从而渲染出阴影。在将大世界游戏移植到移动端的过程中,这会带来不小的开销。由此产生了预烘焙深度数据,以供游戏运行时实时渲染使用的方案。
3.但这类大世界游戏往往带有tod(时间交替)系统,随时间流逝光照方向会发生变化,因此需要烘焙不同时段的数据,而为减少时段切换的卡顿感,时段的粒度必须要很小,这会导致烘焙数据呈百倍增加,再加上大世界本身的规模,数据量几乎是无法接受的。


技术实现要素:

4.提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
5.第一方面,本公开提供一种阴影渲染方法,包括:
6.确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;
7.从所述视频数据中提取对应于所述目标时段的视频帧,得到所述目标地形块在所述目标时段的阴影高度图;
8.从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影。
9.第二方面,本公开提供一种游戏文件打包方法,包括:
10.对游戏场景中的地形进行分块,得到多个地形块;
11.根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;
12.分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;
13.将每个地形块对应的视频数据打包到游戏文件中。
14.第三方面,本公开提供一种阴影渲染装置,包括:
15.视频获取模块,用于确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;
16.视频解码模块,用于从所述视频数据中提取对应于所述目标时段的视频帧,得到所述目标地形块在所述目标时段的阴影高度图;
17.阴影渲染模块,用于从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影。
18.第四方面,本公开提供一种游戏文件打包装置,包括:
19.地形分块模块,用于对游戏场景中的地形进行分块,得到多个地形块;
20.高度图计算模块,用于根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;
21.视频编码模块,用于分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;
22.视频打包模块,用于将每个地形块对应的视频数据打包到游戏文件中。
23.第五方面,本公开提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理装置执行时实现第一方面或第二方面所述方法的步骤。
24.第六方面,本公开提供一种电子设备,包括:
25.存储装置,其上存储有计算机程序;
26.处理装置,用于执行所述存储装置中的所述计算机程序,以实现第一方面或第二方面所述方法的步骤。
27.在上述技术方案中,通过对游戏场景进行分块,对每个地形块的不同时段的阴影高度图进行预烘焙和视频压缩编码,将每个地形块的所有阴影高度图编码为视频数据,在进行渲染时,只需要从视频数据中提取对应于当前目标时段的视频帧,即可得到地形块在目标时段的阴影高度图,然后利用得到的阴影高度图渲染出地形块上各个待渲染地形点的阴影。上述过程,能够渲染出游戏画面中随时间变化的实时阴影,同时,阴影高度图数据是预烘焙的,且利用相邻时段间的冗余信息对数据进行了视频压缩编码,使得数据量不会很大,能够很好地应用在低性能的移动端设备上。
28.本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
29.结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:
30.图1是本公开实施例提供的游戏文件打包方法的流程图;
31.图2是本公开实施例中步骤s120的一种详细流程图;
32.图3是本公开实施例中在预设高度范围内搜索处于阴影中的最高高度的示意图;
33.图4是本公开实施例提供的阴影渲染方法的流程图;
34.图5是本公开实施例中步骤s230的一种详细流程图;
35.图6是本公开实施例中步骤s233的一种详细流程图;
36.图7是本公开实施例中预设插值函数的一种函数曲线图;
37.图8是本公开实施例提供的阴影渲染装置的框图;
38.图9是本公开实施例提供的游戏文件打包装置的框图;
39.图10是本公开实施例提供的电子设备的框图。
具体实施方式
40.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
41.应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
42.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
43.需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
44.需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
45.本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
46.传统的阴影图算法包括如下流程:1)将光源作为视点,从光源的视角绘制整个游戏场景,并保存从光源到场景的最小深度值,得到一张深度图;2)回到以相机为视点的视图中,从相机视角对场景进行绘制,在绘制时进行阴影判断,即判断某个像素是否处于场景的阴影中,若像素不在阴影中,则正常绘制,否则绘制成阴影。判断场景中某个点是否处于阴影中需要利用之前得到的深度图,对于场景中的某个点,首先将其转换到光源视角的空间,得到该点在光源视角下的深度值,然后将其与阴影图中该点对应的最小深度值进行比较,若该点深度值大于该对应的最小深度值,说明该点被遮挡,即该点处于阴影中,否则说明该点不在阴影中。通过上述判断,可以得到场景中每点“在阴影中”和“不在阴影中”的判断结果,从而渲染出阴影或不渲染阴影。
47.在静态场景的情况下,计算阴影图的步骤可以作为预计算部分,即预先将用于阴影判断的深度图数据烘焙出来,供实时渲染时使用。
48.这种预烘焙的方案基本上都是针对于静态光照,比如光源(太阳或月亮)的位置不变的情况,而对于具有tod系统的移动端大世界游戏而言,游戏场景中存在24小时的时间变化,随时间流逝光照方向会发生变化,在这种动态的场景中,场景中的遮挡关系会随光照变
化发生改变,预先烘焙的深度图数据将不能再使用。所以如果要将这种预烘焙的方案应用到这类游戏中,则需要烘焙不同时段的深度图数据,而为减少时段切换的卡顿感,时段的粒度必须要很小,这会导致烘焙数据呈百倍增加,再加上大世界本身的规模,数据量几乎是无法接受的。
49.为解决上述技术问题,本公开实施例提供一种烘焙阴影方案,包括游戏文件打包方法和阴影渲染方法。在打包游戏文件时,通过对游戏场景的地形进行分块,对每个地形块的不同时段的阴影高度图进行预烘焙和视频压缩编码,将每个地形块的所有阴影高度图编码为视频数据,在进行阴影渲染时,只需要从视频数据中提取对应于当前目标时段的视频帧,即可得到地形块在目标时段的阴影高度图,然后利用得到的阴影高度图即可渲染出地形块上各个待渲染地形点的阴影。
50.本公开实施例,一方面能够实现随时间变化渲染游戏画面的实时阴影,另一方面,阴影高度图数据是预烘焙的,且利用相邻时段间的冗余信息对数据进行了视频压缩编码,使得数据量不会很大,能够很好地应用在低性能的移动端设备上,最终还能取得良好的阴影效果。需要说明的是,本方案尤其适用于移动端游戏,但对于pc端、网页端游戏也能适用。
51.图1示出了本公开实施例的游戏文件打包方法的流程图,该方法可以由游戏制作方的电子设备执行,请参照图1,该方法包括如下步骤:
52.s110,对游戏场景中的地形进行分块,得到多个地形块。
53.s120,根据每个时段的光源位置,分别计算每个地形块上的每个地形点在该时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图。
54.其中,每个地形块在每个时段对应一张阴影高度图,该阴影高度图是根据该地形块上的每个地形点在该时段垂直方向上处于阴影中的最高高度得到,且该阴影高度图中存储有该地形块上的每个地形点对应的采样值。示例性的,将tod系统设定的一天拆分成多个时段,根据每个时段的光源位置分别计算游戏场景中每个地形块上的每个地形点在对应时段垂直方向上处于阴影中的最高高度,根据该地形块上的每个地形点对应的最高高度获得该地形块在该时段对应的阴影高度图。例如,将tod系统设定的一天拆分成512个时段,则每个地形块分别获得512个阴影高度图。
55.在一种实施例中,在计算出该地形块上的每个地形点对应的最高高度后,根据该最高高度得到对应的阴影高度图,阴影高度图中的每个像素直接保存对应地形点的最高高度的值,即采样值为该最高高度。示例性的,游戏场景按照512m*512m的单位进行地形分块,每个地形块对应于游戏场景中512m*512m的地形,地形块上共有512*512个地形点,每个地形点对应于游戏场景中1m*1m的地形,同时,阴影高度图也用512*512分辨率的贴图进行表示,阴影高度图上的一个像素对应于一个1m*1m的地形点在该时段垂直方向上处于阴影中的最高高度。
56.在又一实施例中,在计算出该地形块上的每个地形点在该时段对应的最高高度后,对最高高度进行esm(exponential shadow maps,指数阴影图)运算,根据每个地形点的esm运算结果得到该地形块对应的阴影高度图,阴影高度图中的每个像素保存的是对对应地形点的最高高度进行esm运算后的值。该实施例的具体实施方式在后文介绍。
57.s130,分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据。
58.在计算得到每个地形块在各个时段的阴影高度图后,得到每个地形块的呈时间序列的多个阴影高度图。由于多个阴影高度图可以理解为时间上连续的图像序列,且阴影本身的移动速度很小,形状变化缓慢,相邻时段的阴影高度图间有非常多的冗余信息,利用上述特点,分别对每个地形块对应的多个阴影高度图进行视频压缩编码,使得多个阴影高度图按照时间变化顺序被编码为视频数据。由于多个阴影高度图中时间上相邻两帧之间的相似度很高,通过减少相邻两帧阴影高度图中的部分冗余信息,可以达到接近1:500的压缩比,极大减少数据量。在经视频压缩编码后,得到的视频数据的文件大小仅相当于一个阴影高度图的文件大小。
59.考虑到游戏画面的质量,在步骤s120中,对每个地形块对应的多个阴影高度图进行8比特以上的视频压缩编码,如8比特、10比特或16比特。在具体实施例中,可以采用x265编解码器进行视频压缩编码和解码。
60.s140,将每个地形块对应的视频数据打包到游戏文件中。
61.示例性的,将tod系统设定的一天拆分成512个时段,分别计算每个地形块在每个时段对应的阴影高度图,得到每个地形块对应的512个阴影高度图,将每个地形块对应的512个阴影高度图进行视频压缩编码,从而将512个阴影高度图编码为一份视频数据,然后将游戏场景中所有地形块对应的视频数据一起打包到游戏文件中。当用户(游戏玩家)的电子设备下载并安装游戏文件,且在用户的电子设备上运行游戏时,用户的电子设备将根据游戏文件中每个地形块的视频数据对游戏画面中地形块上的阴影进行渲染。
62.值得注意的是,传统的阴影图算法烘焙的是深度图,深度图是从光源的方向渲染场景得到的,由于光源方向与地面之间存在一定的倾斜角度,深度图不一定是地形正上方的投影,深度图上一个像素对应到地形上的一块面积可能会比较大,尤其光源方向倾斜得越厉害,远处地形上会有更大的区域对应到深度图的一个像素上,这将会导致阴影的分辨率不足,从而在绘制阴影时产生明显的锯齿或瑕疵。
63.而在本公开实施例中烘焙的是高度图,高度图中的每个像素存储的是对应地形点在垂直方向上处于阴影中的最高高度或者对最高高度进行进一步运算的值,显然,高度图是地形块正上方的投影,能够与地形块完全一一对应,如果地形块上的一个地形点的大小为1m*1m,则高度图中的一个像素必然对应的是地形块上的一个1m*1m面积的地形点,对于早晨或晚上这种光照倾斜厉害的场景,渲染出的阴影效果会比传统阴影图算法更好。
64.在可选的实施例中,图2示出了该实施例中步骤s120获得阴影高度图的一种详细流程图。图2以计算某一个地形块的阴影高度图为例进行说明,步骤s120包括:
65.s121,根据每个时段对应的光源位置,分别计算该地形块上的每个地形点在对应时段垂直方向上处于阴影中的最高高度,得到原始高度图。
66.根据每个时段的光源位置,分别计算该地形块上的每个地形点在对应时段垂直方向上处于阴影中的最高高度,根据每个地形点对应的最高高度得到原始高度图,原始高度图中的每个像素保存对应地形点的最高高度的值。
67.可以理解的是,在游戏场景中,地形的高度是有限的,最高位置一般在1000~2000m左右,在计算每个地形点在对应时段垂直方向上处于阴影中的最高高度的过程中,遍历该地形块上的每个地形点,根据该时段的光源位置,在每个地形点垂直方向上的预设高度范围内搜索处于阴影中的高度,从而获得地形块上每个地形点对应的最高高度。图3示出
了在预设高度范围内搜索处于阴影中的最高高度的示意图,作为一种示例,从该地形点垂直方向上0~2000m的预设高度范围内逐步向上搜索,假设附近有一栋建筑,在逐步向上搜索的过程中确定该地形点垂直方向上0~50m范围内被建筑遮挡,即处于阴影中,再往上的高度不处于阴影中,于是,可确定该地形点处于阴影中的最高高度为50m。
68.可以理解的,时段划分的粒度越小,可以认为该时段内光源的位置及在地形上产生的阴影是没有变化的,因此可以取该时段起始时刻(或中间任意时刻)的光源位置作为该时段的光源位置。
69.s122,对原始高度图中的每个最高高度分别进行第一指数运算,以将最高高度转换为指数高度,获得中间高度图。
70.其中,第一指数运算为esm算法中的第一指数函数。
71.第一指数函数为ec·h;c为常量系数,h为该地形点对应的最高高度,ec·h为对最高高度h进行第一指数运算后得到的指数高度。中间高度图存储的是该地形块上每个地形点的指数高度ec·h。
72.需要说明的是,在获得原始高度图后,由于原始高度图的精度是1m*1m,相当于原始高度图中的每个像素对应的是地形块上1m*1m的大小,如果按照传统阴影图算法,得到的阴影判断结果只有“在阴影中”和“不在阴影中”这两种结果,最终渲染出的阴影会产生严重的锯齿感。为了消除阴影锯齿感,采用esm算法实现软阴影,使得最终渲染出的阴影的边缘具有从半阴影逐渐到不在阴影里的渐变,得到的边缘是柔和过渡的,而不是锯齿形状的。
73.s123,对每个时段对应的中间高度图进行滤波,得到该地形块在每个时段对应的阴影高度图。
74.可以理解的,在将中间高度图中的指数高度进行滤波后,后续根据滤波后的结果计算出的第一阴影衰减也会在原本软阴影的基础上进一步模糊,从而使渲染出的阴影边缘更加柔和,增加阴影真实性。
75.示例性的,采用4*4大小的高斯核对中间高度图进行高斯滤波。
76.在一实施例中,考虑到指数高度ec·h可能是一个非常大的值,而且,在对中间高度图中的指数高度进行高斯滤波时,会将中间高度图上的4*4大小范围内的指数高度进行加权平均,在指数高度已经是个很大数值的情况下,加权平均后可能会产生一个更大的数,导致滤波后的值可能会超出浮点数表示的范围,出现浮点数溢出。因此,本公开实施例提出,将指数高度转换到对数空间,以避免浮点数溢出的情况。
77.下文以对中间高度图中某指数高度进行滤波为例进行说明。如果按照常规高斯滤波方法对该指数高度进行滤波,则按以下滤波公式w
·
f(h0)对该指数高度与周围的n个指数高度进行加权平均:
[0078][0079]
其中,为该中间高度图中当前滤波的指数高度,为参与当前滤波的其他指数高度中的第1个指数高度,为参与当前滤波的其他指数高度中的第n个指数高度,w0为当前滤波的指数高度对应的滤波权重,w1为该第1个指数高度对应的滤波权重,wn为该第n个指数高度对应的滤波权重。
[0080]
示例性的,假设n=2,将该指数高度与周围的两个指数高度和进行滤波。
[0081]
则有w
·
f(h0)等于:
[0082][0083]
在本公开实施例中,根据对数基本性质e
lnp
=p,则上式可以变换成:
[0084][0085]
进一步的,将上述根据三个指数高度进行滤波的示例推导到有多个指数高度进行滤波的场景,则有:
[0086][0087]
其中,为该中间高度图中当前滤波的指数高度,n为参与当前滤波的其他指数高度的数目,为n个其他指数高度中的第i个指数高度,c为常量系数,w0为当前滤波的指数高度对应的滤波权重,wi为第i个指数高度对应的滤波权重。
[0088]
因此,在步骤s123中对中间高度图进行滤波的过程中,对中间高度图中的每个指数高度进行如下的滤波操作w
·
f(h0):
[0089][0090]
令根据每个指数高度的滤波结果得到阴影高度图,该阴影高度图存储该地形块上每个地形点的采样值,该采样值为对该地形点的指数高度进行滤波后得到的指数项u。
[0091]
在上述过程中,在进行滤波时,将多次指数的叠加运算,变成一个抽取出一个共同的大乘数因子的叠加,而且将指数结果转换到对数空间,最终阴影高度图中保存的是经过对数运算的指数项u,所以,阴影高度图中保存的采样值不会超出浮点数表示的范围,避免了浮点数溢出。
[0092]
图4示出了本公开实施例提供的阴影渲染方法的流程图,该方法可以由用户(游戏玩家)的电子设备执行,请参照图4,该方法包括如下步骤:
[0093]
s210,确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据。
[0094]
用户的电子设备(从网络或从存储器中)获取并安装游戏文件,并在该电子设备上运行对应的游戏。当游戏运行时,确定当前的游戏内时间所对应的时段(记为目标时段),从
游戏文件获取游戏场景中位于相机的第一视野范围内的每个地形块(记为目标地形块)对应的视频数据。其中,该视频数据是将目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,每个阴影高度图中存储有对应的目标地形块上的每个地形点的采样值。
[0095]
s220,从获取的每个视频数据中分别提取对应于目标时段的视频帧,得到每个目标地形块在目标时段的阴影高度图。
[0096]
在获取相机的第一视野范围内的每个地形块对应的视频数据后,从每个视频数据中分别解码出对应于目标时段的阴影高度图,得到每个目标地形块在目标时段的阴影高度图。
[0097]
s230,从目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据该采样值渲染该待渲染地形点的阴影。
[0098]
在可选的实施例中,图5示出了上述步骤s230的一种详细流程图,如图5所示,步骤s230包括:
[0099]
s231,将位于该第一视野范围内的每个目标地形块在目标时段的阴影高度图拷贝到采样高度图上。
[0100]
其中,当第一次渲染游戏画面时,将第一视野范围内的每个目标地形块在目标时段的阴影高度图分别拷贝到采样高度图上,此时采样高度图是在第一视野范围内的每个目标地形块正上方的投影,即第一视野范围内左下角地形块的阴影高度图正好对应于采样高度图上的左下角位置。示例性的,每个目标地形块对应于游戏场景中512m*512m的地形,使用512*512像素的阴影高度图表示该目标地形块。
[0101]
示例性的,采样高度图为2048*2048像素的图像,则可以拷贝4*4个512*512像素的阴影高度图到采样高度图上。
[0102]
当检测到相机移动时,例如检测到相机向上方移动512m,此时随相机移动移动将会产生被淘汰地形块(即消失在第一视野范围内的地形块)和新出现地形块(即新出现在第一视野范围内的地形块)。常规更新采样高度图的做法是,将被淘汰地形块的阴影高度图从采样高度图中删除,然后将采样高度图上的数据逐行向下拷贝,如将原本第513行的像素拷贝到第1行,将原本第514行的像素拷贝到第2行,将原本第515行的像素拷贝到第3行,逐行拷贝后,将新出现地形块的阴影高度图拷贝到采样高度图中空闲出的最上方的位置。
[0103]
这样,相当于实际拷贝的有效内容只有新出现在第一视野范围内的地形块的数据,其他若干行的像素拷贝都是浪费的。为了避免不必要的拷贝操作,在本公开实施例中,在确定随相机移动所产生的被淘汰地形块和在第一视野范围内产生的新出现地形块后,删除采样高度图中的被淘汰地形块对应的阴影高度图,保持采样高度图中的剩余地形块对应的阴影高度图不变,将新出现地形块对应的阴影高度图拷贝到被淘汰地形块的阴影高度图对应的位置。
[0104]
这样,当游戏中的游戏角色向前方或者任意方向行走时,相机随游戏角色行走而移动,采样高度图每次可能仅更新其中部分像素的数据,不会将整个采样高度图全部重新拷贝,最大程度上复用了之前拷贝的数据,使得采样高度图每次更新尽可能少,减少移动端设备的运算压力。
[0105]
s232,确定每个待渲染地形点在采样高度图上的采样位置。
[0106]
其中,该采样位置可以用于确定待渲染地形点对应的采样值位于采样高度图上的哪一个像素,从而能够从采样高度图上采样出该待渲染地形点对应的采样值。
[0107]
s233,根据该采样位置从该采样高度图中采样对应位置的采样值,并根据每个待渲染地形点对应的采样值渲染对应的阴影。
[0108]
在一种实施例中,阴影高度图上的一个像素直接保存该目标地形块上的对应地形点在目标时段垂直方向上处于阴影中的最高高度,那么可根据该采样位置从采样高度图中采样对应位置的像素保存的最高高度,根据该最高高度来渲染对应的阴影。
[0109]
在又一实施例中,阴影高度图上的每个像素保存的是对该目标地形块上的对应地形点的最高高度依次进行第一指数运算和滤波操作后得到的指数项u,那么可根据该采样位置从采样高度图中采样对应位置的像素保存的采样值u,根据该采样值u来渲染对应的阴影。该实施例中,阴影高度图的具体生成方式请参照前述实施例中步骤s121~s123部分的描述。
[0110]
在该实施例中,图6示出了步骤s233的一种详细流程图,如图6所示,步骤s233包括:
[0111]
s2331,根据待渲染地形点对应的采样位置,从该采样高度图中获取相应位置处的采样值,并根据该采样值计算得到第一目标指数高度。
[0112]
首先,根据待渲染地形点对应的采样位置从采样高度图中获取相应位置处的采样值然后根据该采样值还原出滤波结果w
·
f(h0)即为第一目标指数高度。
[0113]
s2332,获取待渲染地形点在游戏场景中的世界高度。
[0114]
s2333,对该世界高度进行第二指数运算,得到第二目标指数高度。
[0115]
其中,第二指数运算为esm算法中的第二指数函数。
[0116]
第二指数函数为e-c
·d;c为常量系数,d为待渲染地形点在游戏场景中的世界高度,e-c
·d为根据待渲染地形点的世界高度d计算得到的第二目标指数高度。
[0117]
s2334,将第一目标指数高度与第二目标指数高度相乘,得到待渲染地形点对应的第一阴影衰减。
[0118]
将该渲染地形点对应的第一目标指数高度和第二目标指数高度相乘,得到该待渲染地形点对应的第一阴影衰减f(d,h):
[0119][0120]
其中,第一阴影衰减表征该待渲染地形点此时处于阴影中的程度。
[0121]
s2335,根据第一阴影衰减渲染待渲染地形点的阴影。
[0122]
其中,在步骤s2335中,根据目标时段的光源位置和待渲染地形点的材质信息,计算待渲染地形点的原着色信息,然后根据第一阴影衰减和原着色信息,得到阴影着色信息,最后根据阴影着色信息渲染待渲染地形点的阴影。
[0123]
在一种实施例中,首先计算待渲染地形点的原着色信息,然后将第一阴影衰减作用在原着色信息上,从而在原有着色的基础上根据第一阴影衰减进行相应程度的变暗,得到阴影着色信息,最后将得到的阴影着色信息的颜色渲染在待渲染地形点上,得到相应的阴影。
[0124]
在又一实施例中,本公开实施例中的阴影渲染方法可以同时结合阴影图算法,因此,该方法还包括:通过阴影图算法获取相机的第二视野范围内的阴影深度图;从该阴影深度图中采样该待渲染地形点对应的阴影深度值;根据该阴影深度值计算该待渲染地形点对应的第二阴影衰减。
[0125]
需要说明的是,第二视野范围位于第一视野范围以内。
[0126]
示例性的,第一视野范围是以相机为中心形成的长度为m、宽度为n的范围,第二视野范围是以相机为中心形成的长度为m’、宽度为n’的范围,且m’《m,n’《n。例如,第一视野范围是以相机为中心形成的1km*1km的范围,第二视野范围是以相机为中心形成的200m*200m的范围。
[0127]
因此,根据第一阴影衰减和原着色信息得到阴影着色信息的步骤包括:根据预设插值函数确定该待渲染地形点对应的权值信息;根据该权值信息对第一阴影衰减和第二阴影衰减进行加权计算,得到目标阴影衰减;将目标阴影衰减作用在原着色信息上,得到阴影着色信息。
[0128]
可以理解的是,在本公开实施例中,阴影高度图存储的是地形点处于阴影中的高度信息,但在部分特殊场景下,这个高度信息并非是完全物理正确,为了避免阴影计算错误,利用阴影图算法进行互补。该阴影图算法是根据光源视角的最小深度值,并采用软阴影算法来渲染阴影,所以通过该阴影图算法能够确定出地形点处于阴影中的程度,即得到该待渲染地形点的第二阴影衰减。然后,根据第一阴影衰减和第二阴影衰减进行线性插值,作为实际的阴影衰减,来渲染出最终的阴影效果。
[0129]
在本公开实施例中,预设插值函数被构造为:
[0130]
如果x小于min,则返回第一权值为0;
[0131]
如果x大于max,则返回第一权值为1;
[0132]
如果x∈[min,max],则返回第一权值为大于0且小于1的值;
[0133]
其中,x为待渲染地形点与相机在长度方向上的距离,且min《m’,m’《max《m;或者,x为待渲染地形点与相机在宽度方向上的距离,且min《n’,n’《max《n。
[0134]
在本公开实施例中,根据待渲染地形点的位置和上述预设插值函数确定第一权值,然后根据第一权值计算出第二权值。其中,第一权值为第一阴影衰减对应的权值,第二权值为第二阴影衰减对应的权值。
[0135]
需要说明的是,在本公开实施例中,该方法还包括:将阴影深度图的采样模式配置为:当从阴影深度图中进行采样的位置超出该阴影深度图所表示的第二视野范围时,从离该采样的位置最近的位置进行采样。在本实施例中,阴影深度图表示的范围为200m*200m,当待渲染地形点的位置超出200m*200m的范围时,将会采样到阴影深度图最外圈的最小深度值上。
[0136]
示例性的,第一视野范围为相机为中心的1km*1km范围(即游戏角色周围1km*1km的矩形范围),第二视野范围为相机为中心的200m*200m范围(即游戏角色周围200m*200m的
矩形范围)。图7示出了该示例性实施例中预设插值函数的函数曲线图,其中,x轴表示x的值,纵轴表示第一权值的值。如图7所示,当x《180m时,第一阴影衰减的第一权值为0,第二阴影衰减的第二权值为1,从效果来看,在180m*180m范围内全部为阴影图算法的阴影效果,当x∈[180,200]时,第一阴影衰减与第二阴影衰减进行线性插值,从效果来看,在180m*180m至200m*200m范围内为阴影图算法与本公开实施例提供的烘焙阴影的平滑叠加,形成过渡带,当x∈(200,1000]时,第一阴影衰减的第一权值为1,第二阴影衰减的第二权值为0,从效果来看,在200m*200m至1km*1km范围内为本公开实施例中的烘焙阴影的阴影效果。
[0137]
可以理解的是,通过调整该预设插值函数,可以控制第一权值和第二权值的取值大小,以及控制两种阴影效果间的过渡带范围。
[0138]
此外,图7所示的函数曲线图仅是其中一种示例,并不表示对该预设插值函数的限定,例如预设插值函数中x∈[min,max]的曲线部分还可以是其他形式,如呈直线。
[0139]
在一种示例中,游戏场景中设置有一座高塔,高塔呈上大下小形状,在计算每个地形点垂直方向上处于阴影中的最高高度的过程中,是在每个地形点垂直方向上的预设高度范围内基于高塔的最高位置搜索该地形点处于阴影中的高度,但是,高塔下半部分可能只是一根很细的石柱,在真实情况下,光会从高塔下半部分穿过并照射到该地形点上,但根据阴影高度图会错误认为该地形点在阴影中,所以本公开实施例提供的烘焙阴影对于这类特殊场景,无法达到完全正确的效果。而通过将烘焙阴影的第一阴影衰减与阴影图算法的第二阴影衰减进行线性插值,可以弥补上述缺点。
[0140]
这样,对于近处的地形(如x《180m),即使通过本公开实施例中的阴影高度图错误认为该地形点处于阴影中,但从光源视角来看,光从高塔下方穿过后会照射到该地形点上,所以根据阴影深度图会判定该地形点不处于阴影中。而由于此时根据预设插值函数得到的第二权值为1,所以渲染出的阴影效果为该地形点不在阴影中,渲染出的效果与真实光照情况一致,从而增强了本公开实施例的阴影效果的正确性和可靠性。而对于远处的地形(如x》200m),则这种小的瑕疵在整个画面上可以被忽略,不会对画面造成影响。所以,本公开实施例提供的烘焙阴影可以主要用于渲染中远景阴影。
[0141]
另外,在采用阴影图算法时,阴影深度图的视野范围越大,对阴影深度图的精度要求就越高,性能消耗也将会越大,所以将阴影深度图限制在一个小的范围内(如200m*200m的第二视野范围),来渲染近景的阴影,而更远范围的阴影则根据性能消耗更低的烘焙阴影进行渲染,从而,既弥补了烘焙阴影对于近景的不足,又减少了阴影图算法的性能消耗。
[0142]
综上所述,本公开实施例将离线烘焙技术应用到移动端的tod大世界游戏中,在低性能的设备上也能获得较好的阴影效果,同时利用阴影随时间变化的特点,引入视频压缩编码技术,能够得到高达1:500以上的压缩比,极大降低数据量,使得离线烘焙应用到移动端大规模开放世界游戏中成为可能。
[0143]
本公开实施例还提供一种阴影渲染装置,请参照图8,阴影渲染装置300包括:
[0144]
视频获取模块310,用于确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;
[0145]
视频解码模块320,用于从所述视频数据中提取对应于所述目标时段的视频帧,得
到所述目标地形块在所述目标时段的阴影高度图;
[0146]
阴影渲染模块330,用于从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影。
[0147]
可选的,阴影渲染模块330包括:
[0148]
拷贝子模块,用于将位于所述第一视野范围内的每个目标地形块在所述目标时段的阴影高度图拷贝到采样高度图上;
[0149]
位置确定子模块,用于确定每个待渲染地形点在所述采样高度图上的采样位置;
[0150]
阴影渲染子模块,用于根据所述采样位置从所述采样高度图中采样对应位置的采样值,并根据每个待渲染地形点对应的采样值渲染对应的阴影。
[0151]
可选的,阴影渲染子模块包括:
[0152]
第一目标指数高度获取单元,用于根据所述待渲染地形点对应的采样位置,从所述采样高度图中获取相应位置处的采样值,并根据所述采样值计算得到第一目标指数高度;
[0153]
第二目标指数高度获取单元,用于获取所述待渲染地形点在所述游戏场景中的世界高度,并对所述世界高度进行第二指数运算,得到第二目标指数高度;
[0154]
第一阴影衰减计算单元,用于将所述第一目标指数高度与所述第二目标指数高度相乘,得到所述待渲染地形点对应的第一阴影衰减;
[0155]
阴影渲染单元,用于根据所述第一阴影衰减渲染所述待渲染地形点的阴影。
[0156]
可选的,阴影渲染单元用于:
[0157]
根据所述目标时段的光源位置和所述待渲染地形点的材质信息,计算所述待渲染地形点的原着色信息;
[0158]
根据所述第一阴影衰减和所述原着色信息,得到阴影着色信息;
[0159]
根据所述阴影着色信息渲染所述待渲染地形点的阴影。
[0160]
可选的,该装置还包括:第二阴影衰减计算模块,用于通过阴影图算法获取所述相机的第二视野范围内的阴影深度图;其中,所述第二视野范围位于所述第一视野范围以内;从所述阴影深度图中采样所述待渲染地形点对应的阴影深度值;根据所述阴影深度值计算所述待渲染地形点对应的第二阴影衰减。阴影渲染单元用于:
[0161]
根据预设插值函数确定所述待渲染地形点对应的权值信息;
[0162]
根据所述权值信息对所述第一阴影衰减和所述第二阴影衰减进行加权计算,得到目标阴影衰减;
[0163]
将所述目标阴影衰减作用在所述原着色信息上,得到所述阴影着色信息。
[0164]
可选的,所述第一视野范围是以相机为中心形成的长度为m、宽度为n的范围,所述第二视野范围是以相机为中心形成的长度为m’、宽度为n’的范围,且m’《m,n’《n;所述预设插值函数被构造为:
[0165]
如果x小于min,则返回第一权值为0;
[0166]
如果x大于max,则返回第一权值为1;
[0167]
如果x∈[min,max],则返回第一权值为大于0且小于1的值;
[0168]
其中,x为所述待渲染地形点与相机在长度方向上的距离,且min《m’,m’《max《m;或者,x为所述待渲染地形点与相机在宽度方向上的距离,且min《n’,n’《max《n。
[0169]
阴影渲染单元用于:根据所述待渲染地形点的位置和所述预设插值函数确定第一权值,并根据所述第一权值计算出第二权值;其中,所述第一权值为所述第一阴影衰减对应的权值,所述第二权值为所述第二阴影衰减对应的权值。
[0170]
可选的,拷贝子模块用于:
[0171]
当检测到相机移动时,确定随相机移动所产生的被淘汰地形块和在所述第一视野范围内产生的新出现地形块;
[0172]
删除所述采样高度图中的被淘汰地形块对应的阴影高度图,保持所述采样高度图中的剩余地形块对应的阴影高度图不变,将新出现地形块对应的阴影高度图拷贝到所述被淘汰地形块的阴影高度图对应的位置。
[0173]
可以理解,本实施例中的阴影渲染装置,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,该阴影渲染装置中未提及之处可以参照阴影渲染方法中的相应描述。
[0174]
本公开实施例还提供一种游戏文件打包装置,请参照图9,游戏文件打包装置400包括:
[0175]
地形分块模块410,用于对游戏场景中的地形进行分块,得到多个地形块;
[0176]
高度图计算模块420,用于根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;
[0177]
视频编码模块430,用于分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;
[0178]
视频打包模块440,用于将每个地形块对应的视频数据打包到游戏文件中。
[0179]
可选的,高度图计算模块420包括:
[0180]
原始高度图计算单元,用于根据每个时段对应的光源位置,分别计算所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,得到每个地形块对应的原始高度图,所述原始高度图存储所述地形块上每个地形点的最高高度;
[0181]
中间高度图计算单元,用于对所述原始高度图中的每个最高高度分别进行第一指数运算,以将所述最高高度转换为指数高度,获得中间高度图,所述中间高度图存储所述地形块上每个地形点的指数高度;
[0182]
滤波单元,用于对每个时段对应的所述中间高度图进行滤波,得到所述地形块在每个时段对应的阴影高度图。
[0183]
可选的,滤波单元用于:
[0184]
对所述中间高度图中的每个指数高度进行如下滤波操作w
·
f(h0):
[0185][0186][0187]
其中,为所述中间高度图中当前滤波的指数高度,n为参与当前滤波的其他指数高度的数目,为n个其他指数高度中的第i个指数高度,c为常量系数,w0为当前滤波
的指数高度对应的滤波权重,wi为第i个指数高度对应的滤波权重;
[0188]
根据每个指数高度的滤波结果得到阴影高度图,所述阴影高度图存储对所述地形块上每个地形点的指数高度进行滤波后得到的指数项u。
[0189]
可选的,高度图计算模块420用于:
[0190]
针对每个地形块,遍历所述地形块上的每个地形点,根据所述时段的光源位置,在所述地形点垂直方向上的预设高度范围内搜索处于阴影中的高度,获得所述地形块上的每个地形点在所述时段对应的所述最高高度。
[0191]
可以理解,本实施例中的游戏文件打包装置,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,该游戏文件打包装置中未提及之处可以参照游戏文件打包方法中的相应描述。
[0192]
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理装置执行时实现前述的阴影渲染方法或游戏文件打包方法的步骤。
[0193]
本公开实施例还提供一种电子设备,包括:
[0194]
存储装置,其上存储有计算机程序;
[0195]
处理装置,用于执行所述存储装置中的所述计算机程序,以实现前述的阴影渲染方法或游戏文件打包方法的步骤。
[0196]
下面参考图10,其示出了适于用来实现本公开实施例的电子设备(例如游戏制作方的电子设备或者用户的电子设备)500的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图10示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
[0197]
如图10所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)501,其可以根据存储在只读存储器(rom)502中的程序或者从存储装置508加载到随机访问存储器(ram)503中的程序而执行各种适当的动作和处理。在ram 503中,还存储有电子设备500操作所需的各种程序和数据。处理装置501、rom 502以及ram 503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。
[0198]
通常,以下装置可以连接至i/o接口505:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置506;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置507;包括例如磁带、硬盘等的存储装置508;以及通信装置509。通信装置509可以允许电子设备500与其他设备进行无线或有线通信以交换数据。虽然图10示出了具有各种装置的电子设备500,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
[0199]
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置509从网络上被下载和安装,或者从存储装置508被安装,或者从rom 502被安装。在该计算机程序被处理装置501执行时,执行本公开实施例的方法中限定的上述功能。
[0200]
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
[0201]
在一些实施方式中,游戏制作方的电子设备与服务器之间、用户的电子设备与服务器之间可以利用诸如http(hypertext transfer protocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连,从而将游戏文件发布到服务器上,或者从服务器上下载游戏文件。通信网络的示例包括局域网(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
[0202]
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
[0203]
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;从所述视频数据中提取对应于所述目标时段的视频帧,得到所述目标地形块在所述目标时段的阴影高度图;从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影。
[0204]
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:对游戏场景中的地形进行分块,得到多个地形块;根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;将每个地形块对应的视频数据打包到游戏文件中。
[0205]
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、
smalltalk、c++,还包括常规的过程式程序设计语言——诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0206]
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0207]
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,视频解码模块还可以被描述为“从视频数据中提取对应于目标时段的视频帧,得到目标地形块在目标时段的阴影高度图的模块”。
[0208]
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。
[0209]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0210]
根据本公开的一个或多个实施例,示例1提供了一种阴影渲染方法,包括:
[0211]
确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;
[0212]
从所述视频数据中提取对应于所述目标时段的视频帧,得到所述目标地形块在所述目标时段的阴影高度图;
[0213]
从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所
述采样值渲染所述待渲染地形点的阴影。
[0214]
根据本公开的一个或多个实施例,示例2提供了示例1的方法,所述从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影,包括:
[0215]
将位于所述第一视野范围内的每个目标地形块在所述目标时段的阴影高度图拷贝到采样高度图上;
[0216]
确定每个待渲染地形点在所述采样高度图上的采样位置;
[0217]
根据所述采样位置从所述采样高度图中采样对应位置的采样值,并根据每个待渲染地形点对应的采样值渲染对应的阴影。
[0218]
根据本公开的一个或多个实施例,示例3提供了示例2的方法,所述根据所述采样位置从所述采样高度图中采样对应位置的采样值,并根据每个待渲染地形点对应的采样值渲染对应的阴影,包括:
[0219]
根据所述待渲染地形点对应的采样位置,从所述采样高度图中获取相应位置处的采样值,并根据所述采样值计算得到第一目标指数高度;
[0220]
获取所述待渲染地形点在所述游戏场景中的世界高度;
[0221]
对所述世界高度进行第二指数运算,得到第二目标指数高度;
[0222]
将所述第一目标指数高度与所述第二目标指数高度相乘,得到所述待渲染地形点对应的第一阴影衰减;
[0223]
根据所述第一阴影衰减渲染所述待渲染地形点的阴影。
[0224]
根据本公开的一个或多个实施例,示例4提供了示例3的方法,所述根据所述第一阴影衰减渲染所述待渲染地形点的阴影,包括:
[0225]
根据所述目标时段的光源位置和所述待渲染地形点的材质信息,计算所述待渲染地形点的原着色信息;
[0226]
根据所述第一阴影衰减和所述原着色信息,得到阴影着色信息;
[0227]
根据所述阴影着色信息渲染所述待渲染地形点的阴影。
[0228]
根据本公开的一个或多个实施例,示例5提供了示例4的方法,还包括:
[0229]
通过阴影图算法获取所述相机的第二视野范围内的阴影深度图;其中,所述第二视野范围位于所述第一视野范围以内;
[0230]
从所述阴影深度图中采样所述待渲染地形点对应的阴影深度值;
[0231]
根据所述阴影深度值计算所述待渲染地形点对应的第二阴影衰减;
[0232]
所述根据所述第一阴影衰减和所述原着色信息,得到阴影着色信息,包括:
[0233]
根据预设插值函数确定所述待渲染地形点对应的权值信息;
[0234]
根据所述权值信息对所述第一阴影衰减和所述第二阴影衰减进行加权计算,得到目标阴影衰减;
[0235]
将所述目标阴影衰减作用在所述原着色信息上,得到所述阴影着色信息。
[0236]
根据本公开的一个或多个实施例,示例6提供了示例5的方法,所述第一视野范围是以相机为中心形成的长度为m、宽度为n的范围,所述第二视野范围是以相机为中心形成的长度为m’、宽度为n’的范围,且m’《m,n’《n;所述预设插值函数被构造为:
[0237]
如果x小于min,则返回第一权值为0;
[0238]
如果x大于max,则返回第一权值为1;
[0239]
如果x∈[min,max],则返回第一权值为大于0且小于1的值;
[0240]
其中,x为所述待渲染地形点与相机在长度方向上的距离,且min《m’,m’《max《m;或者,x为所述待渲染地形点与相机在宽度方向上的距离,且min《n’,n’《max《n;
[0241]
所述根据预设插值函数确定所述待渲染地形点对应的权值信息,包括:
[0242]
根据所述待渲染地形点的位置和所述预设插值函数确定第一权值;
[0243]
根据所述第一权值计算出第二权值;其中,所述第一权值为所述第一阴影衰减对应的权值,所述第二权值为所述第二阴影衰减对应的权值。
[0244]
根据本公开的一个或多个实施例,示例7提供了示例5的方法,还包括:
[0245]
将所述阴影深度图的采样模式配置为:当从所述阴影深度图中进行采样的位置超出所述阴影深度图所表示的第二视野范围时,从离所述采样的位置最近的位置进行采样。
[0246]
根据本公开的一个或多个实施例,示例8提供了示例2的方法,所述将位于所述第一视野范围内的每个目标地形块在所述目标时段的阴影高度图拷贝到采样高度图上,包括:
[0247]
当检测到相机移动时,确定随相机移动所产生的被淘汰地形块和在所述第一视野范围内产生的新出现地形块;
[0248]
删除所述采样高度图中的被淘汰地形块对应的阴影高度图,保持所述采样高度图中的剩余地形块对应的阴影高度图不变,将新出现地形块对应的阴影高度图拷贝到所述被淘汰地形块的阴影高度图对应的位置。
[0249]
根据本公开的一个或多个实施例,示例9提供了一种游戏文件打包方法,包括:
[0250]
对游戏场景中的地形进行分块,得到多个地形块;
[0251]
根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;
[0252]
分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;
[0253]
将每个地形块对应的视频数据打包到游戏文件中。
[0254]
根据本公开的一个或多个实施例,示例10提供了示例9的方法,所述根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图,包括:
[0255]
针对每个地形块,分别执行如下操作:
[0256]
根据每个时段对应的光源位置,分别计算所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,得到每个地形块对应的原始高度图,所述原始高度图存储所述地形块上每个地形点的最高高度;
[0257]
对所述原始高度图中的每个最高高度分别进行第一指数运算,以将所述最高高度转换为指数高度,获得中间高度图,所述中间高度图存储所述地形块上每个地形点的指数高度;
[0258]
对每个时段对应的所述中间高度图进行滤波,得到所述地形块在每个时段对应的阴影高度图。
[0259]
根据本公开的一个或多个实施例,示例11提供了示例10的方法,所述对每个时段
对应的所述中间高度图进行滤波,得到所述地形块在每个时段对应的阴影高度图,包括:
[0260]
对所述中间高度图中的每个指数高度进行如下滤波操作w
·
f(h0):
[0261][0262][0263]
其中,为所述中间高度图中当前滤波的指数高度,n为参与当前滤波的其他指数高度的数目,为n个其他指数高度中的第i个指数高度,c为常量系数,w0为当前滤波的指数高度对应的滤波权重,wi为第i个指数高度对应的滤波权重;
[0264]
根据每个指数高度的滤波结果得到阴影高度图,所述阴影高度图存储对所述地形块上每个地形点的指数高度进行滤波后得到的指数项u。
[0265]
根据本公开的一个或多个实施例,示例12提供了示例9至11中任一示例的方法,所述根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,包括:
[0266]
针对每个地形块,遍历所述地形块上的每个地形点,根据所述时段的光源位置,在所述地形点垂直方向上的预设高度范围内搜索处于阴影中的高度,获得所述地形块上的每个地形点在所述时段对应的所述最高高度。
[0267]
根据本公开的一个或多个实施例,示例13提供了一种阴影渲染装置,包括:
[0268]
视频获取模块,用于确定游戏内时间所对应的目标时段,从游戏文件获取游戏场景中位于相机的第一视野范围内的每个目标地形块对应的视频数据;其中,所述视频数据是将所述目标地形块在不同时段的所有阴影高度图进行视频压缩编码后得到的,所述阴影高度图中存储有所述目标地形块上的每个地形点对应的采样值;
[0269]
视频解码模块,用于从所述视频数据中提取对应于所述目标时段的视频帧,得到所述目标地形块在所述目标时段的阴影高度图;
[0270]
阴影渲染模块,用于从所述目标时段的阴影高度图上采样每个待渲染地形点对应的采样值,并根据所述采样值渲染所述待渲染地形点的阴影。
[0271]
根据本公开的一个或多个实施例,示例14提供了一种游戏文件打包装置,包括:
[0272]
地形分块模块,用于对游戏场景中的地形进行分块,得到多个地形块;
[0273]
高度图计算模块,用于根据每个时段对应的光源位置,分别计算每个所述地形块上的每个地形点在所述时段垂直方向上处于阴影中的最高高度,获得每个地形块在每个时段对应的阴影高度图;
[0274]
视频编码模块,用于分别对每个地形块在不同时段的所有阴影高度图进行视频压缩编码,得到每个地形块对应的视频数据;
[0275]
视频打包模块,用于将每个地形块对应的视频数据打包到游戏文件中。
[0276]
根据本公开的一个或多个实施例,示例15提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现示例1-12中的任一示例的方法。
[0277]
根据本公开的一个或多个实施例,示例16提供了一种电子设备,包括:
[0278]
存储装置,其上存储有计算机程序;
[0279]
处理装置,用于执行所述存储装置中的所述计算机程序,以实现示例1-12中的任一示例的方法。
[0280]
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
[0281]
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
[0282]
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1