虚拟对象风动画的渲染方法及装置、存储介质、电子装置与流程

文档序号:24973396发布日期:2021-05-07 22:45阅读:122来源:国知局
虚拟对象风动画的渲染方法及装置、存储介质、电子装置与流程

本申请要求与2020年11月27日提交中国专利局、申请号为2020113568691、发明名称为“虚拟对象风动画的渲染方法及装置、存储介质、电子装置”的中国专利申请的分案申请。

本申请涉及计算机技术领域,具体而言,涉及一种虚拟对象风动画的渲染方法及装置、存储介质、电子装置。



背景技术:

相关技术中随着计算机图形学的发展,人们对图像逼真度的追求越来越高。利用图像学的技术可以描述越来越多的真实图像,其中通过法线贴图的方法可以是提高对三维图像描述的逼真度。

相关技术中,游戏中用于风动画等动态特效的模型数据一般通过美术在3d建模工具中手动指定,美术人员通过3dsmax软件手工指定每一个树叶和树干的转动轴点位置,产生模型风数据后一般通过噪音函数或单张噪音贴图的平移动画实现风场数据,比如虚幻引擎自带风系统是通过噪音函数实现的环境风风场。

然而,在使用手工制作静态贴图时,针对风动画的每一颗植物,美术人员需要指定每一组叶子和树枝的相关数据,这些数据一般包括轴点空间位置、树叶梯度、树干梯度,对于不同复杂程度的一颗植物,树叶、树枝分组可能有数十组,因为每种植物形态不一,没有复杂的算法和高配置的硬件很难渲染风动画,所以都是直接通过美术手工指定的方法制作风数据,通过多帧连续的图片来播放风动画,而一旦原始植物模型改变(比如增、删了树叶,或者角色改变了位置)所有风数据又得重新制作,这样增加了迭代周期和人力成本,无法满足准确、又逼真的虚拟风动画的渲染效果。

针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。



技术实现要素:

本申请实施例提供了一种虚拟对象风动画的渲染方法及装置、存储介质、电子装置,用于解决无法满足准确、又逼真的虚拟风动画的渲染效果的问题。

根据本申请的一个实施例,提供了一种虚拟对象风动画的渲染方法,包括:

获取虚拟对象在虚拟场景中的风场数据,所述虚拟对象在虚拟场景中的风场数据为风场的风场贴图与所述虚拟对象的抽象模型碰撞后所述虚拟对象的抽象模型顶点的第一位置偏移值,所述虚拟对象在虚拟场景中的风场数据储存于所述虚拟对象的抽象模型的顶点中,并包括轴点数据和梯度数据;

获取虚拟对象的材质数据,所述虚拟对象的材质数据用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间,所述材质数据储存于所述虚拟对象的抽象模型的顶点中;

比较所述虚拟对象的抽象模型顶点的第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画。

根据本申请的另一个实施例,提供了一种虚拟对象风动画的渲染装置,包括:

第一获取模块,用于获取虚拟对象在虚拟场景中的风场数据,所述虚拟对象在虚拟场景中的风场数据为风场的风场贴图与所述虚拟对象的抽象模型碰撞后所述虚拟对象的抽象模型顶点的第一位置偏移值,所述虚拟对象在虚拟场景中的风场数据储存于所述虚拟对象的抽象模型的顶点中,并包括轴点数据和梯度数据;

第二获取模块,用于获取虚拟对象的材质数据,所述虚拟对象的材质数据用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间,所述材质数据储存于所述虚拟对象的抽象模型的顶点中;

生成模块,用于比较所述虚拟对象的抽象模型顶点的第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画。

根据本申请的又一方面,提供了一种存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述虚拟对象风动画的渲染方法对应的操作。

根据本申请的再一方面,提供了一种终端,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述虚拟对象风动画的渲染方法对应的操作。

借由上述技术方案,本申请实施例提供的技术方案至少具有下列优点:

本申请提供了一种虚拟对象风动画的渲染方法及装置、存储介质、电子装置,通过获取虚拟对象在虚拟场景中存储在抽象模型顶点中,以轴点数据、梯度数据为数据结构的风场数据,风场数据为风场的风场贴图与虚拟对象的抽象模型碰撞后抽象模型顶点的第一位置偏移值,并且获取虚拟对象用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间材质数据,比较第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画,大大减少对不同虚拟对象生成风动画的处理繁琐性,可以反复适用多种不同的虚拟对象,避免了大量的人力处理成本、数据处理繁琐性,使得渲染生成的风动画效果更加匹配真实的风动效果,从而实现准确、逼真的虚拟风动画的渲染效果。

附图说明

图1是本申请实施例的一种截图计算机的硬件结构框图;

图2是根据本申请实施例的一种虚拟对象风动画的渲染方法的流程图;

图3是本申请实施例在服饰上渲染风动画的效果图;

图4是本申请实施例通过风场渲染风动画的示意图;

图5是根据本申请实施例的一种虚拟对象风动画的渲染装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请的一个实施例所提供的方法实施例可以在手机、平板、计算机或者类似的电子终端中执行。以运行在计算机上为例,图1是本申请实施例的一种风的渲染计算机的硬件结构框图。如图1所示,计算机10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,可选地,上述计算机还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机的结构造成限定。例如,计算机10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的一种风的渲染方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。在本实施例中,处理器104用于响应人机交互指令和游戏策略,控制目标虚拟角色执行指定操作以完成游戏任务。存储器104用于存储电子游戏的程序脚本,配置信息,虚拟角色的属性信息等。

