首页 / 专利库 / 资料储存系统 / 高速缓冲存储器 / 顶点缓存 / 一种Unity中模型动画快速渲染的方法及终端

一种Unity中模型动画快速渲染的方法及终端

阅读:687发布:2020-05-14

专利汇可以提供一种Unity中模型动画快速渲染的方法及终端专利检索,专利查询,专利分析的服务。并且本 发明 提供一种Unity中模型动画快速 渲染 的方法及终端,通过对第一模型动画进行 顶点 变形 ,生成对应的第一模型动画序列 帧 集合并存储;根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同;这种缓存第一模型动画的顶点变形的序列帧集合的方法,可以避免每次对第二模型动画进行渲染之前都需要进行顶点变形计算后得到序列帧的问题,大大减少了性能开销,提高了制作三维模型动画的效率。,下面是一种Unity中模型动画快速渲染的方法及终端专利的具体信息内容。

1.一种Unity中模型动画快速渲染的方法,其特征在于,包括以下步骤:
S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列集合并存储;
S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
2.根据权利要求1所述的Unity中模型动画快速渲染的方法,其特征在于,所述S1具体为:
每隔预设时间间隔,对所述第一模型动画进行截取并烘焙,获取并保存对应的第一模型动画序列帧。
3.根据权利要求1所述的Unity中模型动画快速渲染的方法,其特征在于,所述S2根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染之前还包括:
为第二模型动画定义一个第二模型动画序列帧集合,初始化时将所述第二模型动画序列帧集合赋值为所述第一模型动画序列帧集合。
4.根据权利要求3所述的Unity中模型动画快速渲染的方法,其特征在于,所述S2还包括:
定义一个第二模型动画集合,用于存储多个第二模型动画,每一个第二模型动画具有动画时间属性,初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值。
5.根据权利要求4所述的Unity中模型动画快速渲染的方法,其特征在于,所述S2中所述根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染包括:
根据第二模型动画集合里的每个第二模型动画的动画时间属性值计算出对应的帧序号,根据每个第二模型动画的帧序号确定对应的第二模型动画序列帧集合中的第二模型动画序列帧;
根据所述每一个第二模型动画对应的第二模型动画序列帧、位置、旋转度以及材质,对所述每个第二模型动画进行渲染。
6.一种Unity中模型动画快速渲染的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;
S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
7.根据权利要求1所述的Unity中模型动画快速渲染的终端,其特征在于,所述S1具体为:
每隔预设时间间隔,对所述第一模型动画进行截取并烘焙,获取并保存对应的第一模型动画序列帧。
8.根据权利要求1所述的Unity中模型动画快速渲染的终端,其特征在于,所述S2根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染之前还包括:
为第二模型动画定义一个第二模型动画序列帧集合,初始化时将所述第二模型动画序列帧集合赋值为所述第一模型动画序列帧集合。
9.根据权利要求8所述的Unity中模型动画快速渲染的终端,其特征在于,所述S2还包括:
定义一个第二模型动画集合,用于存储多个第二模型动画,每一个第二模型动画具有动画时间属性,初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值。
10.根据权利要求9所述的Unity中模型动画快速渲染的终端,其特征在于,所述S2中所述根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染包括:
根据第二模型动画集合里的每个第二模型动画的动画时间属性值计算出对应的帧序号,根据每个第二模型动画的帧序号确定对应的第二模型动画序列帧集合中的第二模型动画序列帧;
根据所述每一个第二模型动画对应的第二模型动画序列帧、位置、旋转度以及材质,对所述每个第二模型动画进行渲染。

说明书全文

一种Unity中模型动画快速渲染的方法及终端

技术领域

[0001] 本发明涉及计算机图形学领域,尤其涉及一种Unity中模型动画快速渲染的方法及终端。

背景技术

[0002] 目前,在Unity中制作一个三维模型动画(比如一只鱼的游动),一般使用Unity的动画系统,该系统会通过Unity的SkinMeshRender组件计算模型的顶点变形,然后对变形后的模型动画进行渲染;但是顶点变形会有一定的性能开销,特别是在移动平台上这种开销就更加明显了;如果需要成百上千的同种模型动画,这种变形计算就会造成巨大的性能瓶颈,影响三维模型动画制作的效率。

