CN116485954A - 虚拟骨骼的修型方法和装置、存储介质及电子设备 - Google Patents

虚拟骨骼的修型方法和装置、存储介质及电子设备 Download PDF

Info

Publication number
CN116485954A
CN116485954A CN202310096966.9A CN202310096966A CN116485954A CN 116485954 A CN116485954 A CN 116485954A CN 202310096966 A CN202310096966 A CN 202310096966A CN 116485954 A CN116485954 A CN 116485954A
Authority
CN
China
Prior art keywords
data
skeleton
main
gesture data
gesture
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310096966.9A
Other languages
English (en)
Inventor
李博
韩蕾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202310096966.9A priority Critical patent/CN116485954A/zh
Publication of CN116485954A publication Critical patent/CN116485954A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/203D [Three Dimensional] animation
    • G06T13/403D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Architecture (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请公开了一种虚拟骨骼的修型方法和装置、存储介质及电子设备。其中,该方法包括:获取虚拟骨骼的运动过程中产生的原始姿态数据,根据原始姿态数据确定第一姿态数据和第二姿态数据,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的用于对第一组子骨骼进行修型的第一组姿态数据,根据第二主骨骼和第三主骨骼确定用于对第二组子骨骼进行修型的第二组姿态数据,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据。本申请解决了虚拟骨骼的显示不自然,导致虚拟骨骼的变形效果较差的技术问题。

Description

虚拟骨骼的修型方法和装置、存储介质及电子设备
技术领域
本申请涉及计算机领域,具体而言,涉及一种虚拟骨骼的修型方法和装置、存储介质及电子设备。
背景技术
目前,现有技术方案一般将动作捕捉数据直接输入虚幻引擎中,以驱动角色骨骼运动,骨骼变形的效果完全取决于动作捕捉软件输出的数据质量。一些光学动作捕捉的系统输出的骨骼姿态在空间位置上相对精确,但对于旋转姿态上可能出现较大的误差,导致骨骼变形效果不理想,另外动作捕捉软件输出的姿态,在例如肩、肘、腕关节处常常出现变形过度和变形不连续等现象。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种虚拟骨骼的修型方法和装置、存储介质及电子设备,以至少解决虚拟骨骼的显示不自然,导致虚拟骨骼的变形效果较差的技术问题。
根据本申请实施例的一个方面,提供了一种虚拟骨骼的修型方法,包括:获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,所述虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,所述第一主骨骼与所述第二主骨骼之间还包括依次连接的第一组子骨骼,所述第二主骨骼和所述第三主骨骼之间还包括依次连接的第二组子骨骼,所述第一主骨骼是所述第一组子骨骼的父骨骼,所述第二主骨骼是所述第二组子骨骼的父骨骼;根据所述原始姿态数据确定第一姿态数据和第二姿态数据,其中,所述第一姿态数据用于根据所述初始骨骼、所述第一主骨骼以及所述第二主骨骼共同确定所述第一主骨骼的姿态数据,所述第二姿态数据用于根据所述第一主骨骼、所述第二主骨骼以及所述第三主骨骼共同确定所述第一主骨骼和所述第二主骨骼的姿态数据;对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,其中,所述第一组姿态数据用于对所述第一组子骨骼进行修型;根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,其中,所述第二组姿态数据用于对所述第二组子骨骼进行修型;根据所述第一姿态数据、所述第二姿态数据、所述第一组姿态数据以及所述第二组姿态数据生成目标姿态数据,其中,所述目标姿态数据表示对所述原始姿态数据修型后的姿态数据。
根据本申请实施例的另一方面,还提供了一种虚拟骨骼的修型装置,包括:获取模块,用于获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,所述虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,所述第一主骨骼与所述第二主骨骼之间还包括依次连接的第一组子骨骼,所述第二主骨骼和所述第三主骨骼之间还包括依次连接的第二组子骨骼,所述第一主骨骼是所述第一组子骨骼的父骨骼,所述第二主骨骼是所述第二组子骨骼的父骨骼;第一确定模块,用于根据所述原始姿态数据确定第一姿态数据和第二姿态数据,其中,所述第一姿态数据用于根据所述初始骨骼、所述第一主骨骼以及所述第二主骨骼共同确定所述第一主骨骼的姿态数据,所述第二姿态数据用于根据所述第一主骨骼、所述第二主骨骼以及所述第三主骨骼共同确定所述第一主骨骼和所述第二主骨骼的姿态数据;执行模块,用于对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,其中,所述第一组姿态数据用于对所述第一组子骨骼进行修型;第二确定模块,用于根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,其中,所述第二组姿态数据用于对所述第二组子骨骼进行修型;生成模块,用于根据所述第一姿态数据、所述第二姿态数据、所述第一组姿态数据以及所述第二组姿态数据生成目标姿态数据,其中,所述目标姿态数据表示对所述原始姿态数据修型后的姿态数据。
可选地,所述装置用于通过如下方式根据所述原始姿态数据确定第一姿态数据:根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据,其中,所述第一重算姿态数据是以所述初始骨骼的第一朝上向量作为约束计算得到的姿态数据,所述第二重算姿态数据是以所述初始骨骼的第一朝前向量作为约束计算得到的姿态数据,所述第一朝上向量的方向为所述初始骨骼对应的局部坐标系中指向上的坐标轴方向,所述第一朝前向量的方向为所述初始骨骼对应的局部坐标系中指向前的坐标轴方向;对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,其中,所述第一重算姿态数据和所述第二重算姿态数据是所述目标重算姿态数据集合的边界值;根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据,其中,所述主轴方向表示对应主骨骼的朝向。
可选地,所述装置用于通过如下方式根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据:从所述原始姿态数据中获取所述第一主骨骼的第一位置和所述第二主骨骼的第二位置,其中,所述第一位置和所述第二位置用于确定所述第一位置指向所述第二位置的姿态数据集合;从所述原始姿态数据中获取第二朝上向量和第二朝前向量,其中,所述第二朝上向量的方向为所述第一主骨骼对应的局部坐标系中指向上的坐标轴方向,所述第二朝前向量的方向为所述第一主骨骼对应的局部坐标系中指向前的坐标轴方向;将所述第一位置、所述第二位置、所述第一朝上向量以及所述第二朝上向量输入第一预设函数确定所述第一重算姿态数据,并将所述第一位置、所述第二位置、所述第一朝前向量以及所述第二朝前向量输入所述第一预设函数确定所述第二重算姿态数据,其中,所述第一重算姿态数据是所述姿态数据集合中所述第一朝上向量和所述第二朝上向量的夹角最小的姿态数据,所述第二重算姿态数据是所述姿态数据集合中所述第一朝前向量和所述第二朝前向量的夹角最小的姿态数据。
可选地,所述装置用于通过如下方式根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据:获取所述主轴方向与所述第一朝上向量之间的夹角的目标夹角度数;根据所述目标夹角度数确定目标参数,其中,所述目标参数的取值为预设度数和所述目标夹角度数之差的绝对值;在所述目标参数位于第一度数区间的情况下,将所述第一重算姿态数据确定为所述第一姿态数据,其中,所述第一度数区间的下限为0,上限为预先设置的第一参考度数;在所述目标参数位于第二度数区间的情况下,将执行所述第二插值操作得到的姿态数据确定为所述第一姿态数据,其中,所述第二度数区间的下限为所述第一参考度数,上限为预先设置的第二参考度数;在所述目标参数位于第三度数区间的情况下,将所述第二重算姿态数据确定为所述第一姿态数据,其中,所述第三度数区间的下限为所述第二参考度数,上限为所述预设度数。
可选地,所述装置用于通过如下方式对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合:获取目标插值系数,其中,所述目标插值系数的取值和所述目标参数相关;根据所述目标插值系数对所述第一重算姿态数据和所述第二重算姿态数据执行所述第二插值操作,得到目标重算姿态数据集合,其中,所述目标重算姿态数据集合包括所述第一重算姿态数据、所述第二重算姿态数据以及取值处于所述第一重算姿态数据和所述第二重算姿态数据之间的姿态数据。
可选地,所述装置用于通过如下方式根据所述原始姿态数据确定第二姿态数据:从所述原始姿态数据中获取所述第一主骨骼的第一位置、第二主骨骼的第二位置以及第三主骨骼的第三位置;确定所述第一主骨骼和所述第二主骨骼的弯曲程度,其中,所述弯曲程度由所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数确定,所述主轴方向表示对应主骨骼的朝向;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,根据所述第一位置、所述第二位置以及所述第三位置确定第一重建姿态数据,其中,所述第一重建姿态数据包括所述第一主骨骼在所述弯曲状态下的重建姿态数据和所述第二主骨骼在所述弯曲状态下的重建姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据,其中,所述第二重建姿态数据包括所述第一主骨骼在所述伸直状态下的重建姿态数据和所述第二主骨骼在所述伸直状态下的重建姿态数据;对所述第一重建姿态数据和所述第二重建姿态数据执行第三插值操作,得到目标重建姿态数据集合;根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据。
可选地,所述装置用于通过如下方式确定所述第一主骨骼和所述第二主骨骼的弯曲程度:获取所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数;在所述夹角度数大于或等于第一预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态;在所述夹角度数小于所述第一预设弯曲阈值,且大于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于半弯曲状态,其中,所述第二预设弯曲阈值小于或等于所述第一预设弯曲阈值;在所述夹角度数小于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态;所述装置用于通过如下方式根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据:在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述弯曲状态的情况下,将所述第一重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述半弯曲状态的情况下,将执行所述第三插值操作得到的重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述伸直状态的情况下,将所述第二重建姿态数据确定为所述第二姿态数据。
可选地,所述装置用于通过如下方式在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据:在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,将所述第二主骨骼在所述弯曲状态下的重建姿态数据转换至所述第一主骨骼的局部坐标系并存储为目标变量,其中,所述第二主骨骼在所述弯曲状态下的重建姿态数据是世界坐标系中的姿态数据,所述世界坐标系与所述局部坐标系之间的姿态数据允许相互转换,所述目标变量包括第一向量,所述第一向量的方向与所述弯曲状态下所述第二主骨骼的局部坐标系中的第一坐标轴相同;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,将所述目标变量重新转换至所述世界坐标系,并确定第二向量,其中,所述第二向量的方向与所述伸直状态下所述第二主骨骼的局部坐标系中的第二坐标轴相同;将所述第二位置、所述第三位置、所述第一向量以及所述第二向量输入第一预设函数确定所述第二重建姿态数据,其中,所述第二重建姿态数据是所述第一向量和所述第二向量之间的夹角最小的姿态数据。
可选地,所述装置用于通过如下方式对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据:对所述第一姿态数据和所述第二姿态数据执行四元数线性插值操作,得到子骨骼姿态数据集合,其中,所述第一姿态数据和所述第二姿态数据是所述子骨骼姿态数据集合中的边界值;从所述子骨骼姿态数据集合中确定所述第一组姿态数据,其中,所述第一组子骨骼中距离所述第一主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第一姿态数据,所述第一组子骨骼中距离所述第一主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述第二姿态数据。
可选地,所述装置用于通过如下方式根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据:获取与所述第三主骨骼对应的第三向量,其中,所述第三向量与第三坐标轴的方向相同,所述第三坐标轴是所述第三主骨骼对应的局部坐标系中的非主坐标轴;将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据。
可选地,所述装置用于通过如下方式将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据:将所述第三向量投影至所述第二主骨骼的局部坐标系中,得到第四向量,其中,所述第四向量的方向与所述第三向量的方向相同;计算所述第四向量与所述第二主骨骼对应的局部坐标系中与所述第三坐标轴对应的第四坐标轴之间的夹角;根据所述夹角确定所述第二组姿态数据。
可选地,所述装置用于通过如下方式根据所述夹角确定所述第二组姿态数据:根据所述夹角确定目标子骨骼姿态数据,其中,所述目标子骨骼姿态数据表示目标子骨骼需要旋转的角度,所述目标子骨骼需要旋转的角度与所述夹角的度数相同,所述目标子骨骼是所述第二组子骨骼中距离所述第三主骨骼最近的子骨骼;从所述第二姿态数据中确定所述第二主骨骼的姿态数据;对所述第二主骨骼的姿态数据和所述目标子骨骼姿态数据执行所述第一线性插值操作,确定所述第二组姿态数据,其中,所述第二组子骨骼中距离所述第二主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第二主骨骼的姿态数据,所述第二组子骨骼中距离所述第二主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述目标子骨骼姿态数据。
根据本申请实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述虚拟骨骼的修型方法。
根据本申请实施例的又一方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上虚拟骨骼的修型方法。
根据本申请实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过所述计算机程序执行上述的虚拟骨骼的修型方法。
在本申请实施例中,采用获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,第一主骨骼与第二主骨骼之间还包括依次连接的第一组子骨骼,第二主骨骼和第三主骨骼之间还包括依次连接的第二组子骨骼,第一主骨骼是第一组子骨骼的父骨骼,第二主骨骼是第二组子骨骼的父骨骼,根据原始姿态数据确定第一姿态数据和第二姿态数据,其中,第一姿态数据用于根据初始骨骼、第一主骨骼以及第二主骨骼共同确定第一主骨骼的姿态数据,第二姿态数据用于根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,其中,第一组姿态数据用于对第一组子骨骼进行修型,根据第二主骨骼和第三主骨骼确定第二组姿态数据,其中,第二组姿态数据用于对第二组子骨骼进行修型,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据的方式,通过以各个骨骼驱动与其连接的其它骨骼完成变形,先对动作捕捉系统捕捉到的姿态数据进行矫正,依据输入姿态中各个骨骼的空间位置,重新计算各个骨骼的旋转,再对第一组子骨骼和第二组子骨骼表示的修型骨骼进行姿态线性插值,达到了生成连贯、稳定、合理的姿态数据的目的,从而实现了即使动作捕捉数据中骨骼的旋转数值存在错误,动画仍然可以正确显示,并且在第一组子骨骼和第二组子骨骼对应的区域显示为连续、稳定、过渡自然的变形,使得虚拟骨骼的显示过程自然,虚拟骨骼的变形效果更好的技术效果,进而解决了虚拟骨骼的显示不自然,导致虚拟骨骼的变形效果较差的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的一种可选的虚拟骨骼的修型方法的应用环境的示意图;
图2是根据本申请实施例的一种可选的虚拟骨骼的修型方法的流程示意图;
图3是根据本申请实施例的一种可选的虚拟骨骼的修型方法的示意图;
图4是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图5是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图6是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图7是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图8是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图9是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图10是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图11是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图12是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图13是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图14是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图;
图15是根据本申请实施例的一种可选的虚拟骨骼的修型装置的结构示意图;
图16是根据本申请实施例的一种可选的虚拟骨骼的修型产品的结构示意图;
图17是根据本申请实施例的一种可选的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
游戏引擎:游戏引擎是一种软件,它为游戏创作者提供游戏架构和游戏框架或游戏框架,并提供快速高效地制作视频游戏所需的一组功能。
虚幻引擎:Unreal Engine,一种3D游戏引擎。
骨骼动画:骨骼动画是模型动画中的一种。在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。骨骼是具有方向的,从首端指向尾端,首端可称为关节。
修型:在高质量的角色骨骼动画的生产制作环节中,直接对角色肢体应用骨骼变形难以达到理想的效果,修型的目的是在骨骼变形的基础之上继续修改模型的形状使其达到接近真实人体皮肤肌肉的变形效果。
骨骼姿态:是表示骨骼的空间位置/旋转/缩放的数据,既可以是当前骨骼相对与父骨骼坐标系下的姿态,也可以是世界坐标系下的姿态,二者可以相互转换。如果以相对于父骨骼的坐标系来表示,称之为局部坐标系下的骨骼姿态;如果以相对于世界坐标系来表示,称之为世界坐标系下的骨骼姿态。一般情况下,角色骨骼动画如果以局部坐标系表示骨骼姿态,那么在动画过程中只有旋转量是会发生变化的,位置和缩放是恒定的,这是因为各个骨骼的关节并不会相对与其父骨骼平移和缩放。
ControlRig:ControlRig是虚幻引擎内置的节点化骨骼动画工具套件,ControlRig可以对骨骼进行实时的姿态访问和修改,并提供一系列数学/几何运算的工具节点供开发者调用。
动画蓝图:动画蓝图是虚幻引擎中对动画进行控制的工具,开发者可以在动画蓝图内制作动画控制逻辑,与ControlRig不同的是,动画蓝图主要偏向流程控制和修改/混合现有的动画数据。动作捕捉的数据传入只能通过动画蓝图中调用动捕软件提供的动画蓝图节点来实现。
骨骼主轴:骨骼关节三个坐标轴中指向子关节的坐标轴。
下面结合实施例对本申请进行说明:
根据本申请实施例的一个方面,提供了一种虚拟骨骼的修型方法,可选地,在本实施例中,上述虚拟骨骼的修型方法可以应用于如图1所示的由服务器101和终端设备103所构成的硬件环境中。如图1所示,服务器101通过网络与终端103进行连接,可用于为终端设备或终端设备上安装的应用程序提供服务,应用程序可以是视频应用程序、即时通信应用程序、浏览器应用程序、教育应用程序、游戏应用程序等。可在服务器上或独立于服务器设置数据库105,用于为服务器101提供数据存储服务,例如,游戏数据存储服务器,上述网络可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、WIFI及其他实现无线通信的网络,终端设备103可以是配置有应用程序的终端,可以包括但不限于以下至少之一:手机(如Android手机、iOS手机等)、笔记本电脑、平板电脑、掌上电脑、MID(Mobile Internet Devices,移动互联网设备)、PAD、台式电脑、智能电视、智能语音交互设备、智能家电、车载终端、飞行器、虚拟现实(VirtualReality,简称VR)终端、增强现实(Augmented Reality,简称AR)终端、混合现实(MixedReality,简称MR)终端等计算机设备,上述服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,或者是云服务器。
结合图1所示,上述虚拟骨骼的修型方法可以在终端设备103通过如下步骤实现:
S1,在终端设备103上获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,第一主骨骼与第二主骨骼之间还包括依次连接的第一组子骨骼,第二主骨骼和第三主骨骼之间还包括依次连接的第二组子骨骼,第一主骨骼是第一组子骨骼的父骨骼,第二主骨骼是第二组子骨骼的父骨骼;
S2,在终端设备103上根据原始姿态数据确定第一姿态数据和第二姿态数据,其中,第一姿态数据用于根据初始骨骼、第一主骨骼以及第二主骨骼共同确定第一主骨骼的姿态数据,第二姿态数据用于根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据;
S3,在终端设备103上对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,其中,第一组姿态数据用于对第一组子骨骼进行修型;
S4,在终端设备103上根据第二主骨骼和第三主骨骼确定第二组姿态数据,其中,第二组姿态数据用于对第二组子骨骼进行修型;
S5,在终端设备103上根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据。
可选地,在本实施例中,上述虚拟骨骼的修型方法还可以通过服务器实现,例如,图1所示的服务器101中实现;或由终端设备和服务器共同实现。
上述仅是一种示例,本实施例不做具体的限定。
可选地,作为一种可选的实施方式,如图2所示,上述虚拟骨骼的修型方法包括:
S202,获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,第一主骨骼与第二主骨骼之间还包括依次连接的第一组子骨骼,第二主骨骼和第三主骨骼之间还包括依次连接的第二组子骨骼,第一主骨骼是第一组子骨骼的父骨骼,第二主骨骼是第二组子骨骼的父骨骼;
在一个示例性的实施例中,上述虚拟骨骼的修型方法可以包括但不限于应用于动画制作、游戏制作等需要使用虚拟骨骼的应用场景中。
具体而言,以游戏制作场景为例,本申请实施例提供的虚拟骨骼的修型方法能够应用在制作游戏人物手臂的过程中,还能够应用在制作游戏人物腿部的过程中,在制作游戏人物手臂的过程中,技术人员能够采用本申请实施例提供的虚拟骨骼的修型方法,通过终端或者服务器来获取原始姿态数据,并根据原始姿态数据确定第一姿态数据和第二姿态数据,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,根据第二主骨骼和第三主骨骼确定第二组姿态数据,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据。在一些实施例中,本申请实施例提供的虚拟骨骼的修型方法能够被封装为一个插件供技术人员使用,以提高虚拟骨骼的修型效率。
具体而言,以动画制作场景为例,本申请实施例提供的虚拟骨骼的修型方法能够应用在制作动画人物手臂的过程中,还能够应用在制作动画人物腿部的过程中,在制作动画人物手臂的过程中,技术人员能够采用本申请实施例提供的虚拟骨骼的修型方法,通过终端或者服务器来获取原始姿态数据,并根据原始姿态数据确定第一姿态数据和第二姿态数据,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,根据第二主骨骼和第三主骨骼确定第二组姿态数据,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据。在一些实施例中,本申请实施例提供的虚拟骨骼的修型方法能够被封装为一个插件供技术人员使用,以提高虚拟骨骼的修型效率。
可选地,在本实施例中,上述原始姿态数据可以包括但不限于通过动作捕捉系统捕捉到的运动数据,该动作捕捉系统可以设置为实时捕捉上述运动数据,并生成上述原始姿态数据,还可以设置为周期性捕捉上述运动数据,并生成上述原始姿态数据。
示例性地,动作捕捉是在运动物体的关键部位设置捕捉器,由Motion capture系统捕捉捕捉器位置,再经过计算机处理后得到三维空间坐标的数据。
随着计算机软硬件技术的飞速发展和动画制作要求的提高,运动捕捉已经进入了实用化阶段,成功地用于虚拟现实、游戏、人体工程学研究、模拟训练、生物力学研究等许多方面。
从技术的角度来说,运动捕捉的实质就是要测量、捕捉、记录物体在三维空间中的运动轨迹。典型的运动捕捉设备一般由以下几个部分组成:
传感器。所谓传感器是固定在运动物体特定部位的捕捉装置,它将向MotionCapture系统提供运动物体运动的位置信息,一般会随着捕捉的细致程度确定捕捉器的数目。
信号捕捉设备。这种设备会因Motion Capture系统的类型不同而有所区别,它们负责位置信号的捕捉。对于机械系统来说是一块捕捉电信号的线路板,对于光学MotionCapture系统则是高分辨率红外摄像机。
数据传输设备。Motion Capture系统,特别是需要实时效果的Motion Capture系统需要将大量的运动数据从信号捕捉设备快速准确地传输到计算机系统进行处理,而数据传输设备就是用来完成此项工作的。
数据处理设备。经过Motion Capture系统捕捉到的数据需要修正、处理后还要有三维模型向结合才能完成计算机动画制作的工作,这就需要我们应用数据处理软件或硬件来完成此项工作。软件也好硬件也罢它们都是借助计算机对数据高速的运算能力来完成数据的处理,使三维模型真正、自然地运动起来。
具体实现运动数据捕捉的方式可以包括但不限于机械式运动捕捉、声学式运动捕捉、电磁式运动捕捉、光学式运动捕捉、惯性导航式动作捕捉以及基于人工智能实现的运动捕捉,将运动捕捉技术用于动画制作,可极大地提高动画制作的水平。它极大地提高了动画制作的效率,降低了成本,而且使动画制作过程更为直观,效果更为生动。
在一个示例性的实施例中,上述运动数据可以直接输入虚幻引擎,并通过设置在虚幻引擎中的节点,对运动数据生成的姿态数据进行修型,其中,该节点可以包括但不限于虚幻引擎中的Control Rig程序节点。
在一个示例性的实施例中,可以包括但不限于通过如下步骤实现:
S1,将虚拟骨骼与角色3D模型进行绑定;
S2,将绑定好的模型导入虚幻引擎中,为其创建动画蓝图;
S3,图3是根据本申请实施例的一种可选的虚拟骨骼的修型方法的示意图,如图3所示,在动画蓝图中,添加本申请的ControlRig节点;
S4,运行,此时,原始姿态数据输入ControlRig节点进行修型,以输出修型后的目标姿态数据,可观察到修型效果。
可选地,在本实施例中,上述虚拟骨骼可以包括但不限于虚拟角色、虚拟动物、虚拟人体等通过骨骼驱动运动的虚拟模型中的虚拟骨骼,该虚拟骨骼由多个主骨骼以及主骨骼附属的子骨骼组成。
在一个示例性的实施例中,上述虚拟骨骼可以包括但不限于依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,上述依次连接可以理解为初始骨骼与第一主骨骼相连接,第一主骨骼与第二主骨骼相连接,第二主骨骼与第三主骨骼相连接。
需要说明的是,上述初始骨骼也可以称为根骨骼,在常规场景中一般不会发生旋转的骨骼,上述第一主骨骼与上述初始骨骼相连接,并允许沿着与初始骨骼连接的关节进行旋转,上述第二主骨骼与上述第一主骨骼相连接,并允许沿着与第一主骨骼连接的关节进行旋转,上述第三主骨骼与上述第二主骨骼相连接,并允许沿着与第二主骨骼连接的关节进行旋转。
示例性地,以上述虚拟骨骼是虚拟左手臂为例,图4是根据本申请实施例的另一种可选的虚拟骨骼的修型方法的示意图,如图4所示,上述初始骨骼可以理解为肩部骨骼(图4所示的LeftShoulder),上述第一主骨骼可以理解为大臂主骨骼(图4所示的LeftArm),上述第二主骨骼可以理解为小臂主骨骼(图4所示的LeftForearm),上述第三主骨骼可以理解为手掌骨骼(图4所示的LeftHand),此时,上述第一组子骨骼可以包括但不限于为以大臂骨骼为主骨骼的一组子骨骼(图4所示的LeftArmRoll 1/2/3),上述第二组子骨骼可以包括但不限于为以小臂骨骼为主骨骼的一组子骨骼(图4所示的LeftForearmRoll 1/2/3)。
需要说明的是,上述虚拟左手臂的骨骼父子关系包括:
直接父子关系:LeftShoulder->LeftArm->LeftForearm->LeftHand;
命名为LeftArmRoll1/2/3的骨骼,相互之间没有父子关系,三者的父骨骼为LeftArm;
命名为LeftForearmRoll1/2/3的骨骼,相互之间没有父子关系,三者的父骨骼为LeftForearm;
将LeftArm/LeftForearm/LeftHand三节骨骼,称之为主骨骼,用于直接承载动作捕捉数据;所有名字中包含Roll的骨骼,称之为修型骨骼,用于添加变形过渡效果。
S204,根据原始姿态数据确定第一姿态数据和第二姿态数据,其中,第一姿态数据用于根据初始骨骼、第一主骨骼以及第二主骨骼共同确定第一主骨骼的姿态数据,第二姿态数据用于根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据;
可选地,在本实施例中,上述第一姿态数据表示根据初始骨骼、第一主骨骼以及第二主骨骼共同确定的第一主骨骼的姿态数据,也即,通过获取上述原始姿态数据中与初始骨骼、第一主骨骼以及第二主骨骼对应的姿态数据,重新计算得到上述第一姿态数据。
需要说明的是,以上述虚拟骨骼是虚拟左手臂为例,上述第一姿态数据可以包括但不限于根据肩部骨骼、大臂骨骼以及小臂骨骼对应的原始姿态数据重新计算得到的,用于表示肩关节的旋转的姿态数据。
示例性地,可以获取肩部骨骼和大臂骨骼各自对应的局部坐标系,该局部坐标系可以包括但不限于为三维坐标系,包括x轴、y轴以及z轴,其中,x轴表示对应骨骼的主轴方向,用于指向与该父骨骼对应的子骨骼(也称为子关节),y轴表示朝前方向的坐标轴、z轴表示朝上方向的坐标轴,通过确定肩部骨骼的y轴方向与大臂骨骼的y轴方向之间的夹角,并确定肩部骨骼的z轴方向与大臂骨骼的z轴方向之间的夹角,并以此作为约束,并将大臂骨骼的空间位置以及小臂骨骼的空间位置输入第一预设函数,得到上述第一姿态数据。
需要说明的是,以上述虚拟骨骼是虚拟左腿部为例,上述第一姿态数据可以包括但不限于根据髋部骨骼、大腿骨骼以及小腿骨骼对应的原始姿态数据重新计算得到的,用于表示髋关节的旋转的姿态数据。
示例性地,可以获取髋部骨骼和大腿骨骼各自对应的局部坐标系,该局部坐标系可以包括但不限于为三维坐标系,包括x轴、y轴以及z轴,其中,x轴表示对应骨骼的主轴方向,用于指向与该父骨骼对应的子骨骼(也称为子关节),y轴表示朝前方向的坐标轴、z轴表示朝上方向的坐标轴,通过确定髋部骨骼的y轴方向与大腿骨骼的y轴方向之间的夹角,并确定髋部骨骼的z轴方向与大腿骨骼的z轴方向之间的夹角,并以此作为约束,并将大腿骨骼的空间位置以及小腿骨骼的空间位置输入第一预设函数,得到上述第一姿态数据。
可选地,在本实施例中,上述第二姿态数据是根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据,也即,通过获取上述原始姿态数据中与第一主骨骼、第二主骨骼以及第三主骨骼对应的姿态数据,重新计算得到上述第二姿态数据。
需要说明的是,以上述虚拟骨骼是虚拟左手臂为例,上述第二姿态数据可以包括但不限于根据大臂骨骼、小臂骨骼以及手掌骨骼对应的原始姿态数据重新计算得到的,用于表示肩关节旋转以及肘关节旋转的姿态数据。
示例性地,可以获取大臂骨骼、小臂骨骼以及手掌骨骼各自对应的空间位置,并在手臂弯曲的情况下,根据IK(反向运动,Inverse Kinematics)重建法确定出上述大臂骨骼和小臂骨骼的旋转姿态。
需要说明的是,以上述虚拟骨骼是虚拟左腿部为例,上述第二姿态数据可以包括但不限于根据大腿骨骼、小腿骨骼以及脚掌骨骼对应的原始姿态数据重新计算得到的,用于表示髋关节旋转以及踝关节旋转的姿态数据。
示例性地,可以获取大腿骨骼、小腿骨骼以及脚掌骨骼各自对应的空间位置,并在腿部弯曲的情况下,根据IK(反向运动,Inverse Kinematics)重建法确定出上述大腿骨骼和小腿骨骼的旋转姿态。
S206,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,其中,第一组姿态数据用于对第一组子骨骼进行修型;
可选地,在本实施例中,上述执行第一线性插值操作可以包括但不限于以第一姿态数据为下限,以第二姿态数据为上限进行的线程插值操作,该插值操作可以包括但不限于四元数插值法、最邻近元法、双线性内插法、三次内插法等,上述第一线性插值操作可以理解为使用连接两个已知量来确定在这两个已知量之间的一个未知量的值的方法,其中,上述两个已知量即为上述第一姿态数据和第二姿态数据。
示例性地,以上述第一线性插值操作是四元数插值法为例,对于大臂的主骨骼和修型骨骼大臂和大臂Roll1/2/3,使用四元数插值的方式使其姿态从第一姿态数据逐渐过渡到第二姿态数据,令函数Pose(x)为读写x姿态的四元数旋转,Lerp(a,b,alpha)为四元数插值函数,其中,a,b,alpha均为预设参数,则:
Pose(LeftArm)=Lerp(Pose(第一姿态数据),Pose(第二姿态数据),0);
Pose(LeftArmRoll1)=Lerp(Pose(第一姿态数据),Pose(第二姿态数据),0.333);
Pose(LeftArmRoll2)=Lerp(Pose(第一姿态数据),Pose(第二姿态数据),0.666);
Pose(LeftArmRoll3)=Lerp(Pose(第一姿态数据),Pose(第二姿态数据),1)。
其中,上述Pose(LeftArmRoll1)、Pose(LeftArmRoll2)以及Pose(LeftArmRoll3)共同组成上述第一组姿态数据。
S208,根据第二主骨骼和第三主骨骼确定第二组姿态数据,其中,第二组姿态数据用于对第二组子骨骼进行修型;
可选地,在本实施例中,上述第二组姿态数据表示第二组子骨骼各自对应的修型后的姿态数据,该第二组姿态数据可以包括但不限于先确定第三主骨骼的姿态数据,再根据第三主骨骼确定上述第二组子骨骼中与第三主骨骼最近的子骨骼的姿态数据,再依次确定第二组子骨骼中剩余子骨骼的姿态数据,最终,确定出上述第二组姿态数据。
S210,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据。
可选地,在本实施例中,上述第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据共同组成了上述目标姿态数据,也即,虚拟骨骼中各个骨骼的姿态数据均进行了重算或调整,最终,将上述目标姿态数据传递至渲染模块进行后续渲染,以显示出修型后的虚拟骨骼的变化效果。
通过本实施例,采用以各个骨骼驱动与其连接的其它骨骼完成变形,先对动作捕捉系统捕捉到的姿态数据进行矫正,依据输入姿态中各个骨骼的空间位置,重新计算各个骨骼的旋转,再对第一组子骨骼和第二组子骨骼表示的修型骨骼进行线性插值,得到修型后的目标姿态数据,达到了生成连贯、稳定、合理的姿态数据的目的,从而实现了即使动作捕捉数据中骨骼的旋转数值存在错误,动画仍然可以正确显示,并且在第一组子骨骼和第二组子骨骼对应的区域显示为连续、稳定、过渡自然的变形,使得虚拟骨骼的显示过程自然,虚拟骨骼的变形效果更好的技术效果,进而解决了虚拟骨骼的显示不自然,导致虚拟骨骼的变形效果较差的技术问题。
作为一种可选的方案,如图5所示,上述根据原始姿态数据确定第一姿态数据,包括:
S502,根据原始姿态数据确定第一重算姿态数据和第二重算姿态数据,其中,第一重算姿态数据是以初始骨骼的第一朝上向量作为约束计算得到的姿态数据,第二重算姿态数据是以初始骨骼的第一朝前向量作为约束计算得到的姿态数据,第一朝上向量的方向为初始骨骼对应的局部坐标系中指向上的坐标轴方向,第一朝前向量的方向为初始骨骼对应的局部坐标系中指向前的坐标轴方向;
S504,对第一重算姿态数据和第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,其中,第一重算姿态数据和第二重算姿态数据是目标重算姿态数据集合的边界值;
S506,根据第一主骨骼的主轴方向与第一朝上向量之间的夹角从目标重算姿态数据集合中确定出第一姿态数据,其中,主轴方向表示对应主骨骼的朝向。
可选地,在本实施例中,上述根据原始姿态数据确定第一重算姿态数据和第二重算姿态数据可以包括但不限于以初始骨骼的第一朝上向量作为约束计算得到第一姿态数据,并以初始骨骼的第一朝前向量作为约束计算得到第二姿态数据,该第一朝上向量的方向与以初始骨骼对应的局部坐标系中的z轴方向相同,该第一朝前向量的方向与以初始骨骼对应的局部坐标系中的y轴方向相同。
示例性地,图6是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图6所示,以虚拟骨骼是虚拟左手臂为例,则上述初始骨骼为肩部骨骼(图6所示LeftShoulder),则上述肩部骨骼对应的局部坐标系即为坐标系602,其中,坐标系602包括x轴、y轴以及z轴,上述第一朝上向量的方向与z轴方向相同,上述第一朝前向量的方向与y轴方向相同。
需要说明的是,上述以初始骨骼的第一朝上向量作为约束可以理解为确定第一主骨骼的朝上向量与第一朝上向量的夹角,将姿态数据集合中该夹角取值最小的姿态数据作为上述第一重算姿态数据,上述以初始骨骼的第一朝前向量作为约束可以理解为确定第一主骨骼的朝前向量与第一朝前向量的夹角,将姿态数据集合中该夹角取值最小的姿态数据作为上述第二重算姿态数据。
可选地,在本实施例中,上述第二插值操作可以包括但不限于以第一重算姿态数据为上限,以第二重算姿态数据为下限执行的线性插值操作,还可以包括但不限于以第一重算姿态数据为下限,以第二重算姿态数据为上限执行的线性插值操作,也即,上述第一重算姿态数据和第二重算姿态数据是目标重算姿态数据集合的边界值,该目标重算姿态数据集合包括上述第一重算姿态数据和第二重算姿态数据。
可选地,在本实施例中,上述主轴方向表示对应主骨骼的朝向,也可理解为主轴方向指向与该主骨骼连接的子骨骼方向。图7是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图7所示,该主轴方向可以理解为第一主骨骼对应的局部坐标系的x轴方向,该第一朝上向量是初始骨骼对应的局部坐标系的z轴方向,通过确定该主轴方向和第一朝上向量之间的夹角,以最终从目标重算姿态数据集合中确定出第一姿态数据。
具体而言,以上述虚拟骨骼是虚拟左手臂为例,则主轴方向可以理解为大臂对应的局部坐标系的x轴方向,该第一朝上向量是肩部骨骼对应的局部坐标系的z轴方向,通过确定该主轴方向和第一朝上向量之间的夹角,以最终从目标重算姿态数据集合中确定出第一姿态数据。
需要说明的是,上述从目标重算姿态数据集合中确定出第一姿态数据可以包括但不限于根据上述主轴方向与第一朝上向量之间的夹角,确定该夹角所属的角度区间,并根据不同的角度区间返回第一重算姿态数据或者第二重算姿态数据或者对第一重算姿态数据和第二重算姿态数据执行上述第二插值操作得到的姿态数据。
作为一种可选的方案,根据原始姿态数据确定第一重算姿态数据和第二重算姿态数据,包括:从原始姿态数据中获取第一主骨骼的第一位置和第二主骨骼的第二位置,其中,第一位置和第二位置用于确定第一位置指向第二位置的姿态数据集合;从原始姿态数据中获取第二朝上向量和第二朝前向量,其中,第二朝上向量的方向为第一主骨骼对应的局部坐标系中指向上的坐标轴方向,第二朝前向量的方向为第一主骨骼对应的局部坐标系中指向前的坐标轴方向;将第一位置、第二位置、第一朝上向量以及第二朝上向量输入第一预设函数确定第一重算姿态数据,并将第一位置、第二位置、第一朝前向量以及第二朝前向量输入第一预设函数确定第二重算姿态数据,其中,第一重算姿态数据是姿态数据集合中第一朝上向量和第二朝上向量的夹角最小的姿态数据,第二重算姿态数据是姿态数据集合中第一朝前向量和第二朝前向量的夹角最小的姿态数据。
可选地,在本实施例中,上述第一位置可以包括但不限于由原始姿态数据中指示第一主骨骼的位置坐标确定,上述第二位置可以包括但不限于由原始姿态数据中指示第二主骨骼的位置坐标确定,上述第二朝上向量的方向为第一主骨骼对应的局部坐标系中指向上的坐标轴方向可以理解为该第二朝上向量的方向与第一主骨骼对应的局部坐标系中z轴方向相同,上述第二朝前向量的方向为第一主骨骼对应的局部坐标系中指向前的坐标轴方向可以理解为该第二朝前向量的方向与第一主骨骼对应的局部坐标系中y轴方向相同。
图7是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图7所示,以虚拟骨骼是虚拟左手臂为例,则上述第一主骨骼为大臂骨骼(图7所示LeftArm),则上述大臂骨骼对应的局部坐标系即为坐标系702,其中,坐标系702包括x轴、y轴以及z轴,上述第二朝上向量的方向与z轴方向相同,上述第二朝前向量的方向与y轴方向相同。
可选地,在本实施例中,上述第一预设函数可以包括但不限于为虚幻引擎中的aim函数,通过将第一位置、第二位置、第一朝上向量以及第二朝上向量输入aim函数,以最终确定上述第一重算姿态数据,将第一位置、第二位置、第一朝前向量以及第二朝前向量输入aim函数,以最终确定上述第二重算姿态数据。
需要说明的是,图8是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图8所示,将P0(对应于前述的第一位置)指向P1(对应于前述的第二位置)的姿态数据集合中,A轴(第一朝上向量或第一朝前向量)和B轴(第二朝上向量或第二朝前向量)的夹角最小的解,作为上述第一重算姿态数据或第二重算姿态数据。
作为一种可选的方案,根据第一主骨骼的主轴方向与第一朝上向量之间的夹角从目标重算姿态数据集合中确定出第一姿态数据,包括:
获取主轴方向与第一朝上向量之间的夹角的目标夹角度数;根据目标夹角度数确定目标参数,其中,目标参数的取值为预设度数和目标夹角度数之差的绝对值;在目标参数位于第一度数区间的情况下,将第一重算姿态数据确定为第一姿态数据,其中,第一度数区间的下限为0,上限为预先设置的第一参考度数;在目标参数位于第二度数区间的情况下,将执行第二插值操作得到的姿态数据确定为第一姿态数据,其中,第二度数区间的下限为第一参考度数,上限为预先设置的第二参考度数;在目标参数位于第三度数区间的情况下,将第二重算姿态数据确定为第一姿态数据,其中,第三度数区间的下限为第二参考度数,上限为预设度数。
可选地,在本实施例中,上述目标参数用于确定从目标重算姿态数据集合中确定出第一姿态数据的方式,以虚拟骨骼是虚拟手臂为例,首先计算输入姿态的大臂关节的主轴方向和肩关节朝上向量的夹角度数α(对应于前述的目标夹角度数),令β=|90-α|,当β位于(0,75)区间(对应于前述的第一度数区间,其中,75即为前述第一参考度数),返回StabilizedUpperArmPose_A(对应于前述的第一重算姿态数据),当β位于(75,85)(对应于前述的第二度数区间,其中,85即为前述第二参考度数)区间,则返回StabilizedUpperArmPose_A和StabilizedUpperArmPose_B(对应于前述的第二重算姿态数据)的线性插值,当β位于(85,90)区间(对应于前述的第三度数区间),直接返回StabilizedUpperArmPose_B。经过以上计算后,大臂无论如何运动,计算结果总是在StabilizedUpperArmPose_A和StabilizedUpperArmPose_B之间平滑过渡,永远不会得到无效姿态,此步计算后可得的稳定、合理的大臂姿态,称之为StabilizedUpperArmPose,也即前述的第一姿态数据。
需要说明的是,上述第一参考度数、第二参考度数以及预设度数均由工作人员预先根据实际需要设置,本申请对于具体取值不做任何具体限定。
作为一种可选的方案,对第一重算姿态数据和第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,包括:获取目标插值系数,其中,目标插值系数的取值和目标参数相关;根据目标插值系数对第一重算姿态数据和第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,其中,目标重算姿态数据集合包括第一重算姿态数据、第二重算姿态数据以及取值处于第一重算姿态数据和第二重算姿态数据之间的姿态数据。
可选地,在本实施例中,上述目标插值系数可以包括但不限于为预设的插值系数,还可以设置为与目标系数相关的插值系数,例如,插值系数设置为min((β-75)/10,1),其中,β即为前述计算得到的目标参数,换言之,上述目标插值系数的取值可以设置为与上述主轴方向与上述第一朝上向量之间的夹角的取值相关,通过根据上述目标插值系数执行第二插值操作,可以使得计算结果总是在第一重算姿态数据和第二重算姿态数据之间平滑过渡,不会得到无效姿态。
作为一种可选的方案,如图8所示,上述根据原始姿态数据确定第二姿态数据,包括:
S802,从原始姿态数据中获取第一主骨骼的第一位置、第二主骨骼的第二位置以及第三主骨骼的第三位置;
S804,确定第一主骨骼和第二主骨骼的弯曲程度,其中,弯曲程度由第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角度数确定,主轴方向表示对应主骨骼的朝向;
S806,在弯曲程度指示当前第一主骨骼和第二主骨骼处于弯曲状态的情况下,根据第一位置、第二位置以及第三位置确定第一重建姿态数据,其中,第一重建姿态数据包括第一主骨骼在弯曲状态下的重建姿态数据和第二主骨骼在弯曲状态下的重建姿态数据;
S808,在弯曲程度指示当前第一主骨骼和第二主骨骼处于伸直状态的情况下,获取之前确定的第一重建姿态数据,并根据第一重建姿态数据重新构造第二重建姿态数据,其中,第二重建姿态数据包括第一主骨骼在伸直状态下的重建姿态数据和第二主骨骼在伸直状态下的重建姿态数据;
S810,对第一重建姿态数据和第二重建姿态数据执行第三插值操作,得到目标重建姿态数据集合;
S812,根据弯曲程度从目标重建姿态数据集合中确定出第二姿态数据。
可选地,在本实施例中,上述第一主骨骼的第一位置、第二主骨骼的第二位置以及第三主骨骼的第三位置可以由上述原始姿态数据中与第一主骨骼、第二主骨骼以及第三主骨骼关联的部分确定,上述第一位置、第二位置以及第三位置分别表示对应主骨骼在世界坐标系中的位置坐标。
可选地,在本实施例中,上述弯曲程度可以由上述第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角度数的决定,其中,上述主轴方向表示对应主骨骼的朝向,也可理解为主轴方向指向与该主骨骼连接的子骨骼方向。图9是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图9所示,该第一主骨骼的主轴方向可以理解为第一主骨骼对应的局部坐标系的x轴方向,该第二主骨骼的主轴方向可以理解为第二主骨骼对应的局部坐标系的x轴方向。具体而言,以上述虚拟骨骼是虚拟左手臂为例,则第一主骨骼的主轴方向可以理解为大臂对应的局部坐标系的x轴方向,第二主骨骼的主轴方向可以理解为小臂对应的局部坐标系的x轴方向。
可选地,在本实施例中,上述弯曲状态可以理解为上述第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角超过预设角度阈值,上述伸直状态可以理解为上述第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角未超过预设角度阈值。
需要说明的是,上述弯曲程度还可以包括半弯曲状态,也即,上述第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角位于弯曲状态和伸直状态对应的预设角度阈值之间。
可选地,在本实施例中,上述根据第一位置、第二位置以及第三位置确定第一重建姿态数据可以包括但不限于通过IK(反向运动,Inverse Kinematics)算法重建上述第一重建姿态数据。
在一个示例性的实施例中,以虚拟骨骼是虚拟手臂为例,IK重建是根据手臂弯曲时各个骨骼的空间位置来重建大臂主骨骼和小臂主骨骼的姿态,以解决动作捕捉数据的肘关节姿态存在较大误差的问题。此步骤根据输入姿态的大臂、小臂、手掌三个骨骼关节的空间位置,使用ControlRig提供的BasicIK节点重新计算得到新的大臂姿态数据和小臂姿态数据,记为第一重建姿态数据。
需要说明的是,当手臂伸直时,大臂、小臂、手掌三个关节在空间位置上共线时,由于缺乏额外约束,将返回不稳定的无效姿态,这里的解决方案是将上一次手臂尚未伸直时的肘关节姿态记录,当手臂伸直后,利用记录的姿态来重建伸直后的手臂姿态。
可选地,在本实施例中,上述获取之前确定的第一重建姿态数据,并根据第一重建姿态数据重新构造第二重建姿态数据可以包括但不限于通过记录之前虚拟骨骼尚未伸直时的第二主骨骼姿态数据,并将第二主骨骼在世界坐标系下的姿态数据变换到第一主骨骼的局部坐标系下,并存储为目标变量,当手臂接近伸直时,使用记录的小臂主骨骼对应的目标变量,依据当前第一主骨骼的姿态数据重新将目标变量变换到世界坐标系下,再次使用Aim函数,选择非主轴方向的任意轴作为额外约束重新构造出第一主骨骼和第二主骨骼的姿态数据,将其称为第二重建姿态数据。
可选地,在本实施例中,上述对第一重建姿态数据和第二重建姿态数据执行第三插值操作可以理解为根据第一主骨骼和第二主骨骼之间的弯曲程度,来实现查找操作。
在一个示例性的实施例中,以虚拟骨骼是虚拟手臂为例,可以根据肘关节的弯曲程度,在第一重建姿态数据和第二重建姿态数据之间插值,手臂弯曲时返回第一重建姿态数据,手臂半弯曲时返回第一重建姿态数据和第二重建姿态数据之间的线性插值,若手臂伸直状态直接返回第二重建姿态数据,计算后得到最终的第二姿态数据,注意第二姿态数据包含大臂和小臂主骨骼的姿态数据。
作为一种可选的方案,确定第一主骨骼和第二主骨骼的弯曲程度,包括:获取第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角度数;在夹角度数大于或等于第一预设弯曲阈值的情况下,确定弯曲程度指示当前第一主骨骼和第二主骨骼处于弯曲状态;在夹角度数小于第一预设弯曲阈值,且大于第二预设弯曲阈值的情况下,确定弯曲程度指示当前第一主骨骼和第二主骨骼处于半弯曲状态,其中,第二预设弯曲阈值小于或等于第一预设弯曲阈值;在夹角度数小于第二预设弯曲阈值的情况下,确定弯曲程度指示当前第一主骨骼和第二主骨骼处于伸直状态;根据弯曲程度从目标重建姿态数据集合中确定出第二姿态数据,包括:在弯曲程度指示当前第一主骨骼和第二主骨骼处于弯曲状态的情况下,将第一重建姿态数据确定为第二姿态数据;在弯曲程度指示当前第一主骨骼和第二主骨骼处于半弯曲状态的情况下,将执行第三插值操作得到的重建姿态数据确定为第二姿态数据;在弯曲程度指示当前第一主骨骼和第二主骨骼处于伸直状态的情况下,将第二重建姿态数据确定为第二姿态数据。
可选地,在本实施例中,上述第一主骨骼的主轴方向和第二主骨骼的主轴方向之间的夹角度数可以理解为第一主骨骼对应的局部坐标系的x轴方向和第二主骨骼对应的局部坐标系的x轴方向在世界坐标系中的夹角度数。
可选地,在本实施例中,上述第一预设弯曲阈值和第二预设弯曲阈值均由工作人员灵活设置,用于区分不同的弯曲程度。
在一个示例性的实施例中,图10是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图10所示,确定弯曲程度的方式为确定第一主骨骼的x轴方向与第二主骨骼的x轴方向之间的夹角,并将该夹角与上述第一预设弯曲阈值和第二预设弯曲阈值进行比较,最终决定当前第一主骨骼与第二主骨骼的弯曲程度。
作为一种可选的方案,在弯曲程度指示当前第一主骨骼和第二主骨骼处于伸直状态的情况下,获取之前确定的第一重建姿态数据,并根据第一重建姿态数据重新构造第二重建姿态数据,包括:在弯曲程度指示当前第一主骨骼和第二主骨骼处于弯曲状态的情况下,将第二主骨骼在弯曲状态下的重建姿态数据转换至第一主骨骼的局部坐标系并存储为目标变量,其中,第二主骨骼在弯曲状态下的重建姿态数据是世界坐标系中的姿态数据,世界坐标系与局部坐标系之间的姿态数据允许相互转换,目标变量包括第一向量,第一向量的方向与弯曲状态下第二主骨骼的局部坐标系中的第一坐标轴相同;在弯曲程度指示当前第一主骨骼和第二主骨骼处于伸直状态的情况下,将目标变量重新转换至世界坐标系,并确定第二向量,其中,第二向量的方向与伸直状态下第二主骨骼的局部坐标系中的第二坐标轴相同;将第二位置、第三位置、第一向量以及第二向量输入第一预设函数确定第二重建姿态数据,其中,第二重建姿态数据是第一向量和第二向量之间的夹角最小的姿态数据。
可选地,在本实施例中,上述第二主骨骼在弯曲状态下的重建姿态数据转换至第一主骨骼的局部坐标系可以理解为将第二主骨骼在弯曲状态下的重建姿态数据对应的主轴方向转换至第一主骨骼的局部坐标系进行保存,这是由于即使发生第一主骨骼和第二主骨骼之间关节的弯曲,第一主骨骼的局部坐标系的坐标轴方向依旧保持不变,改变的是第二主骨骼的局部坐标系的坐标轴方向。
需要说明的是,上述目标变量可以是第一主骨骼和第二主骨骼处于弯曲状态下,最新保存的第二主骨骼姿态数据,该第二主骨骼姿态数据记录有处于弯曲状态下,第二主骨骼对应的局部坐标系的y轴方向或z轴方向,该y轴方向或z轴方向通过第一向量进行记录,当第一主骨骼和第二主骨骼处于伸直状态下,确定当前第二主骨骼对应的局部坐标系的y轴方向或z轴方向,该y轴方向或z轴方向通过第二向量进行记录,再通过获取目标变量中存储的之前第二主骨骼对应的局部坐标系的y轴方向或z轴方向,以将两个y轴方向或两个z轴方向作为约束,将第二位置、第三位置、第一向量以及第二向量输入Aim函数确定第二重建姿态数据,其中,第二重建姿态数据是第一向量和第二向量之间的夹角最小的姿态数据。
在一个示例性的实施例中,图11是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图11所示,
作为一种可选的方案,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,包括:
对第一姿态数据和第二姿态数据执行四元数线性插值操作,得到子骨骼姿态数据集合,其中,第一姿态数据和第二姿态数据是子骨骼姿态数据集合中的边界值;
从子骨骼姿态数据集合中确定第一组姿态数据,其中,第一组子骨骼中距离第一主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近第一姿态数据,第一组子骨骼中距离第一主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近第二姿态数据。
可选地,在本实施例中,上述四元数线性插值操作的函数参数可以由工作人员预先根据实际需要灵活设置,上述第一组子骨骼中距离第一主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近第一姿态数据,第一组子骨骼中距离第一主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近第二姿态数据可以理解为当子骨骼距离第一主骨骼越近,则该子骨骼对应的姿态数据越接近第一姿态数据的取值,当子骨骼距离第一主骨骼越远,则该子骨骼对应的姿态数据越接近第二姿态数据的取值。
在一个示例性的实施例中,以虚拟骨骼是虚拟手臂为例,对于大臂的主骨骼和修型骨骼(LeftArmRoll1/2/3,对应于前述的第一组子骨骼),使用四元数插值的方式使其姿态从第一姿态数据逐渐过渡到第二姿态数据所指示的姿态,令函数Pose(x)为读写x姿态的四元数旋转,Lerp(a,b,alpha)为四元数插值函数,a、b、alpha均为预设参数,则:
Pose(LeftArmRoll1)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),0.333);
Pose(LeftArmRoll2)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),0.666);
Pose(LeftArmRoll3)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),1),其中,StabilizedUpperArmPose表示第一姿态数据,ArmIKPose表示第二姿态数据。
作为一种可选的方案,根据第二主骨骼和第三主骨骼确定第二组姿态数据,包括:获取与第三主骨骼对应的第三向量,其中,第三向量与第三坐标轴的方向相同,第三坐标轴是第三主骨骼对应的局部坐标系中的非主坐标轴;将第三向量投影至第二主骨骼的局部坐标系中,确定第二组姿态数据。
可选地,在本实施例中,上述第三向量可以理解为用于指示第三坐标轴方向的向量,该第三坐标轴可以包括但不限于第三主骨骼对应的局部坐标系中的y轴和z轴,也即,上述局部坐标系中x轴为主坐标轴,而除x轴之外的其它坐标轴即为上述非主坐标轴。
可选地,在本实施例中,上述将第三向量投影至第二主骨骼的局部坐标系可以理解为将第三坐标轴的方向展示在上述第二主骨骼的局部坐标系中,以根据该第三坐标轴的方向和第二主骨骼的局部坐标系中相同坐标轴的方向之间的夹角生成上述第二组姿态数据。
作为一种可选的方案,将第三向量投影至第二主骨骼的局部坐标系中,确定第二组姿态数据,包括:将第三向量投影至第二主骨骼的局部坐标系中,得到第四向量,其中,第四向量的方向与第三向量的方向相同;计算第四向量与第二主骨骼对应的局部坐标系中与第三坐标轴对应的第四坐标轴之间的夹角;根据夹角确定第二组姿态数据。
可选地,在本实施例中,上述第四向量用于在第二主骨骼对应的局部坐标系指示上述第三坐标轴的方向,以计算与第三坐标轴对应的第四坐标轴之间的夹角。
在一个示例性的实施例中,图12是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图12所示,将第三向量投影至第二主骨骼的局部坐标系中得到第四向量,再计算第三向量和第四向量之间的夹角,确定第二组姿态数据。
作为一种可选的方案,根据夹角确定第二组姿态数据,包括:
根据夹角确定目标子骨骼姿态数据,其中,目标子骨骼姿态数据表示目标子骨骼需要旋转的角度,目标子骨骼需要旋转的角度与夹角的度数相同,目标子骨骼是第二组子骨骼中距离第三主骨骼最近的子骨骼;从第二姿态数据中确定第二主骨骼的姿态数据;对第二主骨骼的姿态数据和目标子骨骼姿态数据执行第一线性插值操作,确定第二组姿态数据,其中,第二组子骨骼中距离第二主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近第二主骨骼的姿态数据,第二组子骨骼中距离第二主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近目标子骨骼姿态数据。
可选地,在本实施例中,上述原始姿态数据记录有上述第三主骨骼需要旋转的角度,而根据第三主骨骼需要旋转的角度可以确定第二组子骨骼中距离第三主骨骼最近的目标子骨骼需要旋转的角度,再以上述第二姿态数据中确定的第二主骨骼的姿态数据以及目标子骨骼的姿态数据为边界,计算其余子骨骼的姿态数据。
在一个示例性的实施例中,以虚拟骨骼是虚拟手臂为例,对小臂和小臂Roll3之间的修型骨骼做线性姿态插值:Pose(LeftForearmRoll1)=Lerp(Pose(LeftForearm),Pose(LeftForearmRoll3),0.333);Pose(LeftForearmRoll2)=Lerp(Pose(LeftForearm),Pose(LeftForearmRoll3),0.666)。
下面结合具体的示例,对本申请进行进一步地解释说明:
本申请提供一种基于虚幻引擎的ControlRig模块对手臂动画进行实时修型的技术方案,技术关键点包括对动作捕捉系统输出的原始动作数据进行姿态矫正的方法,以及对各个修型骨骼的驱动方式,使用本申请可改善动作捕捉角色动画的显示效果。本申请的实际载体可以包括但不限于是一个封装好的ControlRig节点,在虚幻引擎中直接调用本节点,即可实现本申请的骨骼修型
相比现有技术,本申请先对动捕数据进行矫正,依据输入姿态中手臂各个关节的空间位置,重新计算手臂各个关节的旋转,以生成连贯、稳定、姿态合理的关节旋转,再对肩-肘-手和髋-膝-脚骨骼链上的修型骨骼进行姿态线性插值。本申请是骨骼驱动其他骨骼完成变形,先对动作捕捉数据进行矫正之后,再进行修型骨骼变形插值。
使用本申请的产品实现步骤主要包括:
S1,按照本申请提出的骨骼结构对角色3D模型进行绑定;
S2,将绑定好的模型导入虚幻引擎中,为其创建动画蓝图;
S3,在动画蓝图中,添加本申请的ControlRig节点。
S4,运行动画蓝图,以观察到修型效果。
本申请的骨骼结构,将左肩膀骨骼命名为LeftShoulder,将左手骨骼命名为LeftHand,将大臂的四节骨从上到下分别称之为:LeftArm、LeftArmRoll1、LeftArmRoll2、LeftArmRoll3,将小臂的四节骨骼从上到下分别命名为:LeftForearm、LeftForearmRoll1、LeftForearmRoll2、LeftForearmRoll3,顶点的蒙皮权重遵循就近原则绘制。
整个左臂的骨骼父子关系为:直接父子关系:LeftShoulder->LeftArm->LeftForearm->LeftHand,命名为LeftArmRoll1/2/3的骨骼,相互之间没有父子关系,三者的父骨骼为LeftArm,命名为LeftForearmRoll1/2/3的骨骼,相互之间没有父子关系,三者的父骨骼为LeftForearm小臂。将LeftArm大臂/LeftForearm小臂/LeftHand三节骨骼,称之为主骨骼,用于直接承载动作捕捉数据,所有名字中包含Roll的骨骼,称之为修型骨骼,用于添加变形过渡效果。
图13是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图13所示,本申请的Control Rig程序逻辑的流程包括:
S1,输入手臂姿态:获取从动作捕捉系统输出的原始姿态数据(逐帧动作捕捉数据分别处理,可以包括但不限于以数组形式记录)。
S2,重算大臂主骨骼姿态:此步骤分为三个子步骤,分别是以肩关节朝上向量作为约束构建得到一个姿态,再以肩关节朝前向量作为约束得到另外一个姿态,再根据大臂主方向和肩关节朝上向量的夹角,在以上两个姿态之间做线性插值。
S3,以肩关节朝上向量作为约束重算:此步骤是为了计算当大臂指向身体前后方、侧方时,LeftArm大臂关节的合理旋转。计算方法是借用ControlRig提供库节点Aim,给定Aim的起点为原始LeftArm大臂关节的空间位置坐标P0,终点为原始LeftForearm小臂关节的空间位置坐标P1。称绑定姿态的LeftArm大臂骨骼三个局部坐标轴中指向上的轴为A轴,肩关节局部坐标系的三个基向量中指向上的B轴,使用A轴和B轴作为Aim函数的额外约束参数,函数Aim(P0,P1,A,B)生成一个空间旋转姿态,命名为StabilizedUpperArmPose_A。经过Aim计算后,StabilizedUpperArmPose_A的空间姿态将是所有P0指向P1的姿态中,A轴和B轴的夹角最小的解。
S4,以肩关节朝前向量作为约束重算:类似步骤S3,不同的是,选择绑定姿态的LeftArm大臂骨骼的三个局部坐标轴中指向前的轴为A轴,肩关节局部坐标系的三个基向量中指向前的轴为B轴,P0、P1同步骤S3,函数Aim(P0,P1,A,B)生成一个姿态StabilizedUpperArmPose_B。
S5,计算稳定的大臂主骨骼姿态:当大臂垂直举起或者垂直放下时,输入姿态的大臂骨骼主方向和肩关节的朝上向量的夹角接近0度或者180度,由于Aim节点使用向量叉乘来计算输出姿态,角度接近0或180的两个向量叉乘,结果接近于0,此时StabilizedUpperArmPose_A是趋于无效的(误差很大或极不稳定的);当大臂轴向指向正前方或者正后方时,输入姿态的LeftArm大臂骨骼主方向和肩关节的朝前向量之间的叉乘结果也接近为0,生成的姿态StabilizedUpperArmPose_B是趋于无效的。为保证计算结果永远有效,设计一个插值算法,当StabilizedUpperArmPose_A趋向无效时返回StabilizedUpperArmPose_B,当StabilizedUpperArmPose_B趋向无效时候返回StabilizedUpperArmPose_A。首先计算输入姿态的LeftArm大臂关节的主轴方向和肩关节朝上向量的夹角度数α,令β=|90-α|,当β位于(0,75)区间,返回StabilizedUpperArmPose_A,当β位于(75,85)区间,则返回StabilizedUpperArmPose_A和StabilizedUpperArmPose_B的线性插值,插值系数为min((β-75)/10,1),当β位于(85,90)区间,直接返回StabilizedUpperArmPose_B。经过以上计算后,大臂无论如何运动,计算结果总是在StabilizedUpperArmPose_A和StabilizedUpperArmPose_B之间平滑过渡,永远不会得到无效姿态。此步计算后可得的稳定、合理的大臂旋转姿态,称之为StabilizedUpperArmPose。
S6,IK重建手臂姿态:IK重建是根据手臂弯曲时的关节空间位置来重建大臂小臂主骨骼的姿态,以解决动作捕捉数据的肘关节姿态存在较大误差的问题。此步骤根据输入姿态的LeftArm大臂、LeftForearm小臂、LeftHand三个骨骼关节的空间位置,使用ControlRig提供的BasicIK节点重新计算得到新的大臂小臂姿态,记为ArmIKPoseA。
需要说明的是,当手臂伸直时,LeftArm大臂、LeftForearm小臂、LeftHand三个关节在空间位置上共线时,由于缺乏额外约束,将返回不稳定的无效姿态,这里的解决方案是将上一次手臂尚未伸直时的肘关节姿态记录,当手臂伸直后,利用记录的姿态来重建伸直后的手臂姿态,如步骤S7所述。这里定义LeftArm大臂/LeftForearm小臂主轴夹角大于12.5度时手臂为弯曲,夹角度数在(8.5,12.5)区间为半弯曲,夹角小于8.5度为伸直状态。
S7,记录小臂主骨骼姿态:如果手臂弯曲,将LeftForearm小臂的世界坐标下的旋转姿态变换到LeftArm大臂的局部坐标系下,并存储为变量ForearmPoseCached。
S8,手臂伸直姿态计算:当手臂接近伸直时,使用记录的小臂主骨骼ForearmPoseCached姿态,依据当前大臂姿态重新将其变换到世界坐标系下。再次使用Aim函数,选择非主轴方向的任意轴作为额外约束重新构造出大臂小臂主骨骼的姿态,将其称为ArmIKPoseB。
S9,插值混合ArmIKPose:根据肘关节的弯曲程度,在ArmIKPoseA和ArmIKPoseB之间插值,手臂弯曲时返回ArmIKPoseA,手臂半弯曲时返回ArmIKPoseA和ArmIKPoseB之间的线性插值,若手臂伸直状态直接返回ArmIKPoseB,计算后得到最终的ArmIKPose,注意ArmIKPose是包含大臂和小臂主骨骼的姿态。
S10,计算新大臂骨骼姿态:对于大臂的主骨骼和修型骨骼LeftArm大臂和LeftArm大臂Roll1/2/3,使用四元数插值的方式使其姿态从StabilizedUpperArmPose逐渐过渡到ArmIKPose的姿态,令函数Pose(x)为读写x姿态的四元数旋转,Lerp(a,b,alpha)为四元数插值函数,则:
Pose(LeftArm)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),0);
Pose(LeftArmRoll1)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),0.333);
Pose(LeftArmRoll2)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),0.666);
Pose(LeftArmRoll3)=Lerp(Pose(StabilizedUpperArmPose),Pose(ArmIKPose),1)。
S11,计算小臂末端修型骨骼姿态:首先选择一个非主轴的坐标轴,作为小臂旋转测量轴,假设骨骼的主轴是X轴,这里选择Y轴,将输入姿态的LeftHand骨骼的Y轴方向投影到LeftForearm骨骼局部坐标系的XZ平面上,得到向量和LeftForearm的Y轴的夹角,即为小臂末端相对绑定姿态的旋转角度。将小臂末端修型骨骼LeftForearmRoll3沿其主轴旋转相应角度,得到LeftForearmRoll3的新姿态。
S12,计算其余小臂修型骨骼:对LeftForearm小臂和LeftForearm小臂Roll3之间的修型骨骼做线性姿态插值:
Pose(LeftForearmRoll1)=Lerp(Pose(LeftForearm),Pose(LeftForearmRoll3),0.333);
Pose(LeftForearmRoll2)=Lerp(Pose(LeftForearm),Pose(LeftForearmRoll3),0.666)。
至此全部主骨骼和修型骨骼的新姿态计算完毕。
S13,输出姿态:计算完成,将最终姿态返回上级动画蓝图。
使用本申请方案后,实时动作捕捉的动画数据,即使动捕数据中手臂骨骼的旋转数值存在错误,动画仍然可以正确显示,并且在肩膀、肘、腕区域有连续、稳定、过渡自然的变形。图14是根据本申请实施例的又一种可选的虚拟骨骼的修型方法的示意图,如图14所示,应用本申请的前后效果对比,可以看出进行修型后的动画角色姿态更加自然。
可以理解的是,在本申请的具体实施方式中,涉及到用户信息等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
根据本申请实施例的另一个方面,还提供了一种用于实施上述虚拟骨骼的修型方法的虚拟骨骼的修型装置。如图15所示,该装置包括:
获取模块1502,用于获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,所述虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,所述第一主骨骼与所述第二主骨骼之间还包括依次连接的第一组子骨骼,所述第二主骨骼和所述第三主骨骼之间还包括依次连接的第二组子骨骼,所述第一主骨骼是所述第一组子骨骼的父骨骼,所述第二主骨骼是所述第二组子骨骼的父骨骼;
第一确定模块1504,用于根据所述原始姿态数据确定第一姿态数据和第二姿态数据,其中,所述第一姿态数据用于根据所述初始骨骼、所述第一主骨骼以及所述第二主骨骼共同确定所述第一主骨骼的姿态数据,所述第二姿态数据用于根据所述第一主骨骼、所述第二主骨骼以及所述第三主骨骼共同确定所述第一主骨骼和所述第二主骨骼的姿态数据;
执行模块1506,用于对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,其中,所述第一组姿态数据用于对所述第一组子骨骼进行修型;
第二确定模块1508,用于根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,其中,所述第二组姿态数据用于对所述第二组子骨骼进行修型;
生成模块1510,用于根据所述第一姿态数据、所述第二姿态数据、所述第一组姿态数据以及所述第二组姿态数据生成目标姿态数据,其中,所述目标姿态数据表示对所述原始姿态数据修型后的姿态数据。
作为一种可选的方案,所述装置用于通过如下方式根据所述原始姿态数据确定第一姿态数据:根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据,其中,所述第一重算姿态数据是以所述初始骨骼的第一朝上向量作为约束计算得到的姿态数据,所述第二重算姿态数据是以所述初始骨骼的第一朝前向量作为约束计算得到的姿态数据,所述第一朝上向量的方向为所述初始骨骼对应的局部坐标系中指向上的坐标轴方向,所述第一朝前向量的方向为所述初始骨骼对应的局部坐标系中指向前的坐标轴方向;对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,其中,所述第一重算姿态数据和所述第二重算姿态数据是所述目标重算姿态数据集合的边界值;根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据,其中,所述主轴方向表示对应主骨骼的朝向。
作为一种可选的方案,所述装置用于通过如下方式根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据:从所述原始姿态数据中获取所述第一主骨骼的第一位置和所述第二主骨骼的第二位置,其中,所述第一位置和所述第二位置用于确定所述第一位置指向所述第二位置的姿态数据集合;从所述原始姿态数据中获取第二朝上向量和第二朝前向量,其中,所述第二朝上向量的方向为所述第一主骨骼对应的局部坐标系中指向上的坐标轴方向,所述第二朝前向量的方向为所述第一主骨骼对应的局部坐标系中指向前的坐标轴方向;将所述第一位置、所述第二位置、所述第一朝上向量以及所述第二朝上向量输入第一预设函数确定所述第一重算姿态数据,并将所述第一位置、所述第二位置、所述第一朝前向量以及所述第二朝前向量输入所述第一预设函数确定所述第二重算姿态数据,其中,所述第一重算姿态数据是所述姿态数据集合中所述第一朝上向量和所述第二朝上向量的夹角最小的姿态数据,所述第二重算姿态数据是所述姿态数据集合中所述第一朝前向量和所述第二朝前向量的夹角最小的姿态数据。
作为一种可选的方案,所述装置用于通过如下方式根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据:获取所述主轴方向与所述第一朝上向量之间的夹角的目标夹角度数;根据所述目标夹角度数确定目标参数,其中,所述目标参数的取值为预设度数和所述目标夹角度数之差的绝对值;在所述目标参数位于第一度数区间的情况下,将所述第一重算姿态数据确定为所述第一姿态数据,其中,所述第一度数区间的下限为0,上限为预先设置的第一参考度数;在所述目标参数位于第二度数区间的情况下,将执行所述第二插值操作得到的姿态数据确定为所述第一姿态数据,其中,所述第二度数区间的下限为所述第一参考度数,上限为预先设置的第二参考度数;在所述目标参数位于第三度数区间的情况下,将所述第二重算姿态数据确定为所述第一姿态数据,其中,所述第三度数区间的下限为所述第二参考度数,上限为所述预设度数。
作为一种可选的方案,所述装置用于通过如下方式对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合:获取目标插值系数,其中,所述目标插值系数的取值和所述目标参数相关;根据所述目标插值系数对所述第一重算姿态数据和所述第二重算姿态数据执行所述第二插值操作,得到目标重算姿态数据集合,其中,所述目标重算姿态数据集合包括所述第一重算姿态数据、所述第二重算姿态数据以及取值处于所述第一重算姿态数据和所述第二重算姿态数据之间的姿态数据。
作为一种可选的方案,所述装置用于通过如下方式根据所述原始姿态数据确定第二姿态数据:从所述原始姿态数据中获取所述第一主骨骼的第一位置、第二主骨骼的第二位置以及第三主骨骼的第三位置;确定所述第一主骨骼和所述第二主骨骼的弯曲程度,其中,所述弯曲程度由所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数确定,所述主轴方向表示对应主骨骼的朝向;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,根据所述第一位置、所述第二位置以及所述第三位置确定第一重建姿态数据,其中,所述第一重建姿态数据包括所述第一主骨骼在所述弯曲状态下的重建姿态数据和所述第二主骨骼在所述弯曲状态下的重建姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据,其中,所述第二重建姿态数据包括所述第一主骨骼在所述伸直状态下的重建姿态数据和所述第二主骨骼在所述伸直状态下的重建姿态数据;对所述第一重建姿态数据和所述第二重建姿态数据执行第三插值操作,得到目标重建姿态数据集合;根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据。
作为一种可选的方案,所述装置用于通过如下方式确定所述第一主骨骼和所述第二主骨骼的弯曲程度:获取所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数;在所述夹角度数大于或等于第一预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态;在所述夹角度数小于所述第一预设弯曲阈值,且大于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于半弯曲状态,其中,所述第二预设弯曲阈值小于或等于所述第一预设弯曲阈值;在所述夹角度数小于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态;所述装置用于通过如下方式根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据:在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述弯曲状态的情况下,将所述第一重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述半弯曲状态的情况下,将执行所述第三插值操作得到的重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述伸直状态的情况下,将所述第二重建姿态数据确定为所述第二姿态数据。
作为一种可选的方案,所述装置用于通过如下方式在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据:在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,将所述第二主骨骼在所述弯曲状态下的重建姿态数据转换至所述第一主骨骼的局部坐标系并存储为目标变量,其中,所述第二主骨骼在所述弯曲状态下的重建姿态数据是世界坐标系中的姿态数据,所述世界坐标系与所述局部坐标系之间的姿态数据允许相互转换,所述目标变量包括第一向量,所述第一向量的方向与所述弯曲状态下所述第二主骨骼的局部坐标系中的第一坐标轴相同;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,将所述目标变量重新转换至所述世界坐标系,并确定第二向量,其中,所述第二向量的方向与所述伸直状态下所述第二主骨骼的局部坐标系中的第二坐标轴相同;将所述第二位置、所述第三位置、所述第一向量以及所述第二向量输入第一预设函数确定所述第二重建姿态数据,其中,所述第二重建姿态数据是所述第一向量和所述第二向量之间的夹角最小的姿态数据。
作为一种可选的方案,所述装置用于通过如下方式对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据:对所述第一姿态数据和所述第二姿态数据执行四元数线性插值操作,得到子骨骼姿态数据集合,其中,所述第一姿态数据和所述第二姿态数据是所述子骨骼姿态数据集合中的边界值;从所述子骨骼姿态数据集合中确定所述第一组姿态数据,其中,所述第一组子骨骼中距离所述第一主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第一姿态数据,所述第一组子骨骼中距离所述第一主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述第二姿态数据。
作为一种可选的方案,所述装置用于通过如下方式根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据:获取与所述第三主骨骼对应的第三向量,其中,所述第三向量与第三坐标轴的方向相同,所述第三坐标轴是所述第三主骨骼对应的局部坐标系中的非主坐标轴;将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据。
作为一种可选的方案,所述装置用于通过如下方式将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据:将所述第三向量投影至所述第二主骨骼的局部坐标系中,得到第四向量,其中,所述第四向量的方向与所述第三向量的方向相同;计算所述第四向量与所述第二主骨骼对应的局部坐标系中与所述第三坐标轴对应的第四坐标轴之间的夹角;根据所述夹角确定所述第二组姿态数据。
作为一种可选的方案,所述装置用于通过如下方式根据所述夹角确定所述第二组姿态数据:根据所述夹角确定目标子骨骼姿态数据,其中,所述目标子骨骼姿态数据表示目标子骨骼需要旋转的角度,所述目标子骨骼需要旋转的角度与所述夹角的度数相同,所述目标子骨骼是所述第二组子骨骼中距离所述第三主骨骼最近的子骨骼;从所述第二姿态数据中确定所述第二主骨骼的姿态数据;对所述第二主骨骼的姿态数据和所述目标子骨骼姿态数据执行所述第一线性插值操作,确定所述第二组姿态数据,其中,所述第二组子骨骼中距离所述第二主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第二主骨骼的姿态数据,所述第二组子骨骼中距离所述第二主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述目标子骨骼姿态数据。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序/指令,该计算机程序/指令包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理器1601执行时,执行本申请实施例提供的各种功能。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
图16示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。
需要说明的是,图16示出的电子设备的计算机系统1600仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图16所示,计算机系统1600包括中央处理器1601(Central Processing Unit,CPU),其可以根据存储在只读存储器1602(Read-Only Memory,ROM)中的程序或者从存储部分1608加载到随机访问存储器1603(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1603中,还存储有系统操作所需的各种程序和数据。中央处理器1601、在只读存储器1602以及随机访问存储器1603通过总线1604彼此相连。输入/输出接口1605(Input/Output接口,即I/O接口)也连接至总线1604。
以下部件连接至输入/输出接口1605:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1607;包括硬盘等的存储部分1608;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至输入/输出接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入存储部分1608。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理器1601执行时,执行本申请的系统中限定的各种功能。
根据本申请实施例的又一个方面,还提供了一种用于实施上述虚拟骨骼的修型方法的电子设备,该电子设备可以是图1所示的终端设备或服务器。本实施例以该电子设备为终端设备为例来说明。如图17所示,该电子设备包括存储器1702和处理器1704,该存储器1702中存储有计算机程序,该处理器1704被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,第一主骨骼与第二主骨骼之间还包括依次连接的第一组子骨骼,第二主骨骼和第三主骨骼之间还包括依次连接的第二组子骨骼,第一主骨骼是第一组子骨骼的父骨骼,第二主骨骼是第二组子骨骼的父骨骼;
S2,根据原始姿态数据确定第一姿态数据和第二姿态数据,其中,第一姿态数据用于根据初始骨骼、第一主骨骼以及第二主骨骼共同确定第一主骨骼的姿态数据,第二姿态数据用于根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据;
S3,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,其中,第一组姿态数据用于对第一组子骨骼进行修型;
S4,根据第二主骨骼和第三主骨骼确定第二组姿态数据,其中,第二组姿态数据用于对第二组子骨骼进行修型;
S5,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据。
可选地,本领域普通技术人员可以理解,图17所示的结构仅为示意,电子装置电子设备也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图17其并不对上述电子装置电子设备的结构造成限定。例如,电子装置电子设备还可包括比图17中所示更多或者更少的组件(如网络接口等),或者具有与图17所示不同的配置。
其中,存储器1702可用于存储软件程序以及模块,如本申请实施例中的虚拟骨骼的修型方法和装置对应的程序指令/模块,处理器1704通过运行存储在存储器1702内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的虚拟骨骼的修型方法。存储器1702可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1702可进一步包括相对于处理器1704远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器1702具体可以但不限于用于姿态数据等信息。作为一种示例,如图17所示,上述存储器1702中可以但不限于包括上述虚拟骨骼的修型装置中的获取模块1502、第一确定模块1504、执行模块1506、第二确定模块1508以及生成模块1510。此外,还可以包括但不限于上述虚拟骨骼的修型装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置1706用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1706包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1706为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子设备还包括:显示器1708,用于显示上述动画蓝图;和连接总线1710,用于连接上述电子设备中的各个模块部件。
在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
根据本申请的一个方面,提供了一种计算机可读存储介质,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述虚拟骨骼的修型方面的各种可选实现方式中提供的虚拟骨骼的修型方法。
可选地,在本实施例中,上述计算机可读存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,第一主骨骼与第二主骨骼之间还包括依次连接的第一组子骨骼,第二主骨骼和第三主骨骼之间还包括依次连接的第二组子骨骼,第一主骨骼是第一组子骨骼的父骨骼,第二主骨骼是第二组子骨骼的父骨骼;
S2,根据原始姿态数据确定第一姿态数据和第二姿态数据,其中,第一姿态数据用于根据初始骨骼、第一主骨骼以及第二主骨骼共同确定第一主骨骼的姿态数据,第二姿态数据用于根据第一主骨骼、第二主骨骼以及第三主骨骼共同确定第一主骨骼和第二主骨骼的姿态数据;
S3,对第一姿态数据和第二姿态数据执行第一线性插值操作,确定第一组子骨骼对应的第一组姿态数据,其中,第一组姿态数据用于对第一组子骨骼进行修型;
S4,根据第二主骨骼和第三主骨骼确定第二组姿态数据,其中,第二组姿态数据用于对第二组子骨骼进行修型;
S5,根据第一姿态数据、第二姿态数据、第一组姿态数据以及第二组姿态数据生成目标姿态数据,其中,目标姿态数据表示对原始姿态数据修型后的姿态数据。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (16)

1.一种虚拟骨骼的修型方法,其特征在于,包括:
获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,所述虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,所述第一主骨骼与所述第二主骨骼之间还包括依次连接的第一组子骨骼,所述第二主骨骼和所述第三主骨骼之间还包括依次连接的第二组子骨骼,所述第一主骨骼是所述第一组子骨骼的父骨骼,所述第二主骨骼是所述第二组子骨骼的父骨骼;
根据所述原始姿态数据确定第一姿态数据和第二姿态数据,其中,所述第一姿态数据用于根据所述初始骨骼、所述第一主骨骼以及所述第二主骨骼共同确定所述第一主骨骼的姿态数据,所述第二姿态数据用于根据所述第一主骨骼、所述第二主骨骼以及所述第三主骨骼共同确定所述第一主骨骼和所述第二主骨骼的姿态数据;
对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,其中,所述第一组姿态数据用于对所述第一组子骨骼进行修型;
根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,其中,所述第二组姿态数据用于对所述第二组子骨骼进行修型;
根据所述第一姿态数据、所述第二姿态数据、所述第一组姿态数据以及所述第二组姿态数据生成目标姿态数据,其中,所述目标姿态数据表示对所述原始姿态数据修型后的姿态数据。
2.根据权利要求1所述的方法,其特征在于,所述根据所述原始姿态数据确定第一姿态数据,包括:
根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据,其中,所述第一重算姿态数据是以所述初始骨骼的第一朝上向量作为约束计算得到的姿态数据,所述第二重算姿态数据是以所述初始骨骼的第一朝前向量作为约束计算得到的姿态数据,所述第一朝上向量的方向为所述初始骨骼对应的局部坐标系中指向上的坐标轴方向,所述第一朝前向量的方向为所述初始骨骼对应的局部坐标系中指向前的坐标轴方向;
对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,其中,所述第一重算姿态数据和所述第二重算姿态数据是所述目标重算姿态数据集合的边界值;
根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据,其中,所述主轴方向表示对应主骨骼的朝向。
3.根据权利要求2所述的方法,其特征在于,所述根据所述原始姿态数据确定第一重算姿态数据和第二重算姿态数据,包括:
从所述原始姿态数据中获取所述第一主骨骼的第一位置和所述第二主骨骼的第二位置,其中,所述第一位置和所述第二位置用于确定所述第一位置指向所述第二位置的姿态数据集合;
从所述原始姿态数据中获取第二朝上向量和第二朝前向量,其中,所述第二朝上向量的方向为所述第一主骨骼对应的局部坐标系中指向上的坐标轴方向,所述第二朝前向量的方向为所述第一主骨骼对应的局部坐标系中指向前的坐标轴方向;
将所述第一位置、所述第二位置、所述第一朝上向量以及所述第二朝上向量输入第一预设函数确定所述第一重算姿态数据,并将所述第一位置、所述第二位置、所述第一朝前向量以及所述第二朝前向量输入所述第一预设函数确定所述第二重算姿态数据,其中,所述第一重算姿态数据是所述姿态数据集合中所述第一朝上向量和所述第二朝上向量的夹角最小的姿态数据,所述第二重算姿态数据是所述姿态数据集合中所述第一朝前向量和所述第二朝前向量的夹角最小的姿态数据。
4.根据权利要求2所述的方法,其特征在于,所述根据所述第一主骨骼的主轴方向与所述第一朝上向量之间的夹角从所述目标重算姿态数据集合中确定出所述第一姿态数据,包括:
获取所述主轴方向与所述第一朝上向量之间的夹角的目标夹角度数;
根据所述目标夹角度数确定目标参数,其中,所述目标参数的取值为预设度数和所述目标夹角度数之差的绝对值;
在所述目标参数位于第一度数区间的情况下,将所述第一重算姿态数据确定为所述第一姿态数据,其中,所述第一度数区间的下限为0,上限为预先设置的第一参考度数;
在所述目标参数位于第二度数区间的情况下,将执行所述第二插值操作得到的姿态数据确定为所述第一姿态数据,其中,所述第二度数区间的下限为所述第一参考度数,上限为预先设置的第二参考度数;
在所述目标参数位于第三度数区间的情况下,将所述第二重算姿态数据确定为所述第一姿态数据,其中,所述第三度数区间的下限为所述第二参考度数,上限为所述预设度数。
5.根据权利要求4所述的方法,其特征在于,所述对所述第一重算姿态数据和所述第二重算姿态数据执行第二插值操作,得到目标重算姿态数据集合,包括:
获取目标插值系数,其中,所述目标插值系数的取值和所述目标参数相关;
根据所述目标插值系数对所述第一重算姿态数据和所述第二重算姿态数据执行所述第二插值操作,得到目标重算姿态数据集合,其中,所述目标重算姿态数据集合包括所述第一重算姿态数据、所述第二重算姿态数据以及取值处于所述第一重算姿态数据和所述第二重算姿态数据之间的姿态数据。
6.根据权利要求1所述的方法,其特征在于,所述根据所述原始姿态数据确定第二姿态数据,包括:
从所述原始姿态数据中获取所述第一主骨骼的第一位置、第二主骨骼的第二位置以及第三主骨骼的第三位置;
确定所述第一主骨骼和所述第二主骨骼的弯曲程度,其中,所述弯曲程度由所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数确定,所述主轴方向表示对应主骨骼的朝向;
在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,根据所述第一位置、所述第二位置以及所述第三位置确定第一重建姿态数据,其中,所述第一重建姿态数据包括所述第一主骨骼在所述弯曲状态下的重建姿态数据和所述第二主骨骼在所述弯曲状态下的重建姿态数据;
在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据,其中,所述第二重建姿态数据包括所述第一主骨骼在所述伸直状态下的重建姿态数据和所述第二主骨骼在所述伸直状态下的重建姿态数据;
对所述第一重建姿态数据和所述第二重建姿态数据执行第三插值操作,得到目标重建姿态数据集合;
根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据。
7.根据权利要求6所述的方法,其特征在于,
确定所述第一主骨骼和所述第二主骨骼的弯曲程度,包括:获取所述第一主骨骼的主轴方向和所述第二主骨骼的主轴方向之间的夹角度数;在所述夹角度数大于或等于第一预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态;在所述夹角度数小于所述第一预设弯曲阈值,且大于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于半弯曲状态,其中,所述第二预设弯曲阈值小于或等于所述第一预设弯曲阈值;在所述夹角度数小于所述第二预设弯曲阈值的情况下,确定所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态;
根据所述弯曲程度从所述目标重建姿态数据集合中确定出所述第二姿态数据,包括:在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述弯曲状态的情况下,将所述第一重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述半弯曲状态的情况下,将执行所述第三插值操作得到的重建姿态数据确定为所述第二姿态数据;在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于所述伸直状态的情况下,将所述第二重建姿态数据确定为所述第二姿态数据。
8.根据权利要求7所述的方法,其特征在于,所述在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,获取之前确定的所述第一重建姿态数据,并根据所述第一重建姿态数据重新构造第二重建姿态数据,包括:
在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于弯曲状态的情况下,将所述第二主骨骼在所述弯曲状态下的重建姿态数据转换至所述第一主骨骼的局部坐标系并存储为目标变量,其中,所述第二主骨骼在所述弯曲状态下的重建姿态数据是世界坐标系中的姿态数据,所述世界坐标系与所述局部坐标系之间的姿态数据允许相互转换,所述目标变量包括第一向量,所述第一向量的方向与所述弯曲状态下所述第二主骨骼的局部坐标系中的第一坐标轴相同;
在所述弯曲程度指示当前所述第一主骨骼和所述第二主骨骼处于伸直状态的情况下,将所述目标变量重新转换至所述世界坐标系,并确定第二向量,其中,所述第二向量的方向与所述伸直状态下所述第二主骨骼的局部坐标系中的第二坐标轴相同;
将所述第二位置、所述第三位置、所述第一向量以及所述第二向量输入第一预设函数确定所述第二重建姿态数据,其中,所述第二重建姿态数据是所述第一向量和所述第二向量之间的夹角最小的姿态数据。
9.根据权利要求1所述的方法,其特征在于,所述对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,包括:
对所述第一姿态数据和所述第二姿态数据执行四元数线性插值操作,得到子骨骼姿态数据集合,其中,所述第一姿态数据和所述第二姿态数据是所述子骨骼姿态数据集合中的边界值;
从所述子骨骼姿态数据集合中确定所述第一组姿态数据,其中,所述第一组子骨骼中距离所述第一主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第一姿态数据,所述第一组子骨骼中距离所述第一主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述第二姿态数据。
10.根据权利要求1所述的方法,其特征在于,所述根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,包括:
获取与所述第三主骨骼对应的第三向量,其中,所述第三向量与第三坐标轴的方向相同,所述第三坐标轴是所述第三主骨骼对应的局部坐标系中的非主坐标轴;
将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据。
11.根据权利要求10所述的方法,其特征在于,所述将所述第三向量投影至所述第二主骨骼的局部坐标系中,确定所述第二组姿态数据,包括:
将所述第三向量投影至所述第二主骨骼的局部坐标系中,得到第四向量,其中,所述第四向量的方向与所述第三向量的方向相同;
计算所述第四向量与所述第二主骨骼对应的局部坐标系中与所述第三坐标轴对应的第四坐标轴之间的夹角;
根据所述夹角确定所述第二组姿态数据。
12.根据权利要求11所述的方法,其特征在于,所述根据所述夹角确定所述第二组姿态数据,包括:
根据所述夹角确定目标子骨骼姿态数据,其中,所述目标子骨骼姿态数据表示目标子骨骼需要旋转的角度,所述目标子骨骼需要旋转的角度与所述夹角的度数相同,所述目标子骨骼是所述第二组子骨骼中距离所述第三主骨骼最近的子骨骼;
从所述第二姿态数据中确定所述第二主骨骼的姿态数据;
对所述第二主骨骼的姿态数据和所述目标子骨骼姿态数据执行所述第一线性插值操作,确定所述第二组姿态数据,其中,所述第二组子骨骼中距离所述第二主骨骼越近的子骨骼对应的子骨骼姿态数据越靠近所述第二主骨骼的姿态数据,所述第二组子骨骼中距离所述第二主骨骼越远的子骨骼对应的子骨骼姿态数据越靠近所述目标子骨骼姿态数据。
13.一种虚拟骨骼的修型装置,其特征在于,包括:
获取模块,用于获取虚拟骨骼的运动过程中产生的原始姿态数据,其中,所述虚拟骨骼包括依次连接的初始骨骼、第一主骨骼、第二主骨骼和第三主骨骼,所述第一主骨骼与所述第二主骨骼之间还包括依次连接的第一组子骨骼,所述第二主骨骼和所述第三主骨骼之间还包括依次连接的第二组子骨骼,所述第一主骨骼是所述第一组子骨骼的父骨骼,所述第二主骨骼是所述第二组子骨骼的父骨骼;
第一确定模块,用于根据所述原始姿态数据确定第一姿态数据和第二姿态数据,其中,所述第一姿态数据用于根据所述初始骨骼、所述第一主骨骼以及所述第二主骨骼共同确定所述第一主骨骼的姿态数据,所述第二姿态数据用于根据所述第一主骨骼、所述第二主骨骼以及所述第三主骨骼共同确定所述第一主骨骼和所述第二主骨骼的姿态数据;
执行模块,用于对所述第一姿态数据和所述第二姿态数据执行第一线性插值操作,确定所述第一组子骨骼对应的第一组姿态数据,其中,所述第一组姿态数据用于对所述第一组子骨骼进行修型;
第二确定模块,用于根据所述第二主骨骼和所述第三主骨骼确定第二组姿态数据,其中,所述第二组姿态数据用于对所述第二组子骨骼进行修型;
生成模块,用于根据所述第一姿态数据、所述第二姿态数据、所述第一组姿态数据以及所述第二组姿态数据生成目标姿态数据,其中,所述目标姿态数据表示对所述原始姿态数据修型后的姿态数据。
14.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序可被终端设备或计算机运行时执行所述权利要求1至12任一项中所述的方法。
15.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1至12任一项中所述方法的步骤。
16.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至12任一项中所述的方法。
CN202310096966.9A 2023-01-17 2023-01-17 虚拟骨骼的修型方法和装置、存储介质及电子设备 Pending CN116485954A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310096966.9A CN116485954A (zh) 2023-01-17 2023-01-17 虚拟骨骼的修型方法和装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310096966.9A CN116485954A (zh) 2023-01-17 2023-01-17 虚拟骨骼的修型方法和装置、存储介质及电子设备

Publications (1)

Publication Number Publication Date
CN116485954A true CN116485954A (zh) 2023-07-25

Family

ID=87216667

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310096966.9A Pending CN116485954A (zh) 2023-01-17 2023-01-17 虚拟骨骼的修型方法和装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN116485954A (zh)

Similar Documents

Publication Publication Date Title
US10297066B2 (en) Animating a virtual object in a virtual world
WO2021169839A1 (zh) 一种基于骨骼关键点的动作还原方法以及装置
US10062197B2 (en) Animating a virtual object in a virtual world
US20040001064A1 (en) Methods and system for general skinning via hardware accelerators
JP2015531098A (ja) デプスカメラを使用するアバター構築
JP2015531098A5 (zh)
US9984488B2 (en) Animating a virtual object in a virtual world
JPH09330424A (ja) 3次元骨格構造の動き変換装置
CN111223171A (zh) 图像处理方法、装置、电子设备及存储介质
US10410393B2 (en) Animating a virtual object in a virtual world
US9652879B2 (en) Animation of a virtual object
CN115908664B (zh) 人机交互的动画生成方法、装置、计算机设备、存储介质
Chakravarthi et al. Scenario-Based Sensed Human Motion Editing and Validation Through the Motion-Sphere
CN116485954A (zh) 虚拟骨骼的修型方法和装置、存储介质及电子设备
CA3177593A1 (en) Transformer-based shape models
WO2023064441A1 (en) Inferred skeletal structure for practical 3d assets
CN115908651A (zh) 一种三维人体模型与骨架的同步更新方法及电子设备
Apostolakis et al. Natural user interfaces for virtual character full body and facial animation in immersive virtual worlds
CN114452646A (zh) 虚拟对象透视处理方法、装置及计算机设备
CN116805344B (zh) 一种数字人动作重定向方法及装置
CN115937371B (zh) 人物模型的生成方法和系统
Gu et al. Human upper-body inverse kinematics for consumer grade virtual reality
Yoshiyasu et al. Pose space surface manipulation
CN117289786A (zh) 一种人体联动方法、装置、设备及存储介质
Cannavò et al. A Framework for Animating Customized Avatars from Monocular Videos in Virtual Try-On Applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40090375

Country of ref document: HK