传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。

可选的,输入输出设备108还包括人机交互屏幕用于通过人机交互接口获取人机交互指令,还用于呈现游戏任务中的游戏画面;

在本实施例中提供了一种对象风动画的渲染方法,图2是根据本申请实施例的一种对象风动画的渲染方法的流程图,如图2所示,该流程包括如下步骤:

201、获取虚拟对象在虚拟场景中的风场数据。

其中,所述虚拟对象在虚拟场景中的风场数据为风场的风场贴图与所述虚拟对象的抽象模型碰撞后所述虚拟对象的抽象模型顶点的第一位置偏移值,所述虚拟对象在虚拟场景中的风场数据储存于所述虚拟对象的抽象模型的顶点中,并包括轴点数据和梯度数据。具体的,虚拟场景可以是虚拟游戏中的场景,也可以是卡通视频中的场景等需要制作实时或者烘焙画面数据的资源,所述风场为虚拟场景中需要烘焙出的模拟真实风的资源数据,在虚拟场景中,通过风场贴图烘焙在动画中产生风动画的效。另外,虚拟对象包括但不限于虚拟场景中的植物、悬挂物、角色附属配件,在对虚拟对象进行动画烘焙时,对虚拟对象的运动,均是通过虚拟对象的抽象模型进行制作、调整的,通过游戏引擎生成动画内容。本申请实施例中,虚拟对象的抽象模型的顶点中构建具有轴点数据、梯度数据的数据结构,使得风场贴图与虚拟对象的抽象模型碰撞后,产生的第一位置偏移值以轴点数据、梯度数据的数据结构存储在顶点中,从而形成虚拟对象在虚拟场景中的风场数据。其中,虚拟对象的抽象模型为在游戏引擎中制作不同动画形态、颜色的一种模型,例如,角色的抽象模型在虚拟动画中显示为一个人物角色模型,虚拟对象的抽象模型顶点为组成抽象模型的颜色、形状、效果的一种数据单元,组成完成的抽象模型,并存储各种组成抽象模型的数据。

需要说明的是,由于通过游戏引擎构建风场的风贴图具有不同的风向、风速,因此,当风场贴图与虚拟对象的抽象模型碰撞后,会使虚拟对象的抽象模型的各顶点中的轴点数据、梯度数据产生位移,从而得到,第一位置偏移值为轴点数据、梯度数据对应不同方向位置偏移的大小值,从而渲染出虚拟对象随着风摆动效果的动画,例如草被风吹动的动画、旗帜被风吹动的动画,玩家角色衣服被风吹动的动画等。

202、获取虚拟对象的材质数据。

其中,所述虚拟对象的材质数据用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间,所述材质数据储存于所述虚拟对象的抽象模型的顶点中,针对材质数据,具体可以用于表征作为虚拟对象在虚拟场景中受风场贴碰撞影响的风动效果,从而结合风场贴图的风向、风速对虚拟对象操作不同摆动效果的风动画。

需要说明的是,不同虚拟对象的材质数据不同,受风场贴图碰撞的效果不同,本申请实施例中,针对不同虚拟对象在抽象模型的顶点中定义第二位置偏移值区间,用于限定轴点数据、梯度数据产生位移的范围,即,第二位置偏移值区间为限制轴点数据、梯度数据对应不同方向位置偏移的最大值与最小值,从而达到不同的风动效果。例如,抽象模型的顶点1中的第二位置偏移值区间大,则说明顶点1基于碰撞产生较大位移,抽象模型的顶点2中的第二位置偏移值区间小,则说明顶点2基于碰撞产生较小位移,从而使生成的风动效果不同。

203、比较所述虚拟对象的抽象模型顶点的第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画。

其中,所述第三位置偏移值为虚拟对象的抽象模型在材质数据的限定下,实际受风场贴图碰撞的位移,并基于此位移生成虚拟对象的风动画。本申请实施例中,由于呈现出虚拟对象在受风场贴图碰撞时,产生与真实风动效果相同的风动画,结合具有轴点数据、梯度数据的数据结构的第一位置偏移值与体现受风动影响程度的材质数据的第二位置偏移值区间进行比较,从而限定偏移的范围,即得到第三位置偏移值,得到逼真的风动效果。例如,若第一位置偏移值超过第二位置偏移值区间,则说明偏移过大,则可以以第二位置偏移值区间的最大位移作为第三位置偏移值;若第一位置偏移值未超过第二位置偏移值区间,则说明偏移适当,则可以以第一位置偏移值作为第三位置偏移值,渲染生成与真实风动效果一样的风动画。

在一个实施方式中,为了使得渲染生成的虚拟对象的风动画效果与真实风吹动效果一致,在游戏制作过程中,通过游戏引擎配置虚拟对象的抽象模型的顶点存储有包含轴点数据、梯度数据的数据结构,所述轴点数据包括全偏移对象轴点数据、以及半偏移对象轴点数据,所述梯度数据包括全偏移对象梯度数据、以及半偏移对象梯度数据。

