植被对象的处理方法、装置、设备及存储介质与流程

文档序号:23619413发布日期:2021-01-12 10:29阅读:187来源:国知局
植被对象的处理方法、装置、设备及存储介质与流程

本申请实施例涉及图像处理技术领域,尤其涉及一种植被对象的处理方法、装置、设备及存储介质。



背景技术:

植被渲染是游戏渲染中非常重要的一个环节,逼真的植被动画能够还原真实世界,提升玩家的游戏体验。

草丛作为植被对象的一种,在游戏中主要起到背景装饰作用。目前,在二维2d游戏中模拟草丛时,通常需要由美术人员制作,为了体现不同草丛的差异化,绘制工作量较大,且草丛的柔性表达效果不佳。

针对上述问题,目前尚未提出有效的草丛2d渲染方案。



技术实现要素:

本申请实施例提供一种植被对象的处理方法、装置、设备及存储介质,可提高植被对象的绘制效率以及渲染效果。

第一方面,本申请实施例提供一种植被对象的处理方法,包括:

获取植被对象的基础配置参数,所述基础配置参数用于指示所述植被对象的各属性参数的区间范围或数值,所述植被对象包括多个分支;

根据所述基础配置参数以及伪随机函数,确定所述植被对象的分支数量以及每个分支的第一属性参数;

根据所述每个分支的第一属性参数确定所述每个分支中每个分支关节的第二属性参数;

根据所述多个分支的第一属性参数以及所述每个分支中至少一个分支关节的第二属性参数,渲染生成所述植被对象。

可选的,所述基础配置参数包括:

所述植被对象的分支的数量范围,分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,所述第一分支为所述植被对象的初始分支。

在本申请的一个实施例中,所述根据所述基础配置参数以及伪随机函数,确定所述植被对象的分支数量,包括:

根据所述基础配置参数中所述植被对象的分支的数量范围以及所述伪随机函数,确定所述植被对象的分支的数量。

可选的,所述每个分支的第一属性参数包括:

每个分支的位置坐标、弯曲度、倾斜角度、宽度、高度、贴图索引。

在本申请的一个实施例中,所述根据所述基础配置参数以及伪随机函数,确定所述植被对象的每个分支的第一属性参数,包括:

根据所述基础配置参数中所述第一分支的位置坐标以及所述间距值,确定除所述第一分支之外的其他分支的位置坐标;

根据所述基础配置参数中分支的弯曲度范围以及所述伪随机函数,确定所述每个分支的弯曲度;

根据所述基础配置参数中分支的倾斜角度范围以及所述伪随机函数,确定所述每个分支的倾斜角度;

根据所述基础配置参数中分支的宽度范围以及所述伪随机函数,确定所述每个分支的宽度;

根据所述基础配置参数中分支的高度范围以及所述伪随机函数,确定所述每个分支的高度;

根据所述基础配置参数中分支的贴图数以及所述伪随机函数,确定所述每个分支的贴图索引。

可选的,所述基础配置参数还包括分支关节数。

在本申请的一个实施例中,所述根据所述每个分支的第一属性参数确定所述每个分支中每个分支关节的第二属性参数,包括:

根据所述每个分支的第一属性参数以及所述分支关节数,确定所述每个分支中每个分支关节的第二属性参数。

可选的,所述每个分支关节的第二属性参数包括每个分支关节的高度、弯曲度、倾斜角度,以及每个分支关节对应的网格坐标。

在本申请的一个实施例中,所述根据所述每个分支的第一属性参数以及所述分支关节数,确定所述每个分支中每个分支关节的第二属性参数,包括:

根据所述每个分支的高度以及所述分支关节数,确定所述每个分支中每个分支关节的高度;

根据所述每个分支的弯曲度以及所述分支关节数,确定所述每个分支中每个分支关节的弯曲度。

在本申请的一个实施例中,所述根据所述每个分支的第一属性参数确定所述每个分支中每个分支关节的第二属性参数,包括:

根据所述每个分支的倾斜角度以及所述每个分支中每个分支关节的弯曲度,确定所述每个分支关节的倾斜角度;

根据所述每个分支的位置坐标、宽度,以及所述每个分支关节的高度、倾斜角度,确定每个分支关节对应的网格坐标。

可选的,所述基础配置参数还包括所述植被对象的受风面积以及最大受风角度。

在本申请的一个实施例中,所述方法还包括:

获取所述植被对象在第一方向的受风值;

根据所述受风值、所述受风面积以及所述最大受风角度,更新所述植被对象的所述每个分支的第一属性参数以及所述每个分支中每个分支关节的第二属性参数;

根据更新后的所述多个分支的第一属性参数,以及更新后的所述每个分支中至少一个分支关节的第二属性参数,渲染生成更新后的植被对象。

在本申请的一个实施例中,所述根据所述受风值、所述受风面积以及所述最大受风角度,更新所述植被对象的所述每个分支的第一属性参数以及所述每个分支中每个分支关节的第二属性参数,包括:

根据所述受风值、所述受风面积以及所述最大受风角度,更新所述植被对象的所述每个分支的弯曲度,以及所述每个分支中每个分支关节的弯曲度;

根据更新后的所述每个分支中每个分支关节的弯曲度,更新所述每个分支中每个分支关节的倾斜角度以及所述每个分支关节对应的网格坐标。

第二方面,本申请实施例提供一种植被对象的处理方法,包括:

获取植被对象群的基础配置参数,所述基础配置参数用于指示所述植被对象群的各属性参数的区间范围或数值,所述植被对象群中的每个植被对象包括多个分支;

根据所述基础配置参数以及伪随机函数,确定所述植被对象群中每个植被对象的第一属性参数以及所述每个植被对象中每个分支的第二属性参数;

