游戏场景生成方法、装置、计算机设备及可读存储介质转让专利

申请号 : CN202110735353.6

文献号 : CN113470169B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张凌云

申请人 : 完美世界(北京)软件科技发展有限公司

摘要 :

本申请公开了一种游戏场景生成方法、装置、计算机设备及可读存储介质,涉及图像处理技术领域,根据场景高度图以及模型局域面准确判断实体模型表面是否发生遮挡以及需要覆盖元素的范围,进而添加相应的场景元素,无需制作大量贴图,提升场景的生成效率,便捷的得出正确的游戏场景,提升生成的游戏场景的真实感。所述方法包括:生成原始游戏场景的场景高度图;为原始游戏场景中每个场景模型创建至少一个模型局域面;基于场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元素,形成至少一个元素区域;确定多个元素区域的元素效果参数,将元素效果参数插值写入多个元素区域,生成烘焙有目标场景元素的目标游戏场景。

权利要求 :

1.一种游戏场景生成方法,其特征在于,包括:生成原始游戏场景的场景高度图,所述场景高度图描述了多个场景模型在所述原始游戏场景中的高低关系;

为所述原始游戏场景中每个场景模型创建至少一个模型局域面;

基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域;

确定多个元素区域的元素效果参数,将所述元素效果参数插值写入所述多个元素区域,生成烘焙有所述目标场景元素的目标游戏场景;

其中,所述生成原始游戏场景的场景高度图,包括:按照预设划分尺寸,将所述原始游戏场景划分为多个场景区块;对于所述多个场景区块中每个场景区块,对所述场景区块进行碰撞检测,确定所述场景区块在所述原始游戏场景中的多个目标碰撞体,查询所述多个目标碰撞体在所述多个场景区块中所在的多个目标场景区块;在所述多个目标场景区块中确定高度最大的第一目标场景区块和高度最小的第二目标场景区块;将所述第一目标场景区块划分为预设数目的区块单元,在所述预设数目的区块单元中确定高度最大的目标区块单元;将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的高度参数;基于所述多个场景区块对应的高度参数对所述多个场景模型进行烘焙,生成所述原始游戏场景的场景高度图。

2.根据权利要求1所述的方法,其特征在于,所述将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的高度参数,包括:当所述比对结果指示所述目标区块单元的高度小于所述预设高度时,计算所述第一目标场景区块的高度与所述第二目标场景区块的高度的第一差值,按照所述第一差值生成所述高度参数;

当所述比对结果指示所述目标区块单元的高度大于等于所述预设高度时,继续将所述目标区块单元划分为所述预设数目的次级区块单元,并判断所述预设数目的次级区块单元中高度最高的次级区块单元的高度是否小于所述预设高度以及对所述高度最高的次级区块单元进行划分,直至确定高度小于所述预设高度的指定单元,计算所述指定单元的单元高度与所述第二目标场景区块的高度的第三差值,按照所述第三差值生成所述高度参数。

3.根据权利要求1所述的方法,其特征在于,所述为所述原始游戏场景中每个场景模型创建至少一个模型局域面,包括:

对于所述原始游戏场景中每个场景模型,获取至少一个局域面创建参数,所述局域面创建参数指示了为场景模型创建的模型局域面的方向、角度和面积;

按照所述至少一个局域面创建参数,在所述场景模型的顶部创建所述至少一个模型局域面;

重复执行模型局域面的创建过程,分别为所述每个场景模型创建所述至少一个模型局域面。

4.根据权利要求1所述的方法,其特征在于,所述基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域,包括:

对于所述多个场景模型中每个场景模型,在所述场景模型的至少一个模型局域面上构建所述目标场景元素;

模拟构建的所述目标场景元素按照所述至少一个模型局域面的法线方向向所述场景模型发射,控制所述目标场景元素命中所述场景模型,形成至少一个初始区域;

查询所述至少一个初始区域在所述场景高度图中所属的指定场景区块;

在所述场景高度图中将所述指定场景区块的区块尺寸增加至预设区块尺寸,检测所述至少一个初始区域与增加尺寸后的所述指定场景区块的采样结果;

按照所述采样结果,在所述至少一个初始区域中确定被遮挡的部分区域,在所述至少一个初始区域中将所述部分区域中渲染的所述目标场景元素清除,得到所述至少一个元素区域。

5.根据权利要求1所述的方法,其特征在于,所述确定多个元素区域的元素效果参数,包括:

对于所述多个元素区域中每个元素区域,确定所述元素区域所覆盖的目标场景模型,查询所述目标场景模型的表面法线与空间纵轴之间的角度差;

对所述元素区域的区域顶部参数、区域底部参数以及所述角度差进行计算,输出所述元素区域的影响程度参数;

确定所述角度差对应的区域范围,对所述角度差以及所述区域范围进行计算,输出所述元素区域的元素覆盖范围;

对所述影响程度参数、所述元素覆盖范围以及所述目标场景元素的元素颜色数据进行计算,得到元素厚度参数;

对所述影响程度参数、所述元素覆盖范围以及所述元素厚度参数进行乘积计算,得到乘积结果,并计算所述乘积结果与预设系数之间的乘积作为所述元素区域的元素效果参数;

分别为所述多个元素区域中每个元素区域计算元素效果参数,得到所述多个元素区域的元素效果参数。

6.根据权利要求1所述的方法,其特征在于,所述方法还包括:对所述目标游戏场景中的间接光进行拆分,得到反射系数以及光照系数,确定与所述目标场景元素相关的场景天气的天气颜色数据,计算所述天气颜色数据与所述反射系数的第一乘积,计算所述目标场景元素的元素颜色数据与所述光照系数的第二乘积,并计算所述第一乘积与第二乘积的和值,按照所述和值为所述目标游戏场景渲染场景光照;或,确定所述多个元素区域的影响程度参数,按照所述影响程度参数对所述间接光进行拟合,得到指定色彩亮度,将所述指定色彩亮度插值渲染至所述目标游戏场景。