其中,由于虚拟对象可以为植物、悬挂物、角色附属配件等,进一步地将一个虚拟对象划分为全偏移对象以及半偏移对象,即全偏移对象为虚拟对象的抽象模型中可以受风场贴图碰撞而整体进行偏移的部分,半偏移对象为虚拟对象的抽象模型中可以受风场贴图碰撞而部分进行偏移的部分,例如,虚拟对象为植物,全偏移对象为树叶,受风吹动时,整个树叶可以全部偏移,半偏移对象为树干,受风吹动时,树干根部不偏移或者偏移较小,树干顶部偏移较大,本申请实施例不做具体限定。具体的,存储在虚拟对象的抽象模型的顶点中包括轴点数据、梯度数据,对应的,轴点数据用于限定受风场贴图碰撞而发生偏移的参照点坐标,包括全偏移轴点数据、半偏移轴点数据,梯度数据用于限定受风场贴图碰撞而发生偏移程度的参照距离范围,包括全偏移对象梯度数据、以及半偏移对象梯度数据,例如,植物的抽象模型的顶点中存储有树干轴点、树叶轴点、树干梯度、树叶梯度,本申请实施例不做具体限定。

在一个实施方式中,为了使不同的虚拟对象具有与真实场景中物体同样的风动效果,并减少游戏引擎在渲染风动画时的数据处理的资源消耗,所述获取虚拟对象在虚拟场景中的风场数据包括:分别定义待被所述风场贴图碰撞的所述虚拟对象的抽象模型的全偏移对象轴点数据、以及半偏移对象轴点数据。

本申请实施例中,由于轴点数据用于限定受风场贴图碰撞而发生偏移的参照点坐标,为了使游戏引擎可以反复对相同的虚拟对象进行不同风场贴图的自动渲染,减少风动画的渲染繁琐性,在进行风动画的渲染前,预先定义虚拟对象的抽象模型的全偏移对象轴点数据、半偏移对象轴点数据。其中,所述全偏移对象轴点数据表征为与所述半偏移对象距离最小的位置数据,所述半偏移对象轴点数据表征为与用于描述半偏移对象的抽象模型顶点的第二位置偏移值区间的材质数据所对应的预置位置,例如,全偏移对象为树叶,半偏移对象为树干,每片树叶的树叶轴点数据可以定义为树叶的各顶点中与树干距离最近的位置点,树干轴点数据可以定义为材质数据中的阈值位置,如原点,使得树干的轴点固定为一个位置点,本申请实施例不做具体限定。

需要说明的是,本申请实施例中,通过去除树枝(branch)概念,对于植物,即树,虚拟对象而言,仅仅通过树叶作为全偏移对象、树干作为半偏移对象的结构,可以少引入一级层级关系,顶点上可以节省3个浮点数据,并且材质数据计算更加简单,在减少数据计算量的同时,不会影响风动效果的渲染。

在一个实施方式中,为了使不同的虚拟对象具有与真实场景中物体同样的风动效果,并减少游戏引擎在渲染风动画时的数据处理的资源消耗,所述获取虚拟对象在虚拟场景中的风场数据之前,所述获取虚拟对象在虚拟场景中的风场数据之前,所述方法还包括:分别定义待被所述风场贴图碰撞的所述虚拟对象的抽象模型的全偏移对象梯度数据、以及半偏移对象梯度数据。

本申请实施例中,由于梯度数据用于限定受风场贴图碰撞而发生偏移程度的参照距离范围,为了使游戏引擎可以反复对相同的虚拟对象进行不同风场贴图的自动渲染,减少风动画的渲染繁琐性,在进行风动画的渲染前,预先定义虚拟对象的抽象模型的全偏移对象梯度数据、半偏移对象梯度数据。其中,所述全偏移对象梯度数据表征为根据全偏移对象的抽象模型中至少两个位置数据之间的距离以及预设最大距离计算出的,所述半偏移对象梯度数据表征为根据半偏移对象的抽象模型中至少两个位置数据之间的距离计算出的,所述预设最大距离用于表征所有全偏移对象的最大距离与单一全偏移对象的最大距离中的一个,本申请实施例中,预设最大距离为预先选定的,以便实现不同效果的风动画。例如,全偏移对象为树叶,半偏移对象为树干,树干梯度数据可以定义为一个0-1的数值区间,此数值区间是通过树干抽象模型中每个顶点至原点距离除以最远顶点至原点的最大距离得到的,树叶梯度数据同样可以定义为一个0-1的数值区间,并在计算最远顶点至原点的最大距离时,设定此最大距离是全部树叶的最大距离,还是单一树叶自己的最大距离,本申请实施例不做具体限定。

在一个实施方式中,为了使不同的虚拟对象具有与真实场景中物体同样的风动效果,并减少游戏引擎在渲染风动画时的数据处理的资源消耗,通过材质数据限定、区分不同虚拟对象受风场贴图碰撞的偏移程度,所述储存于所述虚拟对象的抽象模型的顶点中的材质数据包括全偏移对象材质数据、半偏移对象材质数据,所述获取虚拟对象在虚拟场景中的风场数据包括:分别配置各顶点中全偏移对象材质数据、半偏移对象材质数据对应于uv坐标空间的最大偏移值以及形状弯曲参数。

