基于Unity3D的骨骼动画渲染方法及系统与流程

    专利2022-07-08  114


    本发明涉及计算机图形学技术领域,尤其涉及一种基于unity3d的骨骼动画渲染方法及系统。



    背景技术:

    传统的骨骼动画渲染流程为:在中央处理器(centralprocessingunit,简称cpu)中将原始的t模型姿势计算为当前帧动画姿势;然后,将模型的顶点数据从cpu端传输到图形处理器(graphicsprocessingunit,简称gpu)端;再调用绘制函数,将模型的顶点数据通过渲染管线,绘制成最终的渲染图像。

    在unity3d引擎创建的游戏场景中,存在着大量某一对象的实例,且当对象具有骨骼动画时,cpu会在每帧进行大量的顶点计算,并多次调用渲染绘制函数,这将产生严重的计算耗时,极大降低渲染帧数。

    因此,现在亟需一种基于unity3d的骨骼动画渲染方法及系统来解决上述问题。



    技术实现要素:

    针对现有技术存在的问题,本发明提供一种基于unity3d的骨骼动画渲染方法及系统。

    本发明提供一种基于unity3d的骨骼动画渲染方法,包括:

    对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;

    基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图,包括:

    对所述目标模型实例每一帧的骨骼动画数据进行采样,获取每一帧的顶点数据和预设渲染动画片段,并根据所述顶点数据和所述预设渲染动画片段,通过editor插件对骨骼动画进行解析,得到对应的骨骼姿势变换矩阵;

    对所述骨骼姿势变换矩阵进行数据拆分和压缩处理,得到rgba颜色值,并根据骨骼顶点索引和帧数顺序,通过所述rgba颜色值生成骨骼动画数据纹理图。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    根据所述目标模型实例每一帧的骨骼动画数据,获取骨骼顶点索引和所述骨骼顶点索引对应的骨骼顶点权重;

    将所述骨骼顶点索引和所述骨骼顶点权重存储到目标模型每个顶点的uv通道中。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    获取所述目标模型实例的当前帧动画索引和当前帧动画帧数;

    将所述当前帧动画索引作为上一帧动画索引,将所述当前帧动画帧数作为上一帧动画帧数,根据当前帧时刻,计算当前帧动画实际索引和当前帧动画实际帧数;

    根据所述上一帧动画索引,所述上一帧动画帧数、所述当前帧动画实际索引、所述当前帧动画实际帧数和帧插值系数,生成对应的生成材质属性块,并将所述生成材质属性块发送到unity3d的着色器程序中,其中,所述帧插值系数是通过当前帧时刻获取得到。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,包括:

    根据所述材质属性块、所述骨骼动画数据纹理图和所述骨骼顶点索引,确定每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵;

    根据所述帧插值系数,对每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵进行线性插值运算,得到对应的骨骼顶点目标变换矩阵;

    通过存储有所述骨骼顶点索引和所述骨骼顶点权重的uv通道,根据所述骨骼顶点目标变换矩阵和所述骨骼顶点权重,计算所述目标模型实例中每个顶点当前帧的顶点坐标向量;

    根据每个顶点当前帧的顶点坐标向量,对所述目标模型实例的骨骼动画进行渲染。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,所述方法还包括:

    根据目标模型实例的位置向量、旋转向量和缩放向量,获取对应的trs矩阵,以根据所述trs矩阵,将所述目标模型实例从模型空间转换到裁剪空间。

    根据本发明提供的一种基于unity3d的骨骼动画渲染方法,在所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图之后,所述方法还包括:

    根据预设过滤模式,对所述骨骼动画数据纹理图进行过滤,所述预设过滤模式为点模式。

    本发明还提供一种基于unity3d的骨骼动画渲染系统,包括:

    纹理图转换模块,用于对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;

    骨骼动画渲染模块,用于基于unity3d技术,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例的骨骼动画进行渲染。

    本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于unity3d的骨骼动画渲染方法的步骤。

    本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于unity3d的骨骼动画渲染方法的步骤。

    本发明提供的基于unity3d的骨骼动画渲染方法及系统,只需一个着色器程序进行一次渲染管线,即可输出大量实例化的模型动画,大幅度降低了帧渲染时间。

    附图说明

    为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1为本发明提供的基于unity3d的骨骼动画渲染方法的流程示意图;

    图2为本发明提供的基于unity3d的骨骼动画渲染系统的结构示意图;

    图3为本发明提供的电子设备的结构示意图。

    具体实施方式

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

    现有骨骼动画渲染流程,如果对大量相同的模型进行逐个渲染,将会进行多次drawcall,即cpu通过调用图形库接口,命令gpu进行渲染操作,这将极大降低渲染帧数。在unity3d引擎中,gpuskinning(即通过gpu图形处理器进行骨骼动画蒙皮)功能是基于gles3.0版本,并且gpu需要支持texturefloat格式(sample2d_float),这对于运行设备有要求,不能兼顾大量gles2.0版本的设备。因此,本发明将unity3d引擎中的gpuskinning功能和gpuinstanced功能进行结合,在进行gpuskinning功能时,勾选projectsetting中的gpuskinning选项后,通过skinningmeshrenderer进行transformfeedback,结合geometryshader对vertexbuffer重写来实现;在进行gpuinstanced功能时,即通过drawmeshinstanced函数,可以使用少量drawcall一次性绘制大量相同mesh且具有不同参数的对象,通过材质属性块(materialpropertyblock),将该批对象的不同属性一次性传入着色器程序,并通过instanceid进行索引得到每个对象的属性。

    图1为本发明提供的基于unity3d的骨骼动画渲染方法的流程示意图,如图1所示,本发明提供了一种基于unity3d的骨骼动画渲染方法,包括:

    步骤101,对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图。

    在本发明中,预先获取目标模型实例每一帧的骨骼动画数据,并通过editor插件工具解析帧动画,从而得到骨骼姿势变换矩阵;然后,将处理得到的骨骼姿势变换矩阵转化为rgba颜色格式,写入一张2d纹理图,从而得到骨骼动画数据纹理图,基于该骨骼动画数据纹理图建立坐标,其中,横轴为动画帧数顺序,纵轴为骨骼顶点索引。优选地,在发明中,由于骨骼动画数据纹理图是按坐标进行数据存储的,因此,可设置纹理过滤模式为point模式,对骨骼动画数据纹理图进行纹理过滤。

    步骤102,基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

    在本发明中,首先,通过unity3dc#脚本,计算每个生成实例的参数,其中,gpuinstance的参数有位置向量,旋转向量和缩放向量;gpuskinning的参数有上一帧的数据,当前帧的数据和插值因数。同时,需要在mesh(网格对象)中利用两个uv通道,用于存储每一帧的骨骼顶点索引值和该骨骼顶点索引值对应的骨骼权重,需要说明的是,本发明使用了4bone,即4个骨骼顶点索引,需要使用两个uv通道,如使用2bone,即2个骨骼顶点索引,只需使用一个uv通道即可,该步骤在预处理阶段即可完成。

    进一步地,将所有的骨骼动画数据纹理图输入到着色器程序中,在顶点着色器中进行读取,并根据骨骼顶点索引,计算出4个骨骼顶点索引对应的变换矩阵,再通过骨骼权重计算当前帧顶点的位置,并使用插值平滑骨骼动画。最后,通过渲染管线的模型空间到裁剪空间的变换,将骨骼动画输出至片段着色器,片段着色器与渲染管线的片段着色器功能相同,负责模型顶点的颜色采样和输出。

    本发明提供的基于unity3d的骨骼动画渲染方法,只需一个着色器程序进行一次渲染管线,即可输出大量实例化的模型动画,大幅度降低了帧渲染时间。

    在上述实施例的基础上,所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图,包括:

    对所述目标模型实例每一帧的骨骼动画数据进行采样,获取每一帧的顶点数据和预设渲染动画片段,并根据所述顶点数据和所述预设渲染动画片段,通过editor插件对骨骼动画进行解析,得到对应的骨骼姿势变换矩阵;

    对所述骨骼姿势变换矩阵进行数据拆分和压缩处理,得到rgba颜色值,并根据骨骼顶点索引和帧数顺序,通过所述rgba颜色值生成骨骼动画数据纹理图。

    在本发明中,读取目标模型实例的顶点数据和预设渲染动画片段,通过editor插件,逐帧计算每个骨骼姿势变换矩阵。本发明以4个骨骼顶点索引进行说明,将4×4矩阵进行数据拆分,视为4个行向量,再将数据压缩到0至1之间后,转为rgba颜色值,其中,第四行转化的rgba颜色值为(0,0,0,1),优化纹理大小可省略。然后,将帧数顺序作为为横坐标,骨骼序号(骨骼顶点索引)为纵坐标,写入二维纹理图中;最终生成骨骼动画数据纹理图。

    在另一实施例中,使用createanimtexture插件,生成骨骼动画数据对应的骨骼动画数据纹理图,具体步骤为:

    步骤s1,获取骨骼动画数据的时长,帧数和模型骨骼顶点数,并创建预设大小的二维纹理图;

    步骤s2,循环遍历所有骨骼动画数据片段,进行逐个处理;

    步骤s3,对每个骨骼动画数据片段,逐帧采样,逐骨骼顶点计算在模型空间中的骨骼姿势变换矩阵matrix;

    步骤s4,对每个骨骼姿势变换矩阵matrix进行处理,按行进行数值压缩处理后变为4个rgba颜色值,其中,第四行值固定为(0,0,0,1)可忽略,将得到的颜色值写入步骤s1中预创建的二维纹理图中,其中,横轴为动画帧数,纵轴为骨骼顶点索引;

    步骤s5,按预设路径和预设文件名存储,得到的骨骼动画数据纹理图。

    在上述实施例的基础上,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    根据所述目标模型实例每一帧的骨骼动画数据,获取骨骼顶点索引和所述骨骼顶点索引对应的骨骼顶点权重;

    将所述骨骼顶点索引和所述骨骼顶点权重存储到目标模型每个顶点的uv通道中。

    在本发明中,首先在预处理阶段,需要将用于动画蒙皮即gpuskinning的两项数据:骨骼顶点索引和骨骼权重,进行存储,用于后续gpu中使用。具体地,本发明的存储方式为利用目标模型每个顶点的2个uv通道分别进行存储,模型中每个顶点的uv1通道存储该顶点运行动画蒙皮时的4个骨骼顶点索引,uv2通道存储该顶点运行动画蒙皮时4个骨骼顶点的权重值。

    在上述实施例的基础上,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    获取所述目标模型实例的当前帧动画索引和当前帧动画帧数;

    将所述当前帧动画索引作为上一帧动画索引,将所述当前帧动画帧数作为上一帧动画帧数,根据当前帧时刻,计算当前帧动画实际索引和当前帧动画实际帧数;

    根据所述上一帧动画索引,所述上一帧动画帧数、所述当前帧动画实际索引、所述当前帧动画实际帧数和帧插值系数,生成对应的生成材质属性块,并将所述生成材质属性块发送到unity3d的着色器程序中,其中,所述帧插值系数是通过当前帧时刻获取得到。

    在本发明中,计算gpuskinning需要的动画相关参数,将每个目标模型实例的当前帧动画索引存储为上一帧动画索引,当前帧动画帧数存储为上一帧动画帧数;然后,根据当前帧时刻,重新计算当前帧动画实际索引和当前帧动画实际帧数,并根据当前帧时刻计算帧插值系数;最后,将上一帧动画索引、上一帧动画帧数、当前帧动画实际索引、当前帧动画实际帧数和帧插值系数打包为材质属性块,并将该材质属性块发送至gpuskinning着色器程序。本发明通过调用unity3d的drawmeshinstanced函数,实现的gpuinstance功能。

    在上述实施例的基础上,所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,包括:

    根据所述材质属性块、所述骨骼动画数据纹理图和所述骨骼顶点索引,确定每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵;

    根据所述帧插值系数,对每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵进行线性插值运算,得到对应的骨骼顶点目标变换矩阵;

    通过存储有所述骨骼顶点索引和所述骨骼顶点权重的uv通道,根据所述骨骼顶点目标变换矩阵和所述骨骼顶点权重,计算所述目标模型实例中每个顶点当前帧的顶点坐标向量;

    根据每个顶点当前帧的顶点坐标向量,对所述目标模型实例的骨骼动画进行渲染。

    在本发明中,首先将预处理得到的骨骼动画数据纹理图作为材质属性,发送至着色器程序;然后,解析基于gpuinstance功能得到的材质属性块,获取当前实例的上一帧动画索引、上一帧动画帧数、当前帧动画实际索引、当前帧动画实际帧数和帧插值系数;接着,进行gpuskinning计算阶段,该过程在顶点着色器中进行,处理实例的每个顶点,由于已经将骨骼顶点索引和骨骼权重存储到了顶点数据的uv1通道和uv2通道中,因此当前顶点的坐标=σ骨骼顶点索引i的坐标×骨骼顶点索引i的骨骼权重。

    进一步地,根据上一帧动画索引,确定需要处理的纹理图,根据上一帧动画帧数确定横坐标(即确定纹理图中对应的动画帧数),根据骨骼顶点索引i确定纵坐标,可以计算出骨骼顶点索引i的变换矩阵,此时需要根据写入纹理时的数值压缩处理的逆运算得到原始值。通过上述过程,可得到上一帧的四个骨骼顶点的变换矩阵,同理也可得到当前帧的四个骨骼顶点的变换矩阵。然后,通过帧插值系数对同一骨骼顶点的两个变换矩阵进行线性插值运算,得到最终的骨骼顶点变换矩阵,即骨骼顶点目标变化矩阵,进而,通过四个骨骼顶点权重的加权运算,得到当前顶点的坐标向量。最后,通过渲染管线的模型空间到裁剪空间的变换,并输出给片段着色器,完成对骨骼动画的渲染。

    在上述实施例的基础上,所述方法还包括:

    根据目标模型实例的位置向量、旋转向量和缩放向量,获取对应的trs矩阵,以根据所述trs矩阵,将所述目标模型实例从模型空间转换到裁剪空间。

    在上述实施例的基础上,在所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图之后,所述方法还包括:

    根据预设过滤模式,对所述骨骼动画数据纹理图进行过滤,所述预设过滤模式为点模式。

    图2为本发明提供的基于unity3d的骨骼动画渲染系统的结构示意图,如图2所示,本发明提供了一种基于unity3d的骨骼动画渲染系统,包括纹理图转换模块201和骨骼动画渲染模块202,其中,纹理图转换模块,用于对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;骨骼动画渲染模块,用于基于unity3d技术,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例的骨骼动画进行渲染。

    本发明提供的基于unity3d的骨骼动画渲染系统,只需一个着色器程序进行一次渲染管线,即可输出大量实例化的模型动画,大幅度降低了帧渲染时间。

    本发明实施例提供的系统是用于执行上述各方法实施例的,具体流程和详细内容请参照上述实施例,此处不再赘述。

    图3为本发明提供的电子设备的结构示意图,如图3所示,该电子设备可以包括:处理器(processor)301、通信接口(communicationsinterface)302、存储器(memory)303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。处理器301可以调用存储器303中的逻辑指令,以执行基于unity3d的骨骼动画渲染方法,该方法包括:对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

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

    另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的基于unity3d的骨骼动画渲染方法,该方法包括:对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

    又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的基于unity3d的骨骼动画渲染方法,该方法包括:对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

    以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

    通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

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


    技术特征:

    1.一种基于unity3d的骨骼动画渲染方法,其特征在于,包括:

    对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;

    基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。

    2.根据权利要求1所述的基于unity3d的骨骼动画渲染方法,其特征在于,所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图,包括:

    对所述目标模型实例每一帧的骨骼动画数据进行采样,获取每一帧的顶点数据和预设渲染动画片段,并根据所述顶点数据和所述预设渲染动画片段,通过editor插件对骨骼动画进行解析,得到对应的骨骼姿势变换矩阵;

    对所述骨骼姿势变换矩阵进行数据拆分和压缩处理,得到rgba颜色值,并根据骨骼顶点索引和帧数顺序,通过所述rgba颜色值生成骨骼动画数据纹理图。

    3.根据权利要求1所述的基于unity3d的骨骼动画渲染方法,其特征在于,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    根据所述目标模型实例每一帧的骨骼动画数据,获取骨骼顶点索引和所述骨骼顶点索引对应的骨骼顶点权重;

    将所述骨骼顶点索引和所述骨骼顶点权重存储到目标模型每个顶点的uv通道中。

    4.根据权利要求3所述的基于unity3d的骨骼动画渲染方法,其特征在于,在所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中之前,所述方法还包括:

    获取所述目标模型实例的当前帧动画索引和当前帧动画帧数;

    将所述当前帧动画索引作为上一帧动画索引,将所述当前帧动画帧数作为上一帧动画帧数,根据当前帧时刻,计算当前帧动画实际索引和当前帧动画实际帧数;

    根据所述上一帧动画索引,所述上一帧动画帧数、所述当前帧动画实际索引、所述当前帧动画实际帧数和帧插值系数,生成对应的生成材质属性块,并将所述生成材质属性块发送到unity3d的着色器程序中,其中,所述帧插值系数是通过当前帧时刻获取得到。

    5.根据权利要求4所述的基于unity3d的骨骼动画渲染方法,其特征在于,所述基于unity3d,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,包括:

    根据所述材质属性块、所述骨骼动画数据纹理图和所述骨骼顶点索引,确定每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵;

    根据所述帧插值系数,对每个骨骼顶点上一帧的骨骼顶点变换矩阵和当前帧的骨骼顶点变换矩阵进行线性插值运算,得到对应的骨骼顶点目标变换矩阵;

    通过存储有所述骨骼顶点索引和所述骨骼顶点权重的uv通道,根据所述骨骼顶点目标变换矩阵和所述骨骼顶点权重,计算所述目标模型实例中每个顶点当前帧的顶点坐标向量;

    根据每个顶点当前帧的顶点坐标向量,对所述目标模型实例的骨骼动画进行渲染。

    6.根据权利要求1所述的基于unity3d的骨骼动画渲染方法,其特征在于,所述方法还包括:

    根据目标模型实例的位置向量、旋转向量和缩放向量,获取对应的trs矩阵,以根据所述trs矩阵,将所述目标模型实例从模型空间转换到裁剪空间。

    7.根据权利要求2所述的基于unity3d的骨骼动画渲染方法,其特征在于,在所述对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图之后,所述方法还包括:

    根据预设过滤模式,对所述骨骼动画数据纹理图进行过滤,所述预设过滤模式为点模式。

    8.一种基于unity3d的骨骼动画渲染系统,其特征在于,包括:

    纹理图转换模块,用于对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;

    骨骼动画渲染模块,用于基于unity3d技术,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例的骨骼动画进行渲染。

    9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述基于unity3d的骨骼动画渲染方法的步骤。

    10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述基于unity3d的骨骼动画渲染方法的步骤。

    技术总结
    本发明提供一种基于Unity3D的骨骼动画渲染方法及系统,该方法包括:对目标模型实例每一帧的骨骼动画数据进行纹理转换处理,得到骨骼动画数据纹理图;基于Unity3D,将所述骨骼动画数据纹理图输入到着色器程序中,并根据所述骨骼动画数据纹理图的骨骼顶点索引和所述骨骼顶点索引对应的骨骼权重,计算所述目标模型实例中每个顶点的顶点坐标向量,以根据所述顶点坐标向量对所述目标模型实例每一帧的骨骼动画进行渲染。本发明只需一个着色器程序进行一次渲染管线,即可输出大量实例化的模型动画,大幅度降低了帧渲染时间。

    技术研发人员:桑新柱;郑健平;邢树军
    受保护的技术使用者:北京邮电大学
    技术研发日:2020.11.26
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-15987.html

    最新回复(0)