发明内容

[0003] 本发明所要解决的技术问题是:提供一种Unity中模型动画快速渲染的方法及终端,减少系统的性能开销。
[0004] 为了解决上述技术问题,本发明采用的技术方案为:
[0005] 一种Unity中模型动画快速渲染的方法,包括以下步骤:
[0006] S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列集合并存储;
[0007] S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
[0008] 为了解决上述技术问题,本发明采用的另一种技术方案为:
[0009] 一种Unity中模型动画快速渲染的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0010] S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;
[0011] S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
[0012] 本发明的有益效果在于:通过对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同;通过缓存第一模型动画的序列帧集合的方法,可以避免每次对第二模型动画进行渲染之前都需要进行顶点变形得到序列帧计算的问题,大大减少了性能开销,提高了制作三维模型动画的效率。附图说明
[0013] 图1为本发明实施例的Unity中模型动画快速渲染的方法流程图
[0014] 图2为本发明实施例的Unity中模型动画快速渲染的结构示意图;
[0015] 图3为本发明实施例的Unity中模型动画快速渲染的具体方法流程图;
[0016] 图4为本发明实施例的Unity中模型动画快速渲染的第一模型动画的烘焙方法流程图;
[0017] 图5为本发明实施例的Unity中模型动画快速渲染的渲染类初始化的方法流程图;
[0018] 图6为本发明实施例的Unity中模型动画快速渲染的渲染方法流程图;
[0019] 标号说明:
[0020] 1、Unity中模型动画快速渲染的终端;2、存储器;3、处理器。

具体实施方式