对于本申请实施例,基于虚拟对象的抽象模型包含有全偏移对象、半偏移对象的结构,为了体现不同部分基于材质不同而产生不同的风动效果,且材质数据用于描述虚拟对象的抽象模型顶点的第二位置偏移值区间,因此,预先配置虚拟对象的抽象模型的各顶点中全偏移对象材质数据、半偏移对象材质数据对应于uv坐标空间的最大偏移值以及形状弯曲参数。其中,本申请实施例中的位置、偏移等空间数据均为基于uv坐标空间构建的,对应的,对于材质数据则从偏移距离、形状弯曲程度两个维度来限定全偏移对象、半偏移对象受风成贴的碰撞而引起偏移的范围,即第二偏移值区间为基于最大偏移值与形状弯曲参数确定的,对于配置的具体数值本申请实施例不做具体限定。例如,树叶leaf材质数据配置包括树叶弯曲曲线程度值leafbend,以及树叶顶部最大偏移距离值leafmovement,树干trunk材质数据配置包括树干弯曲曲线程度值trunkbend,程度值越大则说明根部的受风吹动效果越差(显示出的动画效果为越硬),以及树干顶部最大偏移距离trunkmovement。

在一个实施方式中,为了实现虚拟对象在虚拟场景中受风场贴图的碰撞影响,从而产生逼真效果的风动画,减少人为制作风动效果帧动画的资源效果,所述获取虚拟对象在虚拟场景中的风场数据包括:配置与所述虚拟场景匹配的风场贴图,并确定所述风场贴图的风向参数、风速参数;当所述风场贴图与所述虚拟对象的抽象模型碰撞后,根据所述风向参数、风速参数对所述虚拟对象的抽象模型的顶点中的轴点数据、梯度数据进行偏移计算,生成第一偏移位置值,并作为所述虚拟对象在虚拟场景中的风场数据存储在所述虚拟对象的抽象模型的顶点中。

本申请实施例中,为了呈现出虚拟场景中自然风(环境风、静态风)吹动的风动效果,风场贴图为一个uv贴图动画,根据不同的自然风场景的需求,可以选择平铺尺寸为虚拟环境中的100米、50米等,并设定风向、风速,即风贴图移动的方向、速度,本申请实施例不做具体限定。具体的,环境风在贴图中的贴图尺寸是虚拟场景中全地图统一的,通过游戏引擎中mf_treewind里的贴图参数ambientwind的进行输入设定,本申请实施例不做具体限定。

需要说明的是,在基于游戏引擎对不同虚拟对象烘焙风动画时,按照环境风的风场贴图移动的风向、风速与植物、悬挂物、角色附属配件等虚拟对象的抽象模型进行碰撞。由于虚拟对象的抽象模型顶点中包括全偏移对象、半偏移对象的数据结构分别对应的轴点数据、梯度数据,因此,在碰撞时,基于风场贴图的风向参数、风速参数对轴点数据、梯度数据进行偏移计算,生成第一偏移位置值,即为虚拟对象受风吹动的偏移值。

另外,不同的虚拟对象在游戏引擎中进行风动画的烘焙时,均可抽象为全偏移对象、半偏移对象,例如,虚拟对象为游戏角色,可以是玩家控制角色(player-controlledcharacter,pcc)或者是非玩家角色(non-playercharacter,npc),对应的半偏移对象为骨骼模型,可以通过设定通用材质数据来确定角色的骨骼模型不受风场贴图碰撞所影响,即通用材质数据配置为一个固定值,使得碰撞时,不存在第二位置偏移值区间,或者通用材质数据对应一个固定原点,使得虚拟对象在被风场贴图碰撞时,不会发生偏移。而对于骨骼模型上附着的衣服、毛发等则作为全偏移对象,在设定通用材质数据时,配置为受风场贴图碰撞影响,即配置为存在第二位置偏移值区间,从而使衣服、毛发等于风场贴图碰撞时,产生偏移。其中,对于游戏角色的骨骼模型,可以通过顶点色的一个通道来确定为梯度数据,还可以通过掩码贴图的一个管道确定为梯度数据,作为浮点值存储在纹理贴图的坐标数据uv中,即说明对应存储在抽象模型的顶点中。

在一个实施方式中,为了使虚拟对象在于风场贴图碰撞时与真实的不同对象产生相同的风动效果,所述配置与所述虚拟场景匹配的风场贴图,并确定所述风场贴图的风向参数、风速参数包括:获取所述虚拟对象的材质数据中的通用材质数据,所述通用材质数据用于确定所述虚拟对象的抽象模型与所述风场贴图是否产生碰撞;根据所述通用材质数据,从材质文件确定出包括全偏移对象材质数据、半偏移对象材质数据的材质数据,并存储于所述虚拟对象的抽象模型的顶点中。