根据所述每个植被对象中每个分支的第二属性参数,确定所述每个分支中每个分支关节的第三属性参数;

根据多个植被对象的第一属性参数、所述每个植被对象中多个分支的第二属性参数以及所述每个分支中至少一个分支关节的第三属性参数,渲染生成所述植被对象群。

可选的,所述基础配置参数包括:

所述植被对象群中植被对象的数量、间距范围、分支的数量范围;

所述分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,所述第一分支为所述植被对象群中初始植被对象的初始分支。

在本申请的一个实施例中,所述根据所述基础配置参数以及伪随机函数,确定所述植被对象群中每个植被对象的第一属性参数,包括:

根据所述基础配置参数中所述植被对象的间距范围以及所述伪随机函数,确定所述植被对象群中每个植被对象与相邻植被对象的间距值;

根据所述基础配置参数中所述植被对象的分支的数量范围以及所述伪随机函数,确定所述植被对象群中每个植被对象的分支的数量。

第三方面,本申请实施例提供一种植被对象的处理装置,包括:

获取模块,用于获取植被对象的基础配置参数,所述基础配置参数用于指示所述植被对象的各属性参数的区间范围或数值,所述植被对象包括多个分支;

处理模块,用于根据所述基础配置参数以及伪随机函数,确定所述植被对象的分支数量以及每个分支的第一属性参数;

根据所述每个分支的第一属性参数确定所述每个分支中每个分支关节的第二属性参数;

渲染模块,用于根据所述多个分支的第一属性参数以及所述每个分支中至少一个分支关节的第二属性参数,渲染生成所述植被对象。

第四方面,本申请实施例提供一种植被对象的处理装置,包括:

获取模块,用于获取植被对象群的基础配置参数,所述基础配置参数用于指示所述植被对象群的各属性参数的区间范围或数值,所述植被对象群中的每个植被对象包括多个分支;

处理模块,用于根据所述基础配置参数以及伪随机函数,确定所述植被对象群中每个植被对象的第一属性参数以及所述每个植被对象中每个分支的第二属性参数;

根据所述每个植被对象中每个分支的第二属性参数,确定所述每个分支中每个分支关节的第三属性参数;

渲染模块,用于根据多个植被对象的第一属性参数、所述每个植被对象中多个分支的第二属性参数以及所述每个分支中至少一个分支关节的第三属性参数,渲染生成所述植被对象群。

第五方面,本申请实施例提供一种电子设备,包括:

存储器、处理器以及显示器;

所述存储器用于存储计算机程序和数据;

所述处理器用于调用所述存储器存储的计算机程序,以执行第一方面中任一项所述的方法,或者第二方面中任一项所述的方法;

所述显示器用于将所述数据渲染到图形用户界面上。

第六方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现如第一方面中任一项所述的方法,或者第二方面中任一项所述的方法。

本申请实施例提供一种植被对象的处理方法、装置、设备及存储介质,其中处理方法包括:通过获取植被对象的基础配置参数,基础配置参数用于指示植被对象的各属性参数的区间范围或数值,根据植被对象的基础配置参数以及伪随机函数,确定植被对象的分支数量以及每个分支的第一属性参数。再根据每个分支的第一属性参数确定每个分支中每个分支关节的第二属性参数。最后根据多个分支的第一属性参数以及每个分支中至少一个分支关节的第二属性参数,渲染生成植被对象。上述方法利用伪随机函数自动生成植被对象的关节点数据,提高了对植被对象的绘制效率,由于植被对象的关节点数据具有随机性,因此渲染生成的植被对象更加自然。

附图说明

图1为本申请实施例提供的一种植被对象的处理方法的流程示意图;

图2为本申请实施例提供的单颗草的结构示意图;

图3为本申请实施例提供的单颗草的一个叶片的结构示意图;

图4为本申请实施例提供的单颗草的相邻叶片关节的示意图;

图5为本申请实施例提供的一种植被对象的处理方法的流程示意图;

图6为本申请实施例提供的草丛的结构示意图;

图7为本申请实施例提供的一种植被对象的处理方法的流程示意图;

图8为本申请实施例提供的草丛受风变化图;

图9为本申请实施例提供的一种植被对象的处理装置的结构示意图;

图10为本申请实施例提供的一种植被对象的处理装置的结构示意图;

图11为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。

此外,本文中使用的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

在二维2d游戏场景中,有时需要模拟草丛、麦田等植被场景,以丰富游戏中的环境,增加对玩家的视觉吸引力。以草丛为例,目前在2d游戏场景中使用的草丛大多是以2d模型进行管理和绘制,美工通过画图工具设计每颗草的样式,在生成草丛时,叠加使用一种或多种草的模型。

上述方法中,由于系统在对草进行绘制时,仅能根据美工预设好的模型草以及预设的每颗草的放置位置绘制每颗草。若要绘制大片的草丛,如果使用一种草的模型,生成的草丛不够真实,模拟效果不佳。如果为了体现草丛中每颗草的差异性,往往需要绘制大量草的模型,绘制工作量大,不仅绘制草丛的效率低,而且需要占用系统的大量资源用于模型存储。

为了解决上述问题,本申请实施例提供一种植被对象的处理方法,实现自动化生成植被对象的目的,可用于生成单颗植被对象或者植被对象群。具体是通过获取为植被对象(群)配置的约束,例如单颗草生成多少片叶子、叶子的弯曲程度、叶子的骨骼数量(或称为关节数量)、叶子的倾斜角度、贴图等,然后利用伪随机函数,根据约束确定植被对象(群)的基本骨骼,再根据骨骼数据生成植被对象渲染数据(包括网格mesh数据、uv数据),最终可根据植被对象渲染数据渲染生成植被对象(群)。本申请技术方案没有借助美工绘制的植被对象的2d模型,而是利用伪随机函数自动生成植被对象(群)的基本骨骼,提高了对植被对象(群)的绘制效率,由于植被对象(群)的基本骨骼随机性高,因此对植被对象(群)的模拟效果更加自然。