[0021] 为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
[0022] 本发明最关键的构思在于:对模型动画顶点变形后得到的序列帧集合进行缓存,相同的其他模型动画进行渲染时直接调用所述缓存的序列帧集合。
[0023] 请参照图1和图3,
[0024] 一种Unity中模型动画快速渲染的方法,包括以下步骤:
[0025] S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;
[0026] S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
[0027] 从上述描述可知,本发明的有益效果在于:通过对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同;这种缓存第一模型动画的顶点变形的序列帧集合的方法,可以避免每次对第二模型动画进行渲染之前都需要进行顶点变形计算后得到序列帧的问题,大大减少了性能开销,提高了制作三维模型动画的效率。
[0028] 进一步的,所述S1具体为:
[0029] 每隔预设时间间隔,对所述第一模型动画进行截取并烘焙,获取并保存对应的第一模型动画序列帧。
[0030] 由上述描述可知,通过每隔预设时间对第一模型动画进行截取并烘焙,缓存对应的第一模型序列帧,避免后续再去计算第一模型动画的序列帧,节约了CPU资源。
[0031] 进一步的,所述S2根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染之前还包括:
[0032] 为第二模型动画定义一个第二模型动画序列帧集合,初始化时将所述第二模型动画序列帧集合赋值为所述第一模型动画序列帧集合。
[0033] 由上述描述可知,由于第一模型动画与第二模型动画相同,第二模型动画序列帧集合初始化赋值为所述第一模型动画序列帧集合,避免了第二模型动画的序列帧的计算,减少了性能开销。
[0034] 进一步的,所述S2还包括:
[0035] 定义一个第二模型动画集合,用于存储多个第二模型动画,每一个第二模型动画具有动画时间属性,初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值。
[0036] 由上述描述可知,通过初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值,可以最大限度打破每个第二模型动画的一致性,提升整体画面的动态效果。
[0037] 进一步的,所述S2中所述根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染包括:
[0038] 根据第二模型动画集合里的每个第二模型动画的动画时间属性值计算出对应的帧序号,根据每个第二模型动画的帧序号确定对应的第二模型动画序列帧集合中的第二模型动画序列帧;
[0039] 根据所述每一个第二模型动画对应的第二模型动画序列帧、位置、旋转度以及材质,对所述每个第二模型动画进行渲染。
[0040] 由上述描述可知,通过每个第二模型动画的时间属性值计算出对应的序列帧号,再根据动画序列帧、位置、旋转度以及材质,以完成对每个第二模型动画的完整的渲染工作。
[0041] 请参照图2,一种Unity中模型动画快速渲染的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0042] S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;
[0043] S2、根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同。
[0044] 从上述描述可知,本发明的有益效果在于:通过对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同;这种缓存第一模型动画的顶点变形的序列帧集合的方法,可以避免每次对第二模型动画进行渲染之前都需要进行顶点变形计算后得到序列帧的问题,大大减少了性能开销,提高了制作三维模型动画的效率。
[0045] 进一步的,所述S1具体为:
[0046] 每隔预设时间间隔,对所述第一模型动画进行截取并烘焙,获取并保存对应的第一模型动画序列帧。
[0047] 由上述描述可知,通过每隔预设时间对第一模型动画进行截取并烘焙,缓存对应的第一模型序列帧,避免后续再去计算第一模型动画的序列帧,节约了CPU资源。
[0048] 进一步的,所述S2根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染之前还包括:
[0049] 为第二模型动画定义一个第二模型动画序列帧集合,初始化时将所述第二模型动画序列帧集合赋值为所述第一模型动画序列帧集合。
[0050] 由上述描述可知,由于第一模型动画与第二模型动画相同,第二模型动画序列帧集合初始化赋值为所述第一模型动画序列帧集合,避免了第二模型动画的序列帧的计算,减少了性能开销。
[0051] 进一步的,所述S2还包括:
[0052] 定义一个第二模型动画集合,用于存储多个第二模型动画,每一个第二模型动画具有动画时间属性,初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值。
[0053] 由上述描述可知,通过初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值,可以最大限度打破每个第二模型动画的一致性,提升整体画面的动态效果。
[0054] 进一步的,所述S2中所述根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染包括:
[0055] 根据第二模型动画集合里的每个第二模型动画的动画时间属性值计算出对应的帧序号,根据每个第二模型动画的帧序号确定对应的第二模型动画序列帧集合中的第二模型动画序列帧;
[0056] 根据所述每一个第二模型动画对应的第二模型动画序列帧、位置、旋转度以及材质,对所述每个第二模型动画进行渲染。
[0057] 由上述描述可知,通过每个第二模型动画的时间属性值计算出对应的序列帧号,再根据动画序列帧、位置、旋转度以及材质,以完成对每个第二模型动画的完整的渲染工作。
[0058] 实施例一
[0059] 请参照图1、图3、图4、图5和图6,
[0060] 一种Unity中模型动画快速渲染的方法,包括步骤:
[0061] S01、将第一模型动画文件导入Unity,并给其添加动画控制器和渲染器,生成第一模型动画预制件;
[0062] 具体的,所述控制器具体为Unity中的Animation组件,所述渲染器具体为Unity中的SkinMeshRenderer组件。
[0063] S02、运行Unity程序时,实例化第一模型动画的预制件对象,获取到所述Animation组件和SkinMeshRenderer组件,获取SkinMeshRenderer组件的材质(sharedMeterial的成员变量),保存到变量mat;
[0064] 其中若导入的模型带有骨骼动画的话,Unity引擎会自动添加SkinMeshRenderer组件。
[0065] S1、对第一模型动画进行顶点变形,生成对应的第一模型动画序列帧集合并存储;
[0066] 具体来说,即:每隔预设时间间隔,对所述第一模型动画进行截取并烘焙,获取并保存对应的第一模型动画序列帧。
[0067] 参照图4,所述S1完成了对第一模型动画序列帧的烘焙,具体包括:
[0068] S11、为所述第一模型动画定义一个序列帧数量frameCount,创建一个长度为frameCount的mesh1数组,所述mesh1数组用于存储第一模型动画的序列帧信息;
[0069] 获取Animation组件中的动画时间长度,保存到变量length;
[0070] S12、遍历mesh1数组;
[0071] S13、定义一个变量i,所述i的取值为0至(frameCount-1),设置第一模型动画当前的序列帧对应为i*length/frameCount,调用SinMeshRenderer组件的BakeMesh方法烘焙当前的序列帧,并依次存入mesh1数组中。
[0072] S2、为第二模型动画定义一个第二模型动画序列帧集合,初始化时将所述第二模型动画序列帧集合赋值为所述第一模型动画序列帧集合,所述第二模型动画与第一模型动画相同;
[0073] 定义一个第二模型动画集合,用于存储多个第二模型动画,每一个第二模型动画具有动画时间属性,初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值;
[0074] 根据第二模型动画集合里的每个第二模型动画的动画时间属性值计算出对应的帧序号,根据每个第二模型动画的帧序号确定对应的第二模型动画序列帧集合中的第二模型动画序列帧;
[0075] 根据所述每一个第二模型动画对应的第二模型动画序列帧、位置、旋转度以及材质,对所述每个第二模型动画进行渲染。
[0076] 参照图5和图6,所述S2完成了对序列帧渲染类的初始化和第二模型动画数组的渲染,具体包括以下步骤:
[0077] S21、定义一个结构体,比如命名为FrameInfo,用于存储每个第二模型动画的位置(Position)、旋转度(Rotate)、和当前动画时间(Elapsed);
[0078] 定义一个序列帧渲染类,比如命名为MeshFrame,所述渲染类用于渲染第二模型动画;
[0079] 进一步的,所述序列帧渲染类可以继承自Unity的Monobehavious,所述Monobehavious为Unity的组件基类,可以监听每个序列帧更新的消息;
[0080] 所述第二模型动画与所述第一模型动画相同;
[0081] S22、在所述序列帧渲染类中定义一个mesh2数组用于存储第二模型动画的序列帧,初始化时用所述mesh1数组的序列帧对应为其赋值;
[0082] 在所述序列帧渲染类中定义一个成员变量FrameRate用于存储动画的帧率,初始化时为其赋值。
[0083] S23、在所述序列帧渲染类中定义一个FrameInfo数组,所述FrameInfo数组的长度为需要渲染的第二模型动画的个数,所述FrameInfo数组的每个元素用于存储第二模型动画;
[0084] 所述FrameInfo数组初始化时所有元素的动画时间(Elapsed)在范围0到(frameCount-1)内随机赋值。
[0085] S24、使用序列帧渲染类的Update方法遍历FrameInfo数组的每个元素,使每个元素的动画时间(Elapsed)自增Time.DeltaTime,并计算当前的帧序号frame;
[0086] 其中,所述Unity引擎每帧会调用一次Update方法,
[0087] 所述Time.DeltaTime是Unity中的系统变量,用于记录当前帧与上一帧之间的时间间隔,
[0088] 所述当前帧序号frame的计算方法具体为:
[0089] int frame=Mathf.FloorToInt(time*frameCount)%mesh2.length,[0090] 所述Mathf.FloorToInt为Unity向下取整的方法;
[0091] 所述time为动画时间(Elapsed)每次自增Time.DeltaTime后得到的值;
[0092] 因此,所述FrameInfo数组中每个元素对应的第二动模型动画在当前帧需要渲染的模型为:mesh2[frame],接下来使用Unity的Graphics.DrawMesh方法,传入mesh2[frame]及其对应的Position、Rotate、mat等参数,对当前帧的第二模型动画进行渲染。
[0093] S25、序列帧渲染类会在每帧不断更新FrameInfo数组,其中的帧序号frame对应在0-frameCount之间循环递增,以此渲染模型序列帧。
[0094] 实施例二
[0095] 请参照图2,一种Unity中模型动画快速渲染的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。
[0096] 综上所述,本发明提供的一种Unity中模型动画快速渲染的方法及终端,通过每隔预设时间对第一模型动画进行截取并烘焙,缓存对应的第一模型序列帧,避免后续再去计算第一模型动画的序列帧;根据存储的所述第一模型动画序列帧集合对第二模型动画进行渲染,所述第二模型动画与第一模型动画相同;这种缓存第一模型动画的顶点变形的序列帧集合的方法,可以避免每次对第二模型动画进行渲染之前都需要进行顶点变形计算后得到序列帧的问题,大大减少了性能开销,提高了制作三维模型动画的效率,节约了CPU资源;通过初始化时给第二模型动画集合里每一个第二模型动画的动画时间属性随机赋值,可以最大限度打破每个第二模型动画的一致性,提升整体画面的动态效果;通过每个第二模型动画的时间属性值计算出对应的序列帧号,再根据动画序列帧、位置、旋转度以及材质,以完成对每个第二模型动画的完整的渲染工作。
[0097] 以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