7.一种游戏场景生成装置,其特征在于,包括:第一生成模块,用于生成原始游戏场景的场景高度图,所述场景高度图描述了多个场景模型在所述原始游戏场景中的高低关系;

创建模块,用于为所述原始游戏场景中每个场景模型创建至少一个模型局域面;

添加模块,用于基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域;

第二生成模块,用于确定多个元素区域的元素效果参数,将所述元素效果参数插值写入所述多个元素区域,生成烘焙有所述目标场景元素的目标游戏场景;

其中,第一生成模块具体用于按照预设划分尺寸,将所述原始游戏场景划分为多个场景区块;对于所述多个场景区块中每个场景区块,对所述场景区块进行碰撞检测,确定所述场景区块在所述原始游戏场景中的多个目标碰撞体,查询所述多个目标碰撞体在所述多个场景区块中所在的多个目标场景区块;在所述多个目标场景区块中确定高度最大的第一目标场景区块和高度最小的第二目标场景区块;将所述第一目标场景区块划分为预设数目的区块单元,在所述预设数目的区块单元中确定高度最大的目标区块单元;将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的高度参数;基于所述多个场景区块对应的高度参数对所述多个场景模型进行烘焙,生成所述原始游戏场景的场景高度图。

8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。

9.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。

说明书 :

游戏场景生成方法、装置、计算机设备及可读存储介质

技术领域

[0001] 本申请涉及图像处理技术领域,特别是涉及一种游戏场景生成方法、装置、计算机设备及可读存储介质。

背景技术

[0002] 近年来,网络游戏成为人们生活中必不可少的一部分。而随着图像处理技术的飞速发展,无论是游戏的开发人员还是玩家,对于游戏场景的要求越来越高,因此,为了提升
游戏画面品质、增强游戏的代入感,生成更加真实的游戏场景已经成为游戏设计过程中的
关键点。
[0003] 相关技术中,游戏中会涉及到一些积雪场景,在生成积雪场景时,需要通过美术作图的方式制作一些表征积雪的贴图,将这些贴图覆盖在场景的实体模型上,达到模型表面
覆盖积雪的效果。
[0004] 在实现本申请的过程中,申请人发现相关技术至少存在以下问题:
[0005] 游戏场景中有些实体模型之间存在遮挡关系,比如大树会遮挡住一部分地面,确定遮挡关系时需要通过射线检测实现,而模型无法正确透过射线,难以渲染出正确的游戏
场景,游戏场景缺乏真实感。

发明内容