除上述方案外,本申请实施例还提供一种植被对象的处理方法,增加植被对象(群)受风影响后的模拟效果,植被对象(群)受风后具有很好的柔性表达效果。具体是通过获取植被对象(群)在某一方向的受风值,结合为植被对象(群)配置的受风约束,例如受风面积、最大受风角度等,计算每一帧画面中植被对象(群)的基本骨骼的变化值,根据骨骼数据的变化值更新植被对象渲染数据,根据更新的植被对象渲染数据生成每一帧画面的植被对象(群)。

需要指出的是,本申请实施例中的植被对象可以指单颗植被,例如单颗草、麦子、树木,还可以指包括多颗植被的植被对象群,例如草丛、麦田、森林等,对此本申请实施例不作任何限制。

上述技术方案可以由终端设备来执行,也可以由游戏服务器来执行,对此本申请实施例不作任何限制。

下面采用几个具体实施例对本申请提供的技术方案进行详细说明。需要说明的是,下面几个具体实施例可以相互结合,对于相同或相似的内容,在不同的实施例中不再进行重复说明。

图1为本申请实施例提供的一种植被对象的处理方法的流程示意图。如图1所示,本实施例提供的植被对象的处理方法,实现对单颗植被的渲染处理,具体包括以下几个步骤:

步骤101、获取植被对象的基础配置参数,基础配置参数用于指示植被对象的各属性参数的区间范围或数值。

其中,植被对象包括多个分支。示例性的,以植被对象为单颗草举例,单颗草包括多个叶片,叶片即分支。植被对象的属性参数包括植被对象的分支的属性参数,例如分支的数量、弯曲度、倾斜角度、尺寸(如宽度和高度)、间距、贴图。

本实施例中,植被对象的基础配置参数包括:

植被对象的分支的数量范围,分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,第一分支为植被对象的初始分支。

示例性的,以植被对象为单颗草举例,单颗草的基础配置参数包括:

草的叶片的数量范围,用branchcount表示,类型为range;

叶片的弯曲度范围,用bendangle表示,类型为range;

叶片的倾斜角度范围,用branchangle表示,类型为range;

叶片的宽度范围,用branchwidth表示,类型为range;

叶片的高度范围,用branchheight表示,类型为range;

叶片的间距值,用branchspace表示,类型为number;

叶片的贴图数,用uvstrip表示,类型为number。

第一叶片(草的初始叶片)的位置坐标,用branch.posx和branch.posy(通常设置为0)表示,类型为number。图2为本申请实施例提供的单颗草的结构示意图,图2中的草包括5个叶片,分别记为a、b、c、d、e,可将最左边第一个叶片,即叶片a作为第一叶片,由图2可知,叶片a的位置坐标可以表示为:

prevposx=branch.posx,prevposy=0。

需要说明的是,叶片的倾斜角度可以是叶片与垂直方向(如图2所示y方向)的夹角。叶片的宽度可以理解为叶片在图2所示的x方向的长度,叶片的高度可以理解为叶片在图2所示的y方向的长度。叶片的间距值可以理解为每颗草中相邻两个叶片根部的间距值,如图2中叶片a与叶片b根部的间距,叶片b与叶片c根部的间距,叶片c与叶片d根部的间距,叶片d与叶片e根部的间距,通常情况下设置的间距值为一固定值。叶片的贴图数只是系统提供的叶片贴图的种类数,例如系统提供8种不同颜色、深浅变化的叶片贴图,则贴图数为8。

步骤102、根据基础配置参数以及伪随机函数,确定植被对象的分支数量以及每个分支的第一属性参数。

在本申请的一个实施例中,可根据基础配置参数中植被对象的分支的数量范围以及伪随机函数,确定植被对象的分支的数量。也就是说,植被对象的分支数量可基于伪随机函数产生。

示例性的,以植被对象为单颗草举例,可根据基础配置参数中单颗草的叶片数量范围以及伪随机函数,确定单颗草的叶片数量,可通过如下示例代码实现:grass.branchcount=randominrange(branchcount)。

式中,randominrange(range)表示在range区间内随机一个值,可用公式randominrange(range)=range.min+(range.max-range.min)*random()表示,random()为伪随机函数,每执行一次给定一个0-1之间确定的随机数。

本实施例中,每个分支的第一属性参数包括:

每个分支的位置坐标、弯曲度、倾斜角度、宽度、高度、贴图索引。

示例性的,以植被对象为单颗草举例,单颗草的每个分支,即单颗草的每个叶片,叶片的属性参数包括叶片的位置坐标、弯曲度、倾斜角度、尺寸、贴图索引。其中,叶片的位置坐标可以是叶片根部的位置坐标,当然也可以是叶片中心处的位置坐标,对此本申请实施例不作任何限制。叶片的尺寸可以通过叶片的宽度和高度表示。叶片的贴图索引的取值范围是1-n,其中n表示贴图数,如果系统提供8种贴图,叶片的贴图索引取值在1-8。

在本申请的一个实施例中,可根据基础配置参数中第一分支的位置坐标以及间距值,确定除第一分支之外的其他分支的位置坐标。由上文可知,第一分支为植被对象的初始分支。本实施例是通过植被对象的初始分支的位置坐标以及分支的间距值,依次确定剩余分支的位置坐标。