针对静态的环境风的烘焙过程中,与真实的风动效果相比,虚拟场景中不同虚拟对象被风成贴图碰撞时,应该产生不同的风动效果,例如,游戏中石头、房屋等即使被风场贴图碰撞,也不会出现偏移,树、旗帜、角色衣服等被风场贴图碰撞,会产生风动效果,从而使得虚拟场景中的风吹效果更为真实,因此,通过对不同虚拟对象配置通用材质数据,来确定是否受风动所影响。其中,不同虚拟对象的通用材质参数可以预先存储在抽象模型的顶点中,当需要进行风动画的烘焙时,获取通用材质数据,然后基于材质文件确定全偏移对象材质数据、半偏移对象材质数据的材质数据,存储在抽象模型的顶点中。其中,材质文件为预先配置有匹配不同通用材质数据所对应全偏移对象材质数据、半偏移对象材质数据的材质数据,当需要烘焙风动画时,进行调取查询,从而将虚拟对象的材质数据存储在抽象模型的顶点中,提高对虚拟对象生成风动画的处理效率,减少风动画的制作难度。

需要说明的是,在游戏引擎中进行静态风对虚拟对象的风动画烘焙时,材质文件中各个通用材质数据的生成方法为基于输入虚拟对象表面各个区域的材质标识,比较材质标识和材质路径,包含有虚拟对象各个顶点的材质数据的材质文件。

在一个实施方式中,为了进一步限定及说明,所述比较所述虚拟对象的抽象模型顶点的第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值包括:若所述第一位置偏移值处于所述第二位置偏移值区间,则将所述第一位置偏移值确定为第三位置偏移值;若所述第一位置偏移值超出所述第二位置偏移值区间,则基于所述第二位置偏移值区间的极值确定为第三位置偏移值。

具体的,在确定第三位置偏移值时,判断第一位置偏移值处于第二位置偏移值区间,则说明第一位置偏移值没有超过虚拟对象材质的限定,即虚拟对象受风场贴图碰撞所产生的偏移量可以直接作为风动画的偏移值,因此,将第一位置偏移值直接确定为第三位置偏移值。判断第一位置偏移值超过第二位置偏移区间,则说明第一位置偏移值超过虚拟对象材质的限定,即虚拟对象受风场贴图碰撞所产生的偏移量不能作为风动画的偏移值,因此,基于第二位置偏移值区间的极值确定为第三位置偏移值。一般的,第二位置偏移值区间设定为一个0值到特定值的区间范围,从而限定受材质影响虚拟对象可以偏移的位置范围,区间越小,说明虚拟对象受风吹动的效果越小,区间越大,说明虚拟对象受风吹动的效果越大,因此,当第一位置偏移值超过第二位置偏移区间,说明受风吹动的效果已经超过了虚拟对象能够偏移的效果,因此,将第二位置偏移区间的极大值作为第三位置偏移值,从而进一步的提高虚拟对象的风动画与真实受风吹动的风动效果一致性。

在一个实施方式中,为了使存储在虚拟对象的抽象模型的顶点中的以最优的数据结构形式进行渲染,从而提高游戏制作的效率,所述存储在虚拟对象的抽象模型的顶点中的风场数据还包括用于区分虚拟对象相位的随机值。

具体的,存储在顶点中的轴点数据、梯度数据分别以浮点值表征纹理贴图的坐标数据,对于树叶为全偏移对象、树干为半偏移对象的场景中,由于树干的轴点可对应于材质数据中的一个固定原点,以表征树干的轴点(如树根)不可偏移,存储在顶点中的浮点值包括:树叶轴点的x轴坐标,树叶轴点的y轴坐标,树叶轴点的z轴坐标,树叶的梯度系数,树干的梯度系数,以及一个用于区分虚拟对象相位的随机值。

其中,树叶轴点(leafpivot),用于表征树叶被吹动时的转动轴点,为树叶根部。树叶梯度(leafgradient),梯度值越大表征被风吹动时,偏移得越远,所以树叶一般根部梯度为0,顶部梯度接近1。树干梯度(trunkgradient),梯度值越大的地方吹得越远,所以树干一般根部梯度为0,顶部梯度接近1。树干轴点在原点,如树根,因此树干轴点可以直接设定。树叶随机值(partrand):此值是为了区分每个树叶动画相位,避免相同相位树叶重复烘焙。

本申请实施例中,对于虚拟对象的烘焙,可以使用houdini等多种特效制作工具进行烘焙,在一个示例中,采用houdini组件进行烘焙,烘培的操作步骤包括:在虚拟场景中选中物体(虚拟对象),可以是多个物体甚至是有staticmesh组件蓝图,一次可以烘培多个物体;通过houdiniengienshelf工具集里面的baketreepivot选取houdini物体进行移动或者修改参数;在trunkmaterialstring里面输入树干材质名称里的标识字符串,任意字符,hda文件对材质路径进行比较,基于比较结果确定出顶点中的树干。比如材质名叫mi_tree_lvshugan_01_lod1的可以输入"lvshugan",或者"shugan"。对于多个材质,字符串之间用逗号连接,比如:"shugan,mutuo,trunk"在leafmaterialstring里面输入树叶材质的标识字符串,方法同上。触发recookasset工具进行烘培,烘培结束后houdini物体由houdinilogo变为一个展示材质效果的标识球时,完成正确烘焙。

如图3所示为本申请实施例在服饰上渲染风动画的效果图,装饰物和毛发朝右边摆放,烘托出起风的效果。