[0006] 有鉴于此,本申请提供了一种游戏场景生成方法、装置、计算机设备及可读存储介质,主要目的在于解决目前难以渲染出正确的游戏场景,游戏场景缺乏真实感的问题。
[0007] 依据本申请第一方面,提供了一种游戏场景生成方法,该方法包括:
[0008] 生成原始游戏场景的场景高度图,所述场景高度图描述了所述多个场景模型在所述原始游戏场景中的高低关系;
[0009] 为所述原始游戏场景中每个场景模型创建至少一个模型局域面;
[0010] 基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域;
[0011] 确定所述多个元素区域的元素效果参数,将所述元素效果参数插值写入所述多个元素区域,生成烘焙有所述目标场景元素的目标游戏场景。
[0012] 可选地,所述生成原始游戏场景的场景高度图,包括:
[0013] 按照预设划分尺寸,将所述原始游戏场景划分为多个场景区块;
[0014] 在所述原始游戏场景中对所述多个场景区块中每个场景区块进行碰撞检测,生成所述每个场景区块的高度参数;
[0015] 基于所述多个场景区块对应的高度参数对所述多个场景模型进行烘焙,生成所述原始游戏场景的场景高度图。
[0016] 可选地,所述在所述原始游戏场景中对所述多个场景区块中每个场景区块进行碰撞检测,生成所述每个场景区块的高度参数,包括:
[0017] 对于所述多个场景区块中每个场景区块,对所述场景区块进行碰撞检测,确定所述场景区块在所述原始游戏场景中的多个目标碰撞体,查询所述多个目标碰撞体在所述多
个场景区块中所在的多个目标场景区块;
[0018] 在所述多个目标场景区块中确定第一目标场景区块和第二目标场景区块,所述第一目标场景区块的高度是所述多个目标场景区块中最大的,所述第二目标场景区块的高度
是所述多个目标场景区块中最小的;
[0019] 将所述第一目标场景区块划分为预设数目的区块单元,在所述预设数目的区块单元中确定目标区块单元,所述目标区块单元的高度是所述预设数目的区块单元中最大的;
[0020] 将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的高度参数;
[0021] 重复执行上述生成高度参数的过程,分别为所述每个场景区块生成高度参数。
[0022] 可选地,所述将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的高度参数,包括:
[0023] 当所述比对结果指示所述目标区块单元的高度小于所述预设高度时,计算所述第一目标区块的高度与所述第二目标区块的高度的第一差值,按照所述第一差值生成所述高
度参数;
[0024] 当所述比对结果指示所述目标区块单元的高度大于等于所述预设高度时,继续将所述目标区块单元划分为所述预设数目的次级区块单元,并判断所述预设数目的次级区块
单元中高度最高的次级区块单元的高度是否小于所述预设高度以及对所述高度最高的次
级区块单元进行划分,直至确定高度小于所述预设高度的指定单元,计算所述指定单元的
单元高度与所述第二目标区块的高度的第三差值,按照所述第三差值生成所述高度参数。
[0025] 可选地,所述为所述原始游戏场景中每个场景模型创建至少一个模型局域面,包括:
[0026] 对于所述原始游戏场景中每个场景模型,获取至少一个局域面创建参数,所述局域面创建参数指示了为场景模型创建的模型局域面的方向、角度和面积;
[0027] 按照所述至少一个局域面创建参数,在所述场景模型的顶部创建所述至少一个模型局域面;
[0028] 重复执行模型局域面的创建过程,分别为所述每个场景模型创建所述至少一个模型局域面。
[0029] 可选地,所述基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域,包括:
[0030] 对于所述多个场景模型中每个场景模型,在所述场景模型的至少一个模型局域面上构建所述目标场景元素;
[0031] 模拟构建的所述目标场景元素按照所述至少一个模型局域面的法线方向向所述场景模型发射,控制所述目标场景元素命中所述场景模型,形成至少一个初始区域;
[0032] 查询所述至少一个初始区域在所述场景高度图中所属的指定场景区块;
[0033] 在所述场景高度图中将所述指定场景区块的区块尺寸增加至预设区块尺寸,检测所述至少一个初始区域与增加尺寸后的所述指定场景区块的采样结果;
[0034] 按照所述采样结果,在所述至少一个初始区域中确定被遮挡的部分区域,在所述至少一个初始区域中将所述部分区域中渲染的所述目标场景元素清除,得到所述至少一个
元素区域。
[0035] 可选地,所述确定所述多个元素区域的元素效果参数,包括:
[0036] 对于所述多个元素区域中每个元素区域,确定所述元素区域所覆盖的目标场景模型,查询所述目标场景模型的表面法线与空间纵轴之间的角度差;
[0037] 对所述元素区域的区域顶部参数、区域底部参数以及所述角度差进行计算,输出所述元素区域的影响程度参数;
[0038] 确定所述角度差对应的区域范围,对所述角度差以及所述区域范围进行计算,输出所述元素区域的元素覆盖范围;
[0039] 对所述影响程度参数、所述元素覆盖范围以及所述目标场景元素的元素颜色数据进行计算,得到元素厚度参数;
[0040] 对所述影响程度参数、所述元素覆盖范围以及所述元素厚度参数进行乘积计算,得到乘积结果,并计算所述乘积结果与预设系数之间的乘积作为所述元素区域的元素效果
参数;
[0041] 分别为所述多个元素区域中每个元素区域计算元素效果参数,得到所述多个元素区域的元素效果参数。
[0042] 可选地,所述方法还包括:
[0043] 对所述目标游戏场景中的间接光进行拆分,得到反射系数以及光照系数,确定与所述目标场景元素相关的场景天气的天气颜色数据,计算所述天气颜色数据与所述反射系
数的第一乘积,计算所述目标场景元素的元素颜色数据与所述光照系数的第二乘积,并计
算所述第一乘积与第二乘积的和值,按照所述和值为所述目标游戏场景渲染场景光照;或,
[0044] 确定所述多个元素区域的影响程度参数,按照所述影响程度参数对所述间接光进行拟合,得到指定色彩亮度,将所述指定色彩亮度插值渲染至所述目标游戏场景。
[0045] 依据本申请第二方面,提供了一种游戏场景生成装置,该装置包括:
[0046] 第一生成模块,用于生成原始游戏场景的场景高度图,所述场景高度图描述了所述多个场景模型在所述原始游戏场景中的高低关系;
[0047] 创建模块,用于为所述原始游戏场景中每个场景模型创建至少一个模型局域面;
[0048] 添加模块,用于基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域;
[0049] 第二生成模块,用于确定所述多个元素区域的元素效果参数,将所述元素效果参数插值写入所述多个元素区域,生成烘焙有所述目标场景元素的目标游戏场景。
[0050] 可选地,所述第一生成模块,用于按照预设划分尺寸,将所述原始游戏场景划分为多个场景区块;在所述原始游戏场景中对所述多个场景区块中每个场景区块进行碰撞检
测,生成所述每个场景区块的高度参数;基于所述多个场景区块对应的高度参数对所述多
个场景模型进行烘焙,生成所述原始游戏场景的场景高度图。
[0051] 可选地,所述第一生成模块,用于对于所述多个场景区块中每个场景区块,对所述场景区块进行碰撞检测,确定所述场景区块在所述原始游戏场景中的多个目标碰撞体,查
询所述多个目标碰撞体在所述多个场景区块中所在的多个目标场景区块;在所述多个目标
场景区块中确定第一目标场景区块和第二目标场景区块,所述第一目标场景区块的高度是
所述多个目标场景区块中最大的,所述第二目标场景区块的高度是所述多个目标场景区块
中最小的;将所述第一目标场景区块划分为预设数目的区块单元,在所述预设数目的区块
单元中确定目标区块单元,所述目标区块单元的高度是所述预设数目的区块单元中最大
的;将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所述场景区块的
高度参数;重复执行上述生成高度参数的过程,分别为所述每个场景区块生成高度参数。
[0052] 可选地,所述第一生成模块,用于当所述比对结果指示所述目标区块单元的高度小于所述预设高度时,计算所述第一目标区块的高度与所述第二目标区块的高度的第一差
值,按照所述第一差值生成所述高度参数;当所述比对结果指示所述目标区块单元的高度
大于等于所述预设高度时,继续将所述目标区块单元划分为所述预设数目的次级区块单
元,并判断所述预设数目的次级区块单元中高度最高的次级区块单元的高度是否小于所述
预设高度以及对所述高度最高的次级区块单元进行划分,直至确定高度小于所述预设高度
的指定单元,计算所述指定单元的单元高度与所述第二目标区块的高度的第三差值,按照
所述第三差值生成所述高度参数。
[0053] 可选地,所述创建模块,用于对于所述原始游戏场景中每个场景模型,获取至少一个局域面创建参数,所述局域面创建参数指示了为场景模型创建的模型局域面的方向、角
度和面积;按照所述至少一个局域面创建参数,在所述场景模型的顶部创建所述至少一个
模型局域面;重复执行模型局域面的创建过程,分别为所述每个场景模型创建所述至少一
个模型局域面。
[0054] 可选地,所述添加模块,用于对于所述多个场景模型中每个场景模型,在所述场景模型的至少一个模型局域面上构建所述目标场景元素;模拟构建的所述目标场景元素按照
所述至少一个模型局域面的法线方向向所述场景模型发射,控制所述目标场景元素命中所
述场景模型,形成至少一个初始区域;查询所述至少一个初始区域在所述场景高度图中所
属的指定场景区块;在所述场景高度图中将所述指定场景区块的区块尺寸增加至预设区块
尺寸,检测所述至少一个初始区域与增加尺寸后的所述指定场景区块的采样结果;按照所
述采样结果,在所述至少一个初始区域中确定被遮挡的部分区域,在所述至少一个初始区
域中将所述部分区域中渲染的所述目标场景元素清除,得到所述至少一个元素区域。
[0055] 可选地,所述第二生成模块,用于对于所述多个元素区域中每个元素区域,确定所述元素区域所覆盖的目标场景模型,查询所述目标场景模型的表面法线与空间纵轴之间的
角度差;对所述元素区域的区域顶部参数、区域底部参数以及所述角度差进行计算,输出所
述元素区域的影响程度参数;确定所述角度差对应的区域范围,对所述角度差以及所述区
域范围进行计算,输出所述元素区域的元素覆盖范围;对所述影响程度参数、所述元素覆盖
范围以及所述目标场景元素的元素颜色数据进行计算,得到元素厚度参数;对所述影响程
度参数、所述元素覆盖范围以及所述元素厚度参数进行乘积计算,得到乘积结果,并计算所
述乘积结果与预设系数之间的乘积作为所述元素区域的元素效果参数;分别为所述多个元
素区域中每个元素区域计算元素效果参数,得到所述多个元素区域的元素效果参数。
[0056] 可选地,所述装置还包括:
[0057] 渲染模块,用于对所述目标游戏场景中的间接光进行拆分,得到反射系数以及光照系数,确定与所述目标场景元素相关的场景天气的天气颜色数据,计算所述天气颜色数
据与所述反射系数的第一乘积,计算所述目标场景元素的元素颜色数据与所述光照系数的
第二乘积,并计算所述第一乘积与第二乘积的和值,按照所述和值为所述目标游戏场景添
加场景光照;或,确定所述多个元素区域的影响程度参数,按照所述影响程度参数对所述间
接光进行拟合,得到指定色彩亮度,将所述指定色彩亮度插值写入所述目标游戏场景。
[0058] 依据本申请第三方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面中任一项所述方
法的步骤。
[0059] 依据本申请第四方面,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面中任一项所述的方法的步骤。
[0060] 借由上述技术方案,本申请提供的一种游戏场景生成方法、装置、计算机设备及可读存储介质,本申请生成描述了多个场景模型在原始游戏场景中的高低关系的场景高度
图,并为原始游戏场景中每个场景模型创建至少一个模型局域面,进而基于场景高度图以
及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元素,形成至少一
个元素区域,确定多个元素区域的元素效果参数,将元素效果参数插值写入多个元素区域,
生成烘焙有目标场景元素的目标游戏场景,使得根据场景高度图以及模型局域面准确判断
实体模型表面是否发生遮挡以及需要覆盖元素的范围,可以直接按照场景高度图以及模型
局域面的指示直接向实体模型添加相应的场景元素,无需制作大量贴图,不仅提升了场景
的生成效率,便捷的得出正确的游戏场景,而且还能够提升生成的游戏场景的真实感。
[0061] 上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够
更明显易懂,以下特举本申请的具体实施方式。