示例性的,以植被对象为单颗草举例,参照图2,基础配置参数包括该单颗草的第一叶片a的位置坐标,叶片数量以及叶片的间距值,以第一叶片a为初始叶片,依次确定剩余叶片(叶片b、c、e、f)的位置坐标。

在本申请的一个实施例中,可根据基础配置参数中分支的弯曲度范围以及伪随机函数,确定每个分支的弯曲度。也就是说,植被对象的每个分支的弯曲度可基于伪随机函数产生。示例性的,以植被对象为单颗草举例,可根据基础配置参数中叶片的弯曲度范围以及伪随机函数,确定单颗草中每个叶片的弯曲度,可通过如下示例代码实现:

bend[branchindex]=randominrange(bendangle),式中branchindex表示叶片的索引。

在本申请的一个实施例中,可根据基础配置参数中分支的倾斜角度范围以及伪随机函数,确定每个分支的倾斜角度。也就是说,植被对象的每个分支的倾斜角度可基于伪随机函数产生。示例性的,以植被对象为单颗草举例,可根据基础配置参数中叶片的倾斜角度范围以及伪随机函数,确定单颗草中每个叶片的倾斜角度,可通过如下示例代码实现:

angle[branchindex]=randominrange(branchangle)。

在本申请的一个实施例中,可根据基础配置参数中分支的宽度范围以及伪随机函数,确定每个分支的宽度。也就是说,植被对象的每个分支的宽度可基于伪随机函数产生。示例性的,以植被对象为单颗草举例,可根据基础配置参数中叶片的宽度范围以及伪随机函数,确定单颗草中每个叶片的宽度,可通过如下示例代码实现:width[branchindex]=randominrange(branchwidth)。

在本申请的一个实施例中,可根据基础配置参数中分支的高度范围以及伪随机函数,确定每个分支的高度。也就是说,植被对象的每个分支的高度可基于伪随机函数产生。示例性的,以植被对象为单颗草举例,可根据基础配置参数中叶片的高度范围以及伪随机函数,确定单颗草中每个叶片的高度,可通过如下示例代码实现:

height[branchindex]=randominrange(branchheight)。

在本申请的一个实施例中,可根据基础配置参数中分支的贴图数以及伪随机函数,确定每个分支的贴图索引。也就是说,植被对象的每个分支的贴图索引可基于伪随机函数产生。示例性的,以植被对象为单颗草举例,可根据基础配置参数中叶片的贴图数以及伪随机函数,确定单颗草中每个叶片的贴图索引,可通过如下示例代码实现:

uvindex[branchindex]=randominrange(1,uvstrip)。

可选的,在本申请的一个实施例中,根据基础配置参数中的分支的弯曲度范围以及伪随机函数,确定多个分支的弯曲度。具体的,可以按照升序对多个分支的弯曲度进行排列,在确定植被对象中每个分支的弯曲度时,可依据如下原则为每个分支配置弯曲度:植被对象中间分支的弯曲度小于两侧分支的弯曲度。示例性的,以植被对象为单颗草举例,如果有奇数片叶子,则弯曲度最小的叶子放置正中,两侧依次放置弯曲度逐渐变大的叶子,避免单颗草看上去杂乱、不真实。如果有偶数片叶子,叶子的排布方式类似,弯曲度最小的两片叶子放置对称放置在正中两侧,两侧依次放置弯曲度逐渐变大的叶子。

可选的,在本申请的一个实施例中,根据基础配置参数中的分支的高度范围以及伪随机函数,确定多个分支的高度,具体的,可以按照降序对多个分支的高度进行排列,在确定植被对象中每个分支的高度时,可依据如下原则为每个分支配置高度:植被对象中间分支的高度大于两侧分支的高度。

可选的,在本申请的一个实施例中,根据基础配置参数中的分支倾斜角度范围以及伪随机函数,确定多个分支的倾斜角度。具体的,可以按照倾升序对多个分支的倾斜角度绝对值进行排列,在确定植被对象中每个分支的倾斜角度时,可依据如下原则为每个分支配置倾斜角度:植被对象中间分支的倾斜角度小于两侧分支的倾斜角度。

步骤103、根据每个分支的第一属性参数确定每个分支中每个分支关节的第二属性参数。

在本申请的一个实施例中,步骤101中植被对象的基础配置参数还包括分支关节数。示例性的,以植被对象为单颗草举例,单颗草的每一个叶片可以包括至少一个叶片关节,叶片关节即分支关节,用jointcount表示,类型为number。图3为本申请实施例提供的单颗草的一个叶片的结构示意图,如图3所示,叶片包括5个叶片关节,分别为叶片关节1,2,3,4,5。

应理解,植被对象的每个分支包括至少一个分支关节时,还需要分别确定每个分支关节的属性参数,具体可通过下述几个实施例及其结合实现。

在本申请的一个实施例中,可根据每个分支的第一属性参数以及分支关节数,确定每个分支中每个分支关节的第二属性参数。

本实施例中,每个分支关节的第二属性参数包括每个分支关节的高度、弯曲度、倾斜角度,以及每个分支关节对应的网格坐标。

其中,每个分支关节对应的网格坐标是指每个分支关节对应的多个顶点的位置坐标。例如,分支关节对应一个四边形,则网格坐标包括四边形四个顶点的位置坐标。

示例性的,以植被对象为单颗草举例,图3中叶片包括5个叶片关节,其中叶片关节1位于该叶片的底部,依次分别是叶片关节2、3、4、5,每个叶片关节对应一个四边形,叶片关节对应的网格坐标即叶片关节四个顶点的位置坐标。由图3可知,相邻两个叶片关节对应的四边形共享一条边和两个顶点,因此在确定叶片关节对应的网格坐标时,只需要确定(jointcount+1)*2个顶点的位置坐标即可,其中jointcount表示叶片关节数,例如某叶片有3个叶片关节,只需要计算(3+1)*2=8个顶点的位置坐标。