在本实施例中的一个应用场景中,具体渲染布料的风动画的方法,首先顶点中的轴点数据和树干梯度数据配置为固定参数,以表征不受风动影响。角色模型一般比较复杂,为了提高数据处理效率,利用角色模型uv包裹一张掩码贴图来作为梯度数据更为方便。具体的,可以采用两种方式制作布料,一种是使用dynamicbone(动态骨骼),另外一种是用布料物理。对于布料物理,可以精确控制了每个顶点的位移动画,在角色材质末端加入mf_skelwind材质函数,此材质函数可以输出一个顶点位移,这个位移就是被风吹动的距离和方向。游戏引擎会在顶点位置的基础之上加偏移值,这样就把风效果叠加在布料运动显示的效果上。

本申请实施例中,为了提高对不同虚拟对象进行风动画的制作效果,材质数据的设置和调节步骤包括:使用风测试工具把当前场景风设置到0.8的参数位;配置材质wind:general组里面的enablewind;调节leafmovement,leafmovementrange确保树叶针对不同风级效果不同;调节树叶硬度leafstiffness,弹性springscal等于树叶烘焙相关的参数;在此过程中可以同时显示风动效果,并同时对上述参数进行修改设定,以达到最优的预期风动效果。另外,为了避免多个风场贴图对虚拟对象的共同作用,清空风场数据的方法:在contentbrowser里面右键点击需要清空风数据的模型;选择scriptedactions>resetmeshwinddata;最后保存模型。

在本实施例中,风场贴图为环境风,当然的,虚拟场景中虚拟对象产生风动效果不仅仅会受到环境风的影响,对于角色的运动或者释放技能,可能会产生动态的风,使得草等虚拟对象在受到环境风的影响时,同时受到动态风的影响,例如,在环境风作用下,植物朝一个方向摆动,在动态风作用下,植物朝多个方向回来摆动,环境风+动态风则是两个效果的叠加,如图4所示中,分别得到的单一环境风的作用下树的风动效果,单一噪音风的作用下树的风动效果,以及环境风与噪音风共同作用下树的风动效果。

其中,动态风,如噪音风是指在游戏运行过程中在地图局部区域产生风,和环境风不同,动态风支持方向改变。动态风是通过虚拟对象上面的若干个风(包括噪声风、特效风、角色风等)实现的,使用动态风可以实现如风扇或玩家挥动武器产生的风效果。其中,环境风是由一个uv贴图动画完成,默认的平铺尺寸为100米(可选),所以它只能控制大范围内的风强弱,而对于复杂的风抖动效果还是需要动态风来配合完成。

以动态风管理器bp_dynamicwindmanager来作为实现动态风的工具为例,在每帧tick时蓝图的simulatestep函数执行了如下步骤:

检查本帧收集到的所有发动机motor(motor负责往风场里面“注入风”),把它们加入pendingupload(*)队列,如果队列溢出(等待上传的motor太多),则直接丢弃多余的motor(默认最多10个,太远的motor在加入时已经被剔除了);取队列里最早的一个motor上传(画)到rt(rt_velocity_*);流体解算(见后面风模拟说明)产生风往前推动的效果;模拟完成后会产生一张动态风场的rt,里面保存了玩家周围(默认30米)动态风的方向速度(矢量),然后在物体材质里面把它用mf_applydynamicwind同环境风一起加入材质函数mf_treewind计算最终偏移值wpo(worldpositionoffset),从而得到动态风的风动效果。

下面对烘焙树干baketreepivot的输入参数进行解释和说明:

trunkmaterialstring,树干材质名称里的标识字符串,任意字符,通过hda和材质路径比较,比如材质名叫~mi_tree_lvshugan_01_lod1~的可以输入"lvshugan",或者"shugan"。这里的默认值是"shugan"。对于多个材质,字符串之间用逗号连接,比如:"shugan,mutuo,trunk"。

leafpivotmethod,树叶轴点计算方法。默认(default)会使用最靠近树干的点当轴点,*topmost*和bottommost会分别使用树叶上最顶端或底端的顶点作为轴点。

leafgradientmethod,树叶梯度计算方法。默认使用距离(distance)计算,或者可以选择渐变方向,往上(up)或往下(down)。

rootmethod,计算树干轴点的方法,默认为原点,你可以选择topmost或者bottommost。需要注意的是这个方法只影响烘培出的数据,材质里面树干轴点确定的特定原点。

isolatedleavesmindist,使用isolatedleafbounding时,判断块是不是属于同一片叶子时的最小距离。这个值在isolatedleavesin-boundingmethod和isolatedleavesout-boundingmethod为mergebymindistance时有用。同时这个值在合并in-bounding叶子和out-bounding叶子时有用。

isolatedleavesin-boundingmethod,isolatedleafbounding包围体内(相交)合并叶子时的判断方法。

unmerge:不合并。

mergebymindistance:距离小于isolatedleavesmindist的块是同一片叶子。

mergebyintersection:相交的块认为是同一片叶子。

isolatedleavesout-boundingmethod

isolatedleafbounding包围体外合并叶子时的判断方法。

unmerge:不合并。

mergebymindistance:距离小于isolatedleavesmindist的块是同一片叶子。

mergebyintersection:相交的块认为是同一片叶子。

perleafgradient,计算leafgradient时,用每一片叶子的长度当基数。默认时按最长的那片叶子当基数的,这样的好处是可以让短的叶子移动距离小,长的叶子移动距离大,比较合乎常理,但有时候美术做了一个特长的叶子,导致其它大部分叶子梯度都比较黑,这时候可能就需要用上这个选项。