附图说明

[0062] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请
的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0063] 图1示出了本申请实施例提供的一种游戏场景生成方法流程示意图;
[0064] 图2A示出了本申请实施例提供的一种游戏场景生成方法流程示意图;
[0065] 图2B示出了本申请实施例提供的一种游戏场景生成方法的示意图;
[0066] 图2C示出了本申请实施例提供的一种游戏场景生成方法的示意图;
[0067] 图3A示出了本申请实施例提供的一种游戏场景生成装置的结构示意图;
[0068] 图3B示出了本申请实施例提供的一种游戏场景生成装置的结构示意图;
[0069] 图4示出了本申请实施例提供的一种计算机设备的装置结构示意图。

具体实施方式

[0070] 下面将参照附图更详细地描述本申请的示例性实施例。虽然附图中显示了本申请的示例性实施例,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施例
所限制。相反,提供这些实施例是为了能够更透彻地理解本申请,并且能够将本申请的范围
完整的传达给本领域的技术人员。
[0071] 本申请实施例提供了一种游戏场景生成方法,如图1所示,该方法包括:
[0072] 101、生成原始游戏场景的场景高度图,场景高度图描述了多个场景模型在原始游戏场景中的高低关系。
[0073] 102、为原始游戏场景中每个场景模型创建至少一个模型局域面。
[0074] 103、基于场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元素,形成至少一个元素区域。
[0075] 104、确定多个元素区域的元素效果参数,将元素效果参数插值写入多个元素区域,生成烘焙有目标场景元素的目标游戏场景。
[0076] 本申请实施例提供的方法,生成描述了多个场景模型在原始游戏场景中的高低关系的场景高度图,并为原始游戏场景中每个场景模型创建至少一个模型局域面,进而基于
场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元
素,形成至少一个元素区域,确定多个元素区域的元素效果参数,将元素效果参数插值写入
多个元素区域,生成烘焙有目标场景元素的目标游戏场景,使得根据场景高度图以及模型
局域面准确判断实体模型表面是否发生遮挡以及需要覆盖元素的范围,可以直接按照场景
高度图以及模型局域面的指示直接向实体模型添加相应的场景元素,无需制作大量贴图,
不仅提升了场景的生成效率,便捷的得出正确的游戏场景,而且还能够提升生成的游戏场
景的真实感。
[0077] 本申请实施例提供了一种游戏场景生成方法,如图2A所示,该方法包括:
[0078] 201、生成原始游戏场景的场景高度图。
[0079] 近年来,游戏场景的设计越来越逼真,游戏中很多的室外场景会发生一些天气的变化,比如雪天、雨天等等,从而使用户在游戏中的体验更加真实。其中,在渲染雪天的室外
场景时,为了达到物体表面覆盖积雪的效果,通常需要对游戏场景进行美术作图,制作一些
用于表征物体表面积雪的贴图,将这些贴图覆盖在游戏场景的实体模型上,达到模型表面
覆盖积雪的效果。但是,申请人认识到,游戏场景中有些实体模型之间存在遮挡关系,比如
大树会遮挡住一部分地面,确定遮挡关系时需要通过射线检测实现,而模型无法正确透过
射线,只能对模型进行函数的拟合,难以渲染出正确的游戏场景,游戏场景缺乏真实感。因
此,本申请提出了一种游戏场景生成方法,生成描述了多个场景模型在原始游戏场景中的
高低关系的场景高度图,并为原始游戏场景中每个场景模型创建至少一个模型局域面,进
而基于场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场
景元素,形成至少一个元素区域,确定多个元素区域的元素效果参数,将元素效果参数插值
写入多个元素区域,生成渲染有目标场景元素的目标游戏场景,使得根据场景高度图以及
模型局域面准确判断实体模型表面是否发生遮挡以及需要覆盖元素的范围,可以直接按照
场景高度图以及模型局域面的指示直接向实体模型添加相应的场景元素,无需制作大量贴
图,不仅提升了场景的生成效率,便捷的渲染出正确的游戏场景,而且还能够提升生成的游
戏场景的真实感。
[0080] 而为了实现本申请的方案,首先需要生成原始游戏场景的场景高度图,该场景高度图也即描述了多个场景模型在原始游戏场景中的高低关系,生成场景高度图的过程具体
参见下述步骤一至步骤三:
[0081] 步骤一、按照预设划分尺寸,将原始游戏场景划分为多个场景区块。
[0082] 其中,预设划分尺寸可以是场景区块的高度,例如预设划分尺寸可以为2000米,这样,将原始游戏场景划分为2000高度的场景区块即可。假设原始游戏场景中有两个实体模
型A和B,预设划分尺寸为2000米,则以该原始游戏场景的世界坐标点0位起点,将原始游戏
场景划分为2000米高度的10个场景区块。
[0083] 步骤二、在原始游戏场景中对多个场景区块中每个场景区块进行碰撞检测,生成每个场景区块的高度参数。
[0084] 以多个场景区块中任一场景区块为例说明高度参数的生成过程:对于多个场景区块中每个场景区块,首先,对场景区块进行碰撞检测,确定场景区块在原始游戏场景中的多
个目标碰撞体。具体地,可以调用Physics.OverlayBox函数查询场景区块在原始游戏场景
中是否存在碰撞体。
[0085] 随后,查询多个目标碰撞体在多个场景区块中所在的多个目标场景区块,并在多个目标场景区块中确定第一目标场景区块和第二目标场景区块。其中,第一目标场景区块
的高度是多个目标场景区块中最大的,第二目标场景区块的高度是多个目标场景区块中最
小的,也即在多个目标场景区块中确定最高一场景区块以及最低一场景区块。
[0086] 接下来,将第一目标场景区块划分为预设数目的区块单元,在预设数目的区块单元中确定目标区块单元,目标区块单元的高度是预设数目的区块单元中最大的。也即将最
高一场景区块继续划分,比如预设数目可以为10,则继续将最高一场景区块划分为10块区
块单元,在这10块区块单元中确定最高一区块单元作为目标区块单元。
[0087] 最后,将目标区块单元的高度与预设高度进行比对,根据比对结果,生成场景区块的高度参数。具体地,当比对结果指示目标区块单元的高度小于预设高度时,表示目标区块
单元的高度已经低于预设高度了,因此,返回最后查询的第一目标区块的区块高度,计算第
一目标区块的高度与第二目标区块的高度的第一差值,按照第一差值生成高度参数。相反,
当比对结果指示目标区块单元的高度大于等于预设高度时,表示目标区块单元的高度仍旧
高于预设高度,需要继续对该目标区块单元进行划分,因此,继续将目标区块单元划分为预
设数目的次级区块单元,并判断预设数目的次级区块单元中高度最高的次级区块单元的高
度是否小于预设高度以及对高度最高的次级区块单元进行划分,直至确定高度小于预设高
度的指定单元,计算指定单元的单元高度与第二目标区块的高度的第三差值,按照第三差
值生成高度参数。也即循环进行划分,直到划分找到高度低于预设高度的单元,进而生成高
度参数。
[0088] 通过重复执行上述生成高度参数的过程,便可以分别为每个场景区块生成高度参数。
[0089] 步骤三、基于多个场景区块对应的高度参数对多个场景模型进行烘焙,生成原始游戏场景的场景高度图。
[0090] 在确定了每个场景区块的高度参数后,便可以基于多个场景区块对应的高度参数对多个场景模型进行烘焙,生成原始游戏场景的场景高度图,实现了对场景分块并对场景
区块使用碰撞检测生成高度图的过程,进而在后续利用该场景高度图处理原始游戏场景中
实体模型之间的遮挡关系。
[0091] 202、为原始游戏场景中每个场景模型创建至少一个模型局域面。
[0092] 在本申请实施例中,由于有些场景模型存在自遮挡关系,比如有些建筑是经过精心设计的,其房顶采用多个倾斜的面构建的,面与面之间实际上就存在一些遮挡的关系,这
也便是场景模型的自遮挡关系。这种自遮挡关系实际上也是会影响积雪、积雨等场景元素
的添加,使得有些面的场景元素堆积的较少或者基本没有堆积,因此,在本申请实施例中,
会为原始游戏场景中每个场景模型创建至少一个模型局域面,基于模型局域面烘焙场景模
型的自遮挡关系,从而判断场景模型的哪些位置需要添加场景元素,哪些位置不需要添加
场景元素。具体创建至少一个模型局域面的过程如下:
[0093] 对于原始游戏场景中每个场景模型,首先,获取至少一个局域面创建参数,局域面创建参数指示了为场景模型创建的模型局域面的方向、角度和面积。随后,按照至少一个局
域面创建参数,在场景模型的顶部创建至少一个模型局域面。通过重复执行模型局域面的
创建过程,分别为每个场景模型创建至少一个模型局域面。例如,假设至少一个局域面创建
参数指示在场景模型的顶部创建8个方向30°和垂直向下的局域面,则按照至少一个局域面
创建参数便可以在该场景模型的顶部创建如图2B所示的至少一个局域面。
[0094] 203、基于场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元素,形成至少一个元素区域。
[0095] 在本申请实施例中,在确定了用于描述模型与模型之间遮挡关系的场景高度图以及用于描述场景模型自遮挡关系的至少一个模型局域面后,可以开始基于场景高度图以及
每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元素,形成至少一个
元素区域。
[0096] 具体地,对于多个场景模型中每个场景模型,首先,在场景模型的至少一个模型局域面上构建目标场景元素,假设目标场景元素为雪粒子,则在至少一个模型局域面上构建
雪粒子。随后,模拟构建的目标场景元素按照至少一个模型局域面的法线方向向场景模型
发射,控制目标场景元素命中场景模型,形成至少一个初始区域。需要说明的是,由于场景
模型中距离天空越近的顶点或者区域的积雪或者积雨会多于其他距离较远的顶点或者区
域,因此,在模拟向至少一个局域面发射目标场景元素时,可以检测场景模型每个顶点与局
域面的距离,按照距离控制添加的目标场景元素的数量。
[0097] 接下来,查询至少一个初始区域在场景高度图中所属的指定场景区块,在场景高度图中将指定场景区块的区块尺寸增加至预设区块尺寸,检测至少一个初始区域与增加尺
寸后的指定场景区块的采样结果。之所以将指定场景区块的区块尺寸增加,是因为当目标
场景元素的粒子处于场景区块的交界处时,会需要多次采样不同的高度图来取得模型与模
型之间正确的遮挡关系,所以,将指定场景区块的区块尺寸增加,将指定场景区块外拓。这
样,当指定场景区块中的场景模型超出该指定场景区块时,可以直接切换区块、高度图,保
证同时只需要采样一张图片便可以得到模型与模型之间正确的遮挡关系。具体参见图2C,
虚线代表场景区块A和B未进行区块尺寸增加时的真实划分,则尺寸增加后的B的左边界便
如图所示。最后,由于基于高度图的采样结果确定的是场景模型之间的遮挡关系,而上述按
照局域面构建的初始区域实际上并未考虑到场景模型之间的遮挡关系,因此,需要按照采
样结果,在至少一个初始区域中确定被遮挡的部分区域,在至少一个初始区域中将部分区
域中渲染的目标场景元素清除,得到至少一个元素区域。也即将由于场景模型之间的相对
关系被遮挡的面的目标场景元素清除,避免该面上产生元素的堆积,保证符合实际的自然
情况。
[0098] 204、确定多个元素区域的元素效果参数。
[0099] 在本申请实施例中,确定了多个元素区域后,由于游戏场景中每个位置的元素深度、厚度、范围等都是有区别的,比如越接近游戏场景天空的区域的元素堆积效果越明显,
游戏场景底部的堆积效果大于顶部的堆积效果等等,因此,需要确定多个元素区域的元素
效果参数,并在后续将元素效果参数插值到相应的元素区域。具体确定元素效果参数的过
程如下:
[0100] 对于多个元素区域中每个元素区域,首先,确定元素区域所覆盖的目标场景模型,查询目标场景模型的表面法线与空间纵轴之间的角度差,对元素区域的区域顶部参数、区
域底部参数以及角度差进行计算,输出元素区域的影响程度参数。具体地,可以采用代码
half level=_SnowProgress*lerp(_SnowTopAmount,_SnowBottomAmount,saturate
(normalWS.y))输出影响程度参数。其中,half level表示影响程度参数,SnowTopAmount表
示区域顶部参数,SnowBottomAmount表示区域底部参数,saturate(normalWS.y)表示角度
差。
[0101] 随后,确定角度差对应的区域范围,对角度差以及区域范围进行计算,输出元素区域的元素覆盖范围。具体地,可以采用代码half snowRange=saturate((normalWS.y+_
SnowRange)输出元素覆盖范围。其中,half snowRange表示元素覆盖范围,normalWS.y表示
角度差,SnowRange表示区域范围,从而基于SnowRange变量控制normalWS.y对元素堆积范
围的影响。
[0102] 接下来,对影响程度参数、元素覆盖范围以及目标场景元素的元素颜色数据进行计算,得到元素厚度参数。具体地,可以采用代码half snowHeight=lerp(0.0,1.0,
height*colorMask*heightMask))输出元素厚度参数。其中,half snowHeight表示元素厚
度参数,height表示影响程度参数,colorMask表示元素颜色数据,heightMask表示元素覆
盖范围。
[0103] 最后,对影响程度参数、元素覆盖范围以及元素厚度参数进行乘积计算,得到乘积结果,并计算乘积结果与预设系数之间的乘积作为元素区域的元素效果参数。具体地,可以
采用代码half lerpValue=snowRange*level*5.0*snowHeight输出元素效果参数。其中,
half lerpValue表示元素效果参数,snowRange表示元素覆盖范围,level表示影响程度参
数,snowHeight表示元素厚度参数,5.0表示预设系数。
[0104] 通过重复执行上述过程,便可以分别为多个元素区域中每个元素区域计算元素效果参数,得到多个元素区域的元素效果参数。
[0105] 205、将元素效果参数插值写入多个元素区域,得到烘焙有目标场景元素的目标游戏场景。
[0106] 在本申请实施例中,确定了元素效果参数后,将元素效果参数插值写入多个元素区域,便可以得到烘焙有目标场景元素的目标游戏场景。其中,可以在确定元素效果参数插
值后,在诸如Substance Desiner(一种提供元素烘焙效果的资源库)元素资源库中按照元
素效果参数生成所需要的的Albedo(反射率)、Smoothness(平滑度)、normal、height,将
Smoothness作为其前者的a通道,将height作为其前者的b通道,向多个元素区域对应值进
行插值。
[0107] 需要说明的是,在进行插值时,需要将游戏开发工具中的选项Metallic(金属性)插值向0.0,从而减少插值后的目标场景元素中场景模型的金属度,避免金属度过高的场景
模型失真。
[0108] 206、对目标游戏场景中的间接光进行调整。
[0109] 在本申请实施例中,由于目标场景元素是具有自身的元素颜色的,目标场景元素在目标游戏场景中堆积后,目标游戏场景中的场景模型基本都呈现目标场景元素的颜色,
目标游戏场景中的环境光此时经过堆积的目标场景元素的表面反弹后,亮度相对于以前没
有渲染的表面明显要有提升,所以要对目标游戏场景中的间接光进行调整,使得目标游戏
场景的环境光提亮。具体地,可以采用下述两种方式进行间接光的调整:
[0110] 第一种方式是,对目标游戏场景中的间接光进行拆分,得到反射系数以及光照系数,确定与目标场景元素相关的场景天气的天气颜色数据,计算天气颜色数据与反射系数
的第一乘积,计算目标场景元素的元素颜色数据与光照系数的第二乘积,并计算第一乘积
与第二乘积的和值,按照和值为目标游戏场景渲染场景光照。也即是运行时实时变化的环
境光,在游戏开发工具中将Environment Lighting(环境光)设置为Gradient(梯度),并且
将三色设置为灰度值,这样就将间接光拆分成了环境光亮度值*反射系数+模型表面颜色*
光照系数。运行时再获取实时的天气颜色数据,计算天气颜色数据*反射系数+元素颜色数
据*光照系数作为目标间接光颜色,并用步骤204中提到的变量_SnowProgress作为插值变
量进行间接光的插值渲染即可。
[0111] 第二种方式是,确定多个元素区域的影响程度参数,按照影响程度参数对间接光进行拟合,得到指定色彩亮度,将指定色彩亮度插值渲染至目标游戏场景。也即利用Skybox
(天空盒)烘焙,得到环境光的颜色,将间接光根据目标场景元素的堆积程度插向一个指定
色彩亮度。
[0112] 本申请实施例提供的方法,生成描述了多个场景模型在原始游戏场景中的高低关系的场景高度图,并为原始游戏场景中每个场景模型创建至少一个模型局域面,进而基于
场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元
素,形成至少一个元素区域,确定多个元素区域的元素效果参数,将元素效果参数插值写入
多个元素区域,生成烘焙有目标场景元素的目标游戏场景,使得根据场景高度图以及模型
局域面准确判断实体模型表面是否发生遮挡以及需要覆盖元素的范围,可以直接按照场景
高度图以及模型局域面的指示直接向实体模型添加相应的场景元素,无需制作大量贴图,
不仅提升了场景的生成效率,便捷的得出正确的游戏场景,而且还能够提升生成的游戏场
景的真实感。
[0113] 进一步地,作为图1所述方法的具体实现,本申请实施例提供了一种游戏场景生成装置,如图3A所示,所述装置包括:第一生成模块301,创建模块302,添加模块303和第二生
成模块304。
[0114] 该第一生成模块301,用于生成原始游戏场景的场景高度图,所述场景高度图描述了所述多个场景模型在所述原始游戏场景中的高低关系;
[0115] 该创建模块302,用于为所述原始游戏场景中每个场景模型创建至少一个模型局域面;
[0116] 该添加模块303,用于基于所述场景高度图以及所述每个场景模型的至少一个模型局域面,向所述原始游戏场景添加目标场景元素,形成至少一个元素区域;
[0117] 该第二生成模块304,用于确定所述多个元素区域的元素效果参数,将所述元素效果参数插值写入所述多个元素区域,生成烘焙有所述目标场景元素的目标游戏场景。
[0118] 在具体的应用场景中,该第一生成模块301,用于按照预设划分尺寸,将所述原始游戏场景划分为多个场景区块;在所述原始游戏场景中对所述多个场景区块中每个场景区
块进行碰撞检测,生成所述每个场景区块的高度参数;基于所述多个场景区块对应的高度
参数对所述多个场景模型进行烘焙,生成所述原始游戏场景的场景高度图。
[0119] 在具体的应用场景中,该第一生成模块301,用于对于所述多个场景区块中每个场景区块,对所述场景区块进行碰撞检测,确定所述场景区块在所述原始游戏场景中的多个
目标碰撞体,查询所述多个目标碰撞体在所述多个场景区块中所在的多个目标场景区块;
在所述多个目标场景区块中确定第一目标场景区块和第二目标场景区块,所述第一目标场
景区块的高度是所述多个目标场景区块中最大的,所述第二目标场景区块的高度是所述多
个目标场景区块中最小的;将所述第一目标场景区块划分为预设数目的区块单元,在所述
预设数目的区块单元中确定目标区块单元,所述目标区块单元的高度是所述预设数目的区
块单元中最大的;将所述目标区块单元的高度与预设高度进行比对,根据比对结果,生成所
述场景区块的高度参数;重复执行上述生成高度参数的过程,分别为所述每个场景区块生
成高度参数。
[0120] 在具体的应用场景中,该第一生成模块301,用于当所述比对结果指示所述目标区块单元的高度小于所述预设高度时,计算所述第一目标区块的高度与所述第二目标区块的
高度的第一差值,按照所述第一差值生成所述高度参数;当所述比对结果指示所述目标区
块单元的高度大于等于所述预设高度时,继续将所述目标区块单元划分为所述预设数目的
次级区块单元,并判断所述预设数目的次级区块单元中高度最高的次级区块单元的高度是
否小于所述预设高度以及对所述高度最高的次级区块单元进行划分,直至确定高度小于所
述预设高度的指定单元,计算所述指定单元的单元高度与所述第二目标区块的高度的第三
差值,按照所述第三差值生成所述高度参数。
[0121] 在具体的应用场景中,该创建模块302,用于对于所述原始游戏场景中每个场景模型,获取至少一个局域面创建参数,所述局域面创建参数指示了为场景模型创建的模型局
域面的方向、角度和面积;按照所述至少一个局域面创建参数,在所述场景模型的顶部创建
所述至少一个模型局域面;重复执行模型局域面的创建过程,分别为所述每个场景模型创
建所述至少一个模型局域面。
[0122] 在具体的应用场景中,该添加模块303,用于对于所述多个场景模型中每个场景模型,在所述场景模型的至少一个模型局域面上构建所述目标场景元素;模拟构建的所述目
标场景元素按照所述至少一个模型局域面的法线方向向所述场景模型发射,控制所述目标
场景元素命中所述场景模型,形成至少一个初始区域;查询所述至少一个初始区域在所述
场景高度图中所属的指定场景区块;在所述场景高度图中将所述指定场景区块的区块尺寸
增加至预设区块尺寸,检测所述至少一个初始区域与增加尺寸后的所述指定场景区块的采
样结果;按照所述采样结果,在所述至少一个初始区域中确定被遮挡的部分区域,在所述至
少一个初始区域中将所述部分区域中渲染的所述目标场景元素清除,得到所述至少一个元
素区域。
[0123] 在具体的应用场景中,该第二生成模块304,用于对于所述多个元素区域中每个元素区域,确定所述元素区域所覆盖的目标场景模型,查询所述目标场景模型的表面法线与
空间纵轴之间的角度差;对所述元素区域的区域顶部参数、区域底部参数以及所述角度差
进行计算,输出所述元素区域的影响程度参数;确定所述角度差对应的区域范围,对所述角
度差以及所述区域范围进行计算,输出所述元素区域的元素覆盖范围;对所述影响程度参
数、所述元素覆盖范围以及所述目标场景元素的元素颜色数据进行计算,得到元素厚度参
数;对所述影响程度参数、所述元素覆盖范围以及所述元素厚度参数进行乘积计算,得到乘
积结果,并计算所述乘积结果与预设系数之间的乘积作为所述元素区域的元素效果参数;
分别为所述多个元素区域中每个元素区域计算元素效果参数,得到所述多个元素区域的元
素效果参数。
[0124] 在具体的应用场景中,如图3B所示,该装置还包括:渲染模块305。
[0125] 该渲染模块305,用于对所述目标游戏场景中的间接光进行拆分,得到反射系数以及光照系数,确定与所述目标场景元素相关的场景天气的天气颜色数据,计算所述天气颜
色数据与所述反射系数的第一乘积,计算所述目标场景元素的元素颜色数据与所述光照系
数的第二乘积,并计算所述第一乘积与第二乘积的和值,按照所述和值为所述目标游戏场
景添加场景光照;或,确定所述多个元素区域的影响程度参数,按照所述影响程度参数对所
述间接光进行拟合,得到指定色彩亮度,将所述指定色彩亮度插值写入所述目标游戏场景。
[0126] 本申请实施例提供的装置,生成描述了多个场景模型在原始游戏场景中的高低关系的场景高度图,并为原始游戏场景中每个场景模型创建至少一个模型局域面,进而基于
场景高度图以及每个场景模型的至少一个模型局域面,向原始游戏场景添加目标场景元
素,形成至少一个元素区域,确定多个元素区域的元素效果参数,将元素效果参数插值写入
多个元素区域,生成烘焙有目标场景元素的目标游戏场景,使得根据场景高度图以及模型
局域面准确判断实体模型表面是否发生遮挡以及需要覆盖元素的范围,可以直接按照场景
高度图以及模型局域面的指示直接向实体模型添加相应的场景元素,无需制作大量贴图,
不仅提升了场景的生成效率,便捷的得出正确的游戏场景,而且还能够提升生成的游戏场
景的真实感。
[0127] 需要说明的是,本申请实施例提供的一种游戏场景生成装置所涉及各功能单元的其他相应描述,可以参考图1和图2A中的对应描述,在此不再赘述。
[0128] 在示例性实施例中,参见图4,还提供了一种设备,该设备包括通信总线、处理器、存储器和通信接口,还可以包括输入输出接口和显示设备,其中,各个功能单元之间可以通
过总线完成相互间的通信。该存储器存储有计算机程序,处理器,用于执行存储器上所存放
的程序,执行上述实施例中的游戏场景生成方法。
[0129] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的游戏场景生成方法的步骤。
[0130] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本申
请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储
介质(可以是CD‑ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是
个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
[0131] 本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。
[0132] 本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装
置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0133] 上述本申请序号仅仅为了描述,不代表实施场景的优劣。
[0134] 以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。