在本申请的一个实施例中,可根据每个分支的高度以及分支关节数,确定每个分支中每个分支关节的高度。示例性的,以植被对象为单颗草举例,参照图3,叶片包括5个叶片关节,可通过均分该叶片的高度确定每个叶片关节的高度,这里的高度是指在图3所示y轴方向的长度,具体可通过如下示例代码实现:

jointheight=branch.height/jointcount,式中jointheight表示叶片关节的高度,branch.height表示叶片的高度。

在本申请的一个实施例中,可根据每个分支的弯曲度以及分支关节数,确定每个分支中每个分支关节的弯曲度。示例性的,以植被对象为单颗草举例,参照图3,叶片包括5个叶片关节,可通过均分该叶片的弯曲度确定每个叶片关节的弯曲度,具体可通过如下示例代码实现:

jointbend=branch.bend/jointcount,式中jointbend表示叶片关节的弯曲度,branch.bend表示叶片的弯曲度。

需要说明的是,当植被对象受风时,branch.bend还需要增加风的影响,具体参见后文实施例。

在本申请的一个实施例中,可根据每个分支的倾斜角度以及每个分支中每个分支关节的弯曲度,确定每个分支关节的倾斜角度。示例性的,以植被对象为单颗草举例,参照图3,叶片包括5个叶片关节,可从叶片底部的第一个叶片关节开始,根据叶片关节的弯曲度、叶片关节的索引以及叶片的倾斜角度,依次确定每个叶片关节的倾斜角度。其中,叶片关节的倾斜角度可以是叶片关节与垂直方向(如图3所示的y方向)的夹角。叶片关节的倾斜角度与叶片的倾斜角度的确定方式一致。

叶片关节的倾斜角度具体可通过如下示例代码实现:

joint.angle=jointbend*jointindex+branch.angle,式中joint.angle表示叶片关节的倾斜角度,jointbend表示叶片关节的弯曲度,jointindex表示叶片关节的索引,叶片关节的索引取值在1至jointcount,branch.angle表示叶片的倾斜角度。

在本申请的一个实施例中,可根据每个分支的位置坐标、宽度,以及每个分支关节的高度、倾斜角度,确定每个分支关节对应的网格坐标。

示例性的,以植被对象为单颗草举例,参照图3,叶片的位置坐标表示为(branch.posx,0),对应分支的位置坐标。叶片的某一叶片关节的倾斜角度和高度分别为joint.angle和jointheight,分别分支关节的倾斜角度和高度。

首先,可通过如下公式确定叶片关节的位置坐标:

joint.posx=prevposx+sin(joint.angle)*jointheight

joint.posy=prevposy+cos(joint.angle)*jointheight

式中,(joint.posx,joint.posy)表示某一叶片关节的位置坐标。如果叶片关节为叶片底部的第一叶片关节,则(prevposx,prevposy)=(branch.posx,0);如果叶片关节为除第一叶片关节之外的任意叶片关节,则(prevposx,prevposy)表示与该叶片关节连接的前一个叶片关节的位置坐标。可通过循环代码实现对一个叶片中所有叶片关节位置坐标的计算:

prevposx=branch.posx

prevposy=0

for(jointindex=1;jointindex<=jointcount;++jointindex)

{

joint=getjoint(jointindex)

joint.posx=prevposx+sin(joint.angle)*jointheight

joint.posy=prevposy+cos(joint.angle)*jointheight

prevposx=joint.posx

prevposy=joint.posy

}

在确定叶片关节的位置坐标之后,需要进一步确定叶片关节对应的网格坐标(即四边形顶点坐标)。假设上述示例叶片的宽度为branch.width,其他参数不变,可通过如下示例代码确定叶片所有顶点的坐标:

meshpos[1].x=branch.posx–branch.width*0.5

meshpos[1].y=0

meshpos[2].x=branch.posx+branch.width*0.5

meshpos[2].y=0

上述代码用于确定叶片底部的第一个叶片关节的两个顶点的坐标(如图3中顶点f和顶点g)。下述代码用于依次确定叶片的剩余顶点的坐标:

prevposx=branch.posx

prevposy=0

for(jointindex=1;jointindex<=jointcount;++jointindex)