uniformscale,缩放值,太大或者太小物体如果烘培结果不对,可以尝试修改这个值。美术上传模型时把米和厘米搞错了时,最好也修改下这个值,比如:100。

mesh,这里选择里需要烘培的模型,输入类型选择worldoutlinerinput。支持多选,支持烘培蓝图里面的staticmesh。烘培多个物体时必须保证所选物体在地图上都是同一位置。

trunkbounding,树干包围体。物体分块后,所有与此包围体相交的块会被认为都是树干。

leafbounding,树叶包围体。物体分块后,所有与此包围体相交的块会被认为都是树叶,并且每一个包围体是一片叶子,可用于把“两个叶子”合并成“一个叶子”。

faketrunk,如果需要的树干位置不在模型上,可以“伪造”一个树干。比如烘培风筝动画,风筝摆动的轴点不在风筝模型上,这次可以用此功能在空间任意位置放一个球当树干用,烘培结束后这个球就没用了。

blackoutbounding,删除包围体内顶点的动画数据。做布料摆动时,用它来保证根部顶点不被“摆出去”。

isolatedleafbounding,isolatedleafbounding包围体,这个盒子里面的块都会被认为是多个树叶,这一点和leafbounding不一样,具体见下面isolatedleafbounding算法示意。

在烘焙过程中,涉及的算法包括leafbounding和isolatedleafbounding,在此进行说明。leafbounding是为了合并单片叶子的,每个bounding是一片叶子,下图这个一串两个灯笼如果让houdini自动分组的话会被认为是两片叶子,一动画就分开了,这时用leafbounding可以让左边两个灯笼被算作一个叶子。isolatedleafbounding是一个很强大的功能,对灌木类植物、花、草这些尤其好使,因为这类植物很容易被自动分块功能错误的认为花茎和顶部叶子部分是两个“叶子”,其实它是一片叶子。解决方案之一是用n个leafbounding把每个叶子框起来,但这样工作量巨大并且如下图这样花茎中间挤到一块根本就难以框选,这时候就需要isolatedleafbounding登场。

在本实施例的一个实施方式中,获取虚拟对象的材质数据包括以下至少之一:获取虚拟对象的通用材质数据,其中,通用材质数据用于指示虚拟对象是否需要开启风动画、是否为树叶,树叶在树状图中的父节点是否为树干,是否为草类;获取虚拟对象的树干材质数据,其中,树干材质数据用于指示虚拟对象的树干弯曲曲线形状和树干顶部最大移动距离;获取虚拟对象的树叶材质数据,其中,树叶材质数据用于指示虚拟对象的树叶弯曲曲线程度,树叶顶部最大移动距离,噪音风导致的树叶顶点移动距离,噪音风的速度,叶子硬度,树叶的拉伸长度。

本实施例的材质数据可以分为三组(通用材质数据,树干材质数据,树叶材质数据),每一组都包括多个参量,在此进行举例说明:

通用材质数据,包括:

enablewind:需要风动画就开启它。

isleaves:树叶勾上,树干不勾。

notrunk:对于树叶来说,如果父节点(树干)不会动则勾选上,可以优化性能。

windonground:草类用,设置风的方向是往斜上吹的,用它限制风只在水平吹,地面植物需要勾选上,避免草往斜上吹。

树干材质数据wind::trunk,包括:

trunkbend:树干弯曲曲线形状,值越大标识根部越硬。通过指数函数(pow)实现,值越大树干从顶部弯曲多,值越小树干就从底部开始弯曲。

trunkmovement:树干顶部最大移动距离。

树叶材质数据wind::leaf,包括:

leafbend:树叶弯曲曲线程度,值越大标识根部越硬。leafbend.算法同trunkbend一样,叶子上面这个效果没trunk上明显,因为一般叶子顶点密度不够,注意观察左上角那片叶子的弯曲弧线;

leafmovement:树叶顶部最大移动距离;

leafmovementrange:风噪音导致的树叶顶点移动距离,树叶顶点最终将在leafmovement+/-leafmovementrange,树叶“抖动”距离,顶点在+/-leafmovementrange这个范围移动附近抖动。

leafnoisespeed:风噪音速度,决定树叶抖动速度。这个值改动的需要其实不大,基本默认值就行。右边植物“抖”得很快,一般默认值0.1就行,抖动强度用leafmovementrange来调整更好;

leafstiffness:叶子硬度,通过往轴点方向缩放风噪音实现。设置左上角叶子,左边的“妖娆”些,通过这个值可以把“面条”捋成“钢条”。

springscale:默认树叶有0.2的弹簧效果,也就是树叶吹动时可以“拉伸”出20%的长度。设置植物右边部分的叶子,风大时右边植物比左边植物叶子“拉”得更长。因为计算偏移时每个顶点只考虑自己,没有考虑叶子前部分其它顶点的leafbend,所以即springscale为0时有些叶子总体上看还是长了点,这个就这样。

pivotonfoot:草类用,尤其是片草,强制轴点在正下方。