{

joint=getjoint(jointindex)

dir={x=joint.posx–prevposx,y=joint.posy–prevposy}

normalize(dir)

meshpos[jointindex*2+1].x=joint.posx–dir.y*branch.width*0.5

meshpos[jointindex*2+1].y=joint.posy+dir.x*branch.width*0.5

meshpos[jointindex*2+2].x=joint.posx+dir.y*branch.width*0.5

meshpos[jointindex*2+2].y=joint.posy–dir.x*branch.width*0.5

具体可参见图4,如图4所示,第一个叶片关节的关节点c的坐标表示为(prevposx,prevposy)其中prevposy=0,第二个叶片关节的关节点d的坐标表示为(joint.posx,joint.posy),c指向d的方向表示为dir={x=joint.posx–prevposx,y=joint.posy–prevposy},为了叶片模型更加自然,过第二个叶片关节点d的线段ab应当垂直于中轴线dir,则ab的方向可以表示为dir_ab(-dir.y,dir.x),可推算a的坐标为(joint.posx+(-dir.y)*0.5*branch.width,joint.posy+dir.x*0.5*branch.width)以及b的坐标为(joint.posx+dir.y*0.5*branch.width,joint.posy-dir.x*0.5*branch.width)。

需要说明的是,在实际绘制叶片的过程中,一个叶片关节对应一个四边形,可将四边形分裂成两个三角形,三角形作为绘制的最小单元。

通过上述几个实施例可确定植被对象的每一个分支的属性参数

步骤104、根据多个分支的第一属性参数以及每个分支中至少一个分支关节的第二属性参数,渲染生成植被对象。

本实施例中,根据上述步骤确定的多个分支的第一属性参数以及每个分支中至少一个分支关节的第二属性参数,生成植被对象的渲染数据,通过执行该渲染数据渲染生成植被对象。

本申请实施例提供的植被对象的处理方法,通过获取植被对象的基础配置参数,基础配置参数用于指示植被对象的各属性参数的区间范围或数值,根据植被对象的基础配置参数以及伪随机函数,确定植被对象的分支数量以及每个分支的第一属性参数。再根据每个分支的第一属性参数确定每个分支中每个分支关节的第二属性参数。最后根据多个分支的第一属性参数以及每个分支中至少一个分支关节的第二属性参数,渲染生成植被对象。上述方法利用伪随机函数自动生成植被对象的关节点数据,提高了对植被对象的绘制效率,由于植被对象的关节点数据具有随机性,因此渲染生成的植被对象更加自然。

图5为本申请实施例提供的一种植被对象的处理方法的流程示意图。本实施例提供的植被对象的处理方法,实现对植被对象群的渲染处理。如图5所示,本实施例提供的处理方法具体包括以下几个步骤:

步骤201、获取植被对象群的基础配置参数,基础配置参数用于指示植被对象群的各属性参数的区间范围或数值。

其中,植被对象群中的每个植被对象包括多个分支。

本实施例中,植被对象群的基础配置参数包括:

植被对象群中植被对象的数量、间距范围、分支的数量范围;

分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,第一分支为植被对象群中初始植被对象的初始分支。

需要说明的是,与上述实施例不同的是,对于植被对象群,其基础配置参数除了包括单个植被对象的基础配置参数之外,还包括植被对象群中植被对象的数量以及植被对象之间的距离范围。

示例性的,以植被对象为草丛举例,草丛的基础配置参数除了包括上述实施例中单颗草的基础配置参数之外,还包括:

草的数量,用grasscount表示,类型为number;

草的间距,用grassspace表示,类型为range。

图6为本申请实施例提供的草丛的结构示意图,如图6所示,该草丛包括4颗草,4颗草在x方向依次排开,相邻两颗草的间距值相同。每个草的属性参数均可参照上述实施例展开。

步骤202、根据基础配置参数以及伪随机函数,确定植被对象群中每个植被对象的第一属性参数以及每个植被对象中每个分支的第二属性参数;

在本申请的一个实施例中,可根据基础配置参数中植被对象的间距范围以及伪随机函数,确定植被对象群中每个植被对象与相邻植被对象的间距值。也就是说,植被对象群中任意相邻的两个植被对象的间距可基于伪随机函数产生。

示例性的,以植被对象群为草丛举例,可根据基础配置参数中草丛的间距范围以及伪随机函数,确定草丛中任意相邻两颗草的间距值。可通过如下示例代码新增一颗草:add=randominrange(grassspace)。

本实施例中,根据基础配置参数中植被对象的分支的数量范围以及伪随机函数,确定植被对象群中每个植被对象的分支的数量的技术方案,与上述实施例类似,具体可参见上述实施例,此处不再赘述。

本实施例中,根据基础配置参数以及伪随机函数,确定每个植被对象中每个分支的第二属性参数的技术方案,与上述实施例步骤102相类似,具体可参见上述实施例,此处不再赘述。

步骤203、根据每个植被对象中每个分支的第二属性参数,确定每个分支中每个分支关节的第三属性参数。

本实施例中,根据每个植被对象中每个分支的第二属性参数,确定每个分支中每个分支关节的第三属性参数的技术方案,与上述实施例步骤103相类似,具体可参见上述实施例,此处不再赘述。

步骤204、根据多个植被对象的第一属性参数、每个植被对象中多个分支的第二属性参数以及每个分支中至少一个分支关节的第三属性参数,渲染生成植被对象群。

本实施例中,根据上述步骤确定的多个植被对象的第一属性参数、每个植被对象中多个分支的第二属性参数以及每个分支中至少一个分支关节的第三属性参数,生成植被对象群的渲染数据,通过执行该渲染数据生成植被对象。

本申请实施例提供的植被对象的处理方法,通过获取植被对象群的基础配置参数,基础配置参数用于指示植被对象群的各属性参数的区间范围或数值,根据植被对象群的基础配置参数以及伪随机函数,确定植被对象群中每个植被对象的第一属性参数以及每个植被对象中每个分支的第二属性参数。再根据每个植被对象中每个分支的第二属性参数,确定每个分支中每个分支关节的第三属性参数。最后根据多个植被对象的第一属性参数、每个植被对象中多个分支的第二属性参数以及每个分支中至少一个分支关节的第三属性参数,渲染生成植被对象群。上述方法利用伪随机函数自动生成植被对象群中各个植被对象的关节点数据,提高了对植被对象群的绘制效率,由于植被对象群中每一个植被对象的关节点数据具有随机性,因此渲染生成的植被对象群更加自然。

上述两个实施例分别对单颗植被对象以及植被对象群的渲染过程进行了描述。基于上述两个实施例,考虑到实际游戏场景中植被对象受风影响,可采用下面一个实施例实现对受风影响的植被对象的渲染处理。需要说明的是,下述实施例的技术方案同时适用于单颗植被对象和植被对象群。

图7为本申请实施例提供的一种植被对象的处理方法的流程示意图,在上述任意实施例的基础上,如图7所示,本实施例提供的处理方法还包括以下几个步骤:

步骤301、获取植被对象在第一方向的受风值。

其中,植被对象在第一方向的受风值用于模拟游戏场景中某方向的风的属性参数,用force表示。示例性的,第一方向为x方向的直吹风,受风值可表示为forcex。

步骤302、根据受风值、受风面积以及最大受风角度,更新植被对象的每个分支的第一属性参数以及每个分支中每个分支关节的第二属性参数。

本实施例中,植被对象的基础配置参数还包括植被对象的受风面积、最大受风角度。

示例性的,以植被对象为单颗草举例,单颗草的基础配置参数还包括:

草的受风面积,用windarea表示,类型为range;

草的最大受风角度,用influencemaxangle表示,类型为range。

草的受风面积和最大受风角度同样可以通过伪随机函数产生,具体可通过如下示例代码实现:

grass.windarea=randominrange(windarea)

grass.influencewindangle=randominrange(influencemaxangle)

在本申请的一个实施例中,可根据受风值、受风面积以及最大受风角度,更新植被对象的每个分支的弯曲度,以及每个分支中每个分支关节的弯曲度。

示例性的,以植被对象为单颗草举例,单颗草受风影响其叶片的弯曲度将发生变化,可通过如下示例代码更新单颗草的每个叶片的弯曲度:

bendangle=branch.bend+addangle

addangle=grass.forcex*grass.windarea

addangle=clamp(addangle,-grass.influencewindangle,grass.influencewindarea)

式中,branch.bend表示无风状态下单颗草的某叶片的弯曲度,grass.forcex表示单颗草在x方向的受风值,clamp(value,min,max)表示将value限定在min和max之间。

在本申请的一个实施例中,可根据更新后的每个分支中每个分支关节的弯曲度,更新每个分支中每个分支关节的倾斜角度以及每个分支关节对应的网格坐标。

由上文实施例可知,每个分支的每个分支关节的弯曲度是根据每个分支的弯曲度以及分支关节数确定的,在每个分支的弯曲度发生变化时,每个分支中每个分支关节的弯曲度也将发生变化。

同样的,由上文实施例可知,每个分支中每个分支关节的倾斜角度是根据每个分支的倾斜角度以及每个分支中每个分支关节的弯曲度确定的,在每个分支关节的弯曲度发生变化时,每个分支关节的倾斜角度也将发生变化。

同样的,由上文实施例可知,每个分支关节对应的网格坐标是根据每个每个分支的位置坐标、宽度,以及每个分支关节的高度、倾斜角度确定的,在每个分支关节的倾斜角度发生变化时,每个分支关节对应的网格坐标也将发生变化。

综上,可根据上文实施例确定每个分支关节的倾斜角度以及每个分支关节对应的网格坐标的技术方案,更新每个分支关节的倾斜角度以及每个分支关节对应的网络坐标。

步骤303、根据更新后的多个分支的第一属性参数,以及更新后的每个分支中至少一个分支关节的第二属性参数,渲染生成更新后的植被对象。

本实施例中,根据上述步骤确定的更新后的多个分支的第一属性参数,以及更新后的每个分支中至少一个分支关节的第二属性参数,生成植被对象最新一帧的渲染数据,通过执行最新一帧的渲染数据渲染生成受风影响的植被对象。应理解,随着受风值的实时变化,可通过上述过程动态调整每一帧的渲染数据,渲染生成植被对象受风连续变化的动画,由于受风面积和最大受风角度数据具有随机性,渲染生成的植被对象动画更加自然、柔和。

示例性的,以植被对象群为草丛举例,图8为本申请实施例提供的草丛受风变化图,如图8所示,草丛受环境风为x逆方向的直吹风影响,草丛中每颗草的叶片弯曲度将发生变化,图8上方为无风状态下的草丛状态示意,图8下方为受风后的草丛状态示意。

本申请实施例提供的植被对象的处理方法,通过获取植被对象在第一方向的受风值,根据受风值、受风面积以及最大受风角度,更新植被对象的每个分支的第一属性参数以及每个分支中每个分支关节的第二属性参数。再根据更新后的多个分支的第一属性参数,以及更新后的每个分支中至少一个分支关节的第二属性参数,渲染生成更新后的植被对象,从而实现对植被对象受风影响的渲染处理,由于受风面积和最大受风角度数据具有随机性,渲染生成的植被对象动画更加自然、柔和。

图9为本申请实施例提供的一种植被对象的处理装置的结构示意图,如图9所示,本实施例的植被对象的处理装置400,包括:获取模块401,处理模块402以及渲染模块403。

获取模块401,用于获取植被对象的基础配置参数,所述基础配置参数用于指示所述植被对象的各属性参数的区间范围或数值,所述植被对象包括多个分支;

处理模块402,用于根据所述基础配置参数以及伪随机函数,确定所述植被对象的分支数量以及每个分支的第一属性参数;

根据所述每个分支的第一属性参数确定所述每个分支中每个分支关节的第二属性参数;

渲染模块403,用于根据所述多个分支的第一属性参数以及所述每个分支中至少一个分支关节的第二属性参数,渲染生成所述植被对象。

可选的,所述基础配置参数包括:

所述植被对象的分支的数量范围,分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,所述第一分支为所述植被对象的初始分支。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述基础配置参数中所述植被对象的分支的数量范围以及所述伪随机函数,确定所述植被对象的分支的数量。

可选的,所述每个分支的第一属性参数包括:

每个分支的位置坐标、弯曲度、倾斜角度、宽度、高度、贴图索引。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述基础配置参数中所述第一分支的位置坐标以及所述间距值,确定除所述第一分支之外的其他分支的位置坐标;

根据所述基础配置参数中分支的弯曲度范围以及所述伪随机函数,确定所述每个分支的弯曲度;

根据所述基础配置参数中分支的倾斜角度范围以及所述伪随机函数,确定所述每个分支的倾斜角度;

根据所述基础配置参数中分支的宽度范围以及所述伪随机函数,确定所述每个分支的宽度;

根据所述基础配置参数中分支的高度范围以及所述伪随机函数,确定所述每个分支的高度;

根据所述基础配置参数中分支的贴图数以及所述伪随机函数,确定所述每个分支的贴图索引。

可选的,所述基础配置参数还包括分支关节数。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述每个分支的第一属性参数以及所述分支关节数,确定所述每个分支中每个分支关节的第二属性参数。

可选的,所述每个分支关节的第二属性参数包括每个分支关节的高度、弯曲度、倾斜角度,以及每个分支关节对应的网格坐标。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述每个分支的高度以及所述分支关节数,确定所述每个分支中每个分支关节的高度;

根据所述每个分支的弯曲度以及所述分支关节数,确定所述每个分支中每个分支关节的弯曲度。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述每个分支的倾斜角度以及所述每个分支中每个分支关节的弯曲度,确定所述每个分支关节的倾斜角度;

根据所述每个分支的位置坐标、宽度,以及所述每个分支关节的高度、倾斜角度,确定每个分支关节对应的网格坐标。

可选的,所述基础配置参数还包括所述植被对象的受风面积以及最大受风角度。

在本申请的一个实施例中,获取模块401,还用于获取所述植被对象在第一方向的受风值;

处理模块402,还用于根据所述受风值、所述受风面积以及所述最大受风角度,更新所述植被对象的所述每个分支的第一属性参数以及所述每个分支中每个分支关节的第二属性参数;

渲染模块403,还用于根据更新后的所述多个分支的第一属性参数,以及更新后的所述每个分支中至少一个分支关节的第二属性参数,渲染生成更新后的植被对象。

在本申请的一个实施例中,处理模块402,具体用于:

根据所述受风值、所述受风面积以及所述最大受风角度,更新所述植被对象的所述每个分支的弯曲度,以及所述每个分支中每个分支关节的弯曲度;

根据更新后的所述每个分支中每个分支关节的弯曲度,更新所述每个分支中每个分支关节的倾斜角度以及所述每个分支关节对应的网格坐标。

本实施例提供的植被对象的处理装置,可以用于执行图1或图6所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图10为本申请实施例提供的一种植被对象的处理装置的结构示意图,如图10所示,本实施例的植被对象的处理装置500,包括:获取模块501,处理模块502以及渲染模块503。

获取模块501,用于获取植被对象群的基础配置参数,所述基础配置参数用于指示所述植被对象群的各属性参数的区间范围或数值,所述植被对象群中的每个植被对象包括多个分支;

处理模块502,用于根据所述基础配置参数以及伪随机函数,确定所述植被对象群中每个植被对象的第一属性参数以及所述每个植被对象中每个分支的第二属性参数;

根据所述每个植被对象中每个分支的第二属性参数,确定所述每个分支中每个分支关节的第三属性参数;

渲染模块503,用于根据多个植被对象的第一属性参数、所述每个植被对象中多个分支的第二属性参数以及所述每个分支中至少一个分支关节的第三属性参数,渲染生成所述植被对象群。

可选的,所述基础配置参数包括:

所述植被对象群中植被对象的数量、间距范围、分支的数量范围;

所述分支的弯曲度范围、倾斜角度范围、宽度范围、高度范围、间距值、贴图数,第一分支的位置坐标,所述第一分支为所述植被对象群中初始植被对象的初始分支。

在本申请的一个实施例中,处理模块502,具体用于:

根据所述基础配置参数中所述植被对象的间距范围以及所述伪随机函数,确定所述植被对象群中每个植被对象与相邻植被对象的间距值;

根据所述基础配置参数中所述植被对象的分支的数量范围以及所述伪随机函数,确定所述植被对象群中每个植被对象的分支的数量。

本实施例提供的植被对象的处理装置,可以用于执行上述图5所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图11为本申请实施例提供的一种电子设备的结构示意图。如图11所示,本实施例提供的电子设备600,包括:

存储器601、处理器602以及显示器603。

其中,存储器601用于存储计算机程序和数据;

处理器602用于调用存储器601存储的计算机程序,以执行如前述任一项方法实施例中的技术方案;

显示器603用于将数据渲染到图形用户界面上。

可选地,存储器601既可以是独立的,也可以跟处理器602集成在一起。

当存储器601是独立于处理器602之外的器件时,电子设备600还包括:总线604,用于连接存储器601和处理器602。

本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器602执行以实现前述任一项方法实施例中的各个步骤。

本申请实施例还提供了一种芯片,包括:处理模块与通信接口,该处理模块能执行前述任一项方法实施例中的各个步骤。

进一步地,该芯片还包括存储模块(如,存储器),存储模块用于存储指令,处理模块用于执行存储模块存储的指令,并且对存储模块中存储的指令的执行使得处理模块执行前述任一项方法实施例中的各个步骤。

应理解,上述处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,还可以为u盘、移动硬盘、只读存储器、磁盘或光盘等。

总线可以是工业标准体系结构(industrystandardarchitecture,isa)总线、外部设备互连(peripheralcomponent,pci)总线或扩展工业标准体系结构(extendedindustrystandardarchitecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。

上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。

一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(applicationspecificintegratedcircuits,简称:asic)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备中。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1