本申请实施例提供了一种虚拟对象风动画的渲染方法,通过获取虚拟对象在虚拟场景中存储在抽象模型顶点中,以轴点数据、梯度数据为数据结构的风场数据,风场数据为风场的风场贴图与虚拟对象的抽象模型碰撞后抽象模型顶点的第一位置偏移值,并且获取虚拟对象用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间材质数据,比较第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画,大大减少对不同虚拟对象生成风动画的处理繁琐性,可以反复适用多种不同的虚拟对象,避免了大量的人力处理成本、数据处理繁琐性,使得渲染生成的风动画效果更加匹配真实的风动效果,从而实现准确、逼真的虚拟风动画的渲染效果。

进一步的,作为对上述图2所示方法的实现,本发明实施例提供了一种对象风动画的渲染装置,如图5所示,该装置包括:

第一获取模块31,用于获取虚拟对象在虚拟场景中的风场数据,所述虚拟对象在虚拟场景中的风场数据为风场的风场贴图与所述虚拟对象的抽象模型碰撞后所述虚拟对象的抽象模型顶点的第一位置偏移值,所述虚拟对象在虚拟场景中的风场数据储存于所述虚拟对象的抽象模型的顶点中,并包括轴点数据和梯度数据;

第二获取模块32,用于获取虚拟对象的材质数据,所述虚拟对象的材质数据用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间,所述材质数据储存于所述虚拟对象的抽象模型的顶点中;

生成模块33,用于比较所述虚拟对象的抽象模型顶点的第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画。

进一步地,所述轴点数据包括全偏移对象轴点数据、以及半偏移对象轴点数据,所述梯度数据包括全偏移对象梯度数据、以及半偏移对象梯度数据。

进一步地,所述第一获取模块,具体用于分别定义待被所述风场贴图碰撞的所述虚拟对象的抽象模型的全偏移对象轴点数据、以及半偏移对象轴点数据,所述全偏移对象轴点数据表征为与所述半偏移对象距离最小的位置数据,所述半偏移对象轴点数据表征为与用于描述半偏移对象的抽象模型顶点的第二位置偏移值区间的材质数据所对应的预置位置。

进一步地,所述第二获取模块,具体用于分别定义待被所述风场贴图碰撞的所述虚拟对象的抽象模型的全偏移对象梯度数据、以及半偏移对象梯度数据,所述全偏移对象梯度数据表征为根据全偏移对象的抽象模型中至少两个位置数据之间的距离以及预设最大距离计算出的,所述半偏移对象梯度数据表征为根据半偏移对象的抽象模型中至少两个位置数据之间的距离计算出的。

进一步地,所述储存于所述虚拟对象的抽象模型的顶点中的材质数据包括全偏移对象材质数据、半偏移对象材质数据,所述第一获取模块,还用于分别配置各顶点中全偏移对象材质数据、半偏移对象材质数据对应于uv坐标空间的最大偏移值以及形状弯曲参数,所述第二偏移值区间为基于所述最大偏移值与所述形状弯曲参数确定的。

进一步地,所述第一获取模块包括:

确定单元,用于配置与所述虚拟场景匹配的风场贴图,并确定所述风场贴图的风向参数、风速参数;

存储单元,用于当所述风场贴图与所述虚拟对象的抽象模型碰撞后,根据所述风向参数、风速参数对所述虚拟对象的抽象模型的顶点中的轴点数据、梯度数据进行偏移计算,生成第一偏移位置值,并作为所述虚拟对象在虚拟场景中的风场数据存储在所述虚拟对象的抽象模型的顶点中。

进一步地,

所述确定单元,还用于获取所述虚拟对象的材质数据中的通用材质数据,所述通用材质数据用于确定所述虚拟对象的抽象模型与所述风场贴图是否产生碰撞;

所述存储单元,还用于根据所述通用材质数据,从材质文件确定出包括全偏移对象材质数据、半偏移对象材质数据的材质数据,并存储于所述虚拟对象的抽象模型的顶点中。

进一步地,所述确定模块,具体用于若所述第一位置偏移值处于所述第二位置偏移值区间,则将所述第一位置偏移值确定为第三位置偏移值;若所述第一位置偏移值超出所述第二位置偏移值区间,则基于所述第二位置偏移值区间的极值确定为第三位置偏移值。

进一步地,所述风场数据还包括用于区分虚拟对象相位的随机值。

进一步地,所述虚拟对象包括但不限于虚拟场景中的植物、悬挂物、角色附属配件。

本申请实施例提供了一种虚拟对象风动画的渲染装置,通过获取虚拟对象在虚拟场景中存储在抽象模型顶点中,以轴点数据、梯度数据为数据结构的风场数据,风场数据为风场的风场贴图与虚拟对象的抽象模型碰撞后抽象模型顶点的第一位置偏移值,并且获取虚拟对象用于描述所述虚拟对象的抽象模型顶点的第二位置偏移值区间材质数据,比较第一位置偏移值和第二位置偏移值区间,确定所述虚拟对象的抽象模型顶点的第三位置偏移值,生成所述虚拟对象在虚拟场景中的风动画,大大减少对不同虚拟对象生成风动画的处理繁琐性,可以反复适用多种不同的虚拟对象,避免了大量的人力处理成本、数据处理繁琐性,使得渲染生成的风动画效果更加匹配真实的风动效果,从而实现准确、逼真的虚拟风动画的渲染效果。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

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