动画重定向——当给一个人物模型用别人物的动画时,会遇到人物与动画不匹配问题,怎么解决呢?

每日一句:实践出真知,试错方确信

目录

最开始我想的原因!

分析一下动画相关参数

Animator组件参数详解:

人物模型的导入设置参数:

Skinned Mesh Renderer组件详解:

Skinned Mesh Renderer工作原理

设置Skinned Mesh Renderer

动画重定向(Animation Retargeting)

原因待续!!

最终原因!!!


【我想很多初学者都会有这个困惑,那么我就把我学解决这个的所感所想,记录下来!】

这个网盘中的(一个unity项目:两个小男孩模型【骨骼层级结构不一样】,还有一个小女孩的模型(含动画)以及一个去骨骼的小男孩模型),可以帮助更好的学习实践

链接:https://pan.baidu.com/s/1_Q095rRhu00HzQgsdR0keA?pwd=9a2p 
提取码:9a2p 
--来自百度网盘超级会员V4的分享

前两天遇到了一个做人物模型总会出现的问题。今天整理一下这个问题。

当给一个人物模型用别的动画重定向时,会遇到人物与动画不匹配问题,怎么解决呢?

这算是一个典型的动画不匹配问题。直接说一下我的解决方案:

最开始我想的原因!

我看它其他一切都正常,排查感觉应该是Mesh的问题,可能是Mesh的顶点权重分配不正确,动画播放时出现变形或不正常的行为。这个需要在模型软件中检查,在模型软件中我们也不会看它到底正不正确,因此我们的解决方案,让模型的同学到3dmaxs把人物骨骼去掉,重新到mixamo里面,生成完全匹配,之后在unity中使用.就是完全正确的啦~

我们用这个办法解决,对比解决前解决后的,用控制变量法 感觉mesh不一样,但是也不确定是不是这个原因,还有就是老师unity文件中的模型是没有根节点的,但是通过网站导出来的根节点是存在的,也可能是根节点的原因,Root Motion与模型的根节点设置不一致,导致出现偏移或跳动

———————————————————————————————————————————

这是上述的解决方案,完全可以解决的,但是原因也不是很确定,因此在这里

分析一下动画相关参数

Animator组件参数详解:

Avatar

  • 功能:Avatar是一个定义了骨骼和蒙皮网格(Skinned Mesh)的配置文件。它用于确保动画能够正确映射到模型的骨骼结构。

Apply Root Motion

  • 功能:此选项决定是否使用动画中的位移数据(Root Motion)来驱动角色的移动
  • 设置:勾选或取消勾选“Apply Root Motion”选项。勾选时,动画中的位移和旋转会应用到角色的Transform。

Update Mode

  • 功能:设置Animator的更新模式。
  • 选项
    • Normal:在Update周期中更新Animator。
    • Animate Physics:在FixedUpdate周期中更新Animator,适用于物理驱动的动画。
    • Unscaled Time:使用不受时间缩放影响的时间来更新Animator。

Culling Mode

  • 功能:控制Animator何时更新和渲染。
  • 选项
    • Always Animate:Animator总是更新和渲染。
    • Cull Update Transforms:当角色不可见时,Animator停止更新但会更新Transform。
    • Cull Completely:当角色不可见时,Animator停止更新和渲染。

人物模型的导入设置参数:

1. Model 参数

Model 参数用于配置模型的基本设置,包括网格(Mesh)、几何体、规范化等。

  • Scale Factor:模型的缩放比例。通常默认值为1,可以根据需要进行调整。
  • Use File Scale:是否使用文件自带的缩放比例。
  • Mesh Compression:设置网格压缩等级,以减少文件大小,但可能会影响精度。
  • Read/Write Enabled:是否允许读取和写入模型数据。
  • Optimize Mesh:优化网格数据以提高渲染性能。
  • Generate Colliders:是否为模型生成碰撞体。
  • Keep Quads:保持四边形面片而不转化为三角形。
  • Weld Vertices:焊接顶点以减少顶点数量。
  • Import BlendShapes:是否导入BlendShapes(用于面部动画等)。
  • Normals:设置法线导入方式(如Import、Calculate、None)。
  • Tangents:设置切线导入方式(如Import、Calculate Mikk、Calculate Legacy、None)。
  • Material Naming:设置材质命名规则。
  • Material Search:设置材质搜索路径。

2. Rig 参数

Rig 参数用于配置模型的骨骼设置,包括骨骼类型和Avatar定义。

  • Animation Type:动画类型,包括以下选项:
    • None:无动画。
    • Legacy:使用传统动画系统。
    • Generic:通用动画类型,适用于非人形角色。
    • Humanoid:人形动画类型,适用于具有标准人形骨骼结构的角色。
  • Avatar Definition:Avatar定义方式:
    • Create From This Model:从当前模型创建Avatar。
    • Copy From Other Avatar:从其他模型复制Avatar。
  • Root Node:设置骨骼层次结构的根节点。
  • Optimize Game Objects:优化游戏对象以提高性能。

3. Animation 参数

Animation 参数用于配置动画剪辑和动画设置,包括动画片段的分割和属性。

  • Animation Clips:显示和管理导入的动画片段,可以添加、删除和编辑动画片段。
  • Import Animation:是否导入动画数据。
  • Anim. Compression:设置动画压缩等级(如Off、Keyframe Reduction、Optimal)。
  • Resample Curves:重新采样曲线以提高兼容性。
  • Root Motion Node:设置根运动节点。
  • Root Transform Position (Y):配置根运动的Y轴位置设置。
  • Root Transform Position (XZ):配置根运动的XZ平面位置设置。
  • Root Transform Rotation:配置根运动的旋转设置。
  • Animation Import Settings
    • Loop Time:是否循环动画。
    • Loop Pose:是否平滑循环动画姿势。
    • Cycle Offset:设置动画循环的偏移量。
    • Mirror:是否镜像动画。

4. Materials 参数

Materials 参数用于配置模型的材质和纹理设置。

  • Import Materials:是否导入材质。
  • Material Naming:设置材质命名规则(如By Base Texture Name、From Model’s Material)。
  • Material Search:设置材质搜索路径(如Local Materials Folder、Recursive-Up、Project-Wide)。
  • Remap Materials:手动重新映射材质到模型。

Skinned Mesh Renderer组件详解:

  1. Mesh

    • 功能:指定要渲染的网格(Mesh)。
    • 设置:选择一个网格资源(通常是一个已经绑定骨骼的网格)。
  2. Materials

    • 功能:指定用于渲染网格的材质。
    • 设置:添加一个或多个材质资源。每个子网格可以指定一个不同的材质。
  3. Root Bone

    • 功能:指定骨骼层次结构的根骨骼。
    • 设置:选择一个Transform对象作为根骨骼,通常是角色的骨盆或根节点。
  4. Bones

    • 功能:包含所有影响网格的骨骼Transform。
    • 设置:列表中的每个Transform对象对应一个骨骼,用于控制网格的变形。
  5. Bounds

    • 功能:定义网格的包围盒,用于确定网格在场景中的位置和大小。
    • 设置:自动计算或手动调整包围盒。
  6. Quality

    • 功能:设置蒙皮质量。
    • 选项
      • Auto:根据硬件性能自动选择质量。
      • 1 Bone:每个顶点受一个骨骼影响。
      • 2 Bones:每个顶点受两个骨骼影响。
      • 4 Bones:每个顶点受四个骨骼影响。
  7. Update When Offscreen

    • 功能:指定模型在屏幕外时是否继续更新动画。
    • 设置:勾选此选项可以确保动画在角色不可见时也继续更新,但会增加性能开销。
  8. Skinned Motion Vectors

    • 功能:启用蒙皮网格的运动矢量,用于运动模糊效果。
    • 设置:勾选此选项以启用运动矢量。
  9. Dynamic Occlusion

    • 功能:设置是否启用动态遮挡剔除。
    • 设置:勾选此选项可以提高性能,通过剔除被遮挡的部分网格。
  10. Root Bone Transform

    • 功能:设置根骨骼的Transform,用于定位和旋转整个网格。
    • 设置:选择一个Transform对象作为根骨骼的Transform。

Skinned Mesh Renderer工作原理

Skinned Mesh Renderer组件通过骨骼(Transform)控制网格的顶点变形,从而实现复杂的角色动画。每个顶点的变形由一个或多个骨骼的变换(位置、旋转和缩放)决定,顶点的位置根据骨骼的变换进行插值。

设置Skinned Mesh Renderer

假设你有一个角色模型,导入Unity并配置Skinned Mesh Renderer:

  1. 选择模型并检查Skinned Mesh Renderer

    • 在Hierarchy窗口中选择角色模型。
    • 在Inspector窗口中找到Skinned Mesh Renderer组件。
  2. 配置网格和材质

    • 在“Mesh”字段中,选择角色的网格资源。
    • 在“Materials”字段中,添加或选择适当的材质资源。
  3. 设置骨骼

    • 在“Root Bone”字段中,选择角色的根骨骼(例如,骨盆)。
    • 在“Bones”列表中,确保所有影响网格的骨骼Transform都已正确设置。
  4. 调整其他参数

    • 根据需要调整“Bounds”、“Quality”、“Update When Offscreen”等参数,以优化性能和动画效果。 

动画重定向(Animation Retargeting)

动画重定向(Animation Retargeting)是指将一个角色的动画应用到另一个角色上。这个过程通常用于不同的角色共享相同的动画,避免重复制作动画。

1. 骨架一致性

首先,确保两个角色使用相同或类似的骨骼结构。这是重定向动画的基础。如果骨骼结构不一致,重定向的效果可能会不理想。

2. Avatar设置

Unity使用Avatar来定义角色的骨骼结构。确保两个角色都配置了Avatar,并且骨骼映射正确。

配置Avatar

  1. 为模型创建Avatar:

    • 选择模型文件,在Inspector面板中找到Rig选项卡。
    • 设置Animation TypeHumanoid
    • 点击Configure按钮进入Avatar配置界面,确保骨骼映射正确。
  2. 应用相同的Avatar:

    • 在动画文件的Rig选项卡中,设置Avatar DefinitionCopy From Other Avatar
    • 选择已经配置好的角色的Avatar。

     3. 动画控制器(Animator Controller)

把两个模型的 Animator 都设置为 同一个 动画控制器

Avatar Definition选项解释:

  1. Create From This Model

    • Unity会根据当前导入的模型自动生成一个Avatar。
    • Unity将会尝试根据模型中的骨骼层次结构和骨骼命名来创建一个Avatar定义。
    • 这个选项适合于从头开始创建一个角色模型,或者对已有的角色模型进行重新导入和处理。
  2. Copy From Other Avatar

    • Unity会复制另一个已存在的Avatar的定义。
    • 这个选项适合于确保多个角色模型共享相同的骨骼结构和动画数据,以便于动画重定向和共享动画资源。

使用Copy From Other Avatar来进行动画重定向的前提条件:具备相同的骨骼层级结构

原因待续!!

经过上述参数的详解我找到了原因以及最重要的动画重定向怎么使用?

原因是:小男孩,小女孩不具备相同的骨骼层级结构,无法进行动画重定向

解决:

方法一:让模型的同学到3dmaxs把人物骨骼去掉,重新到mixamo里面,重新生成骨骼

方法二:在3D建模软件中重新生成或调整模型的骨骼层级结构,使其与小女孩骨骼结构尽可能相似或一致。

得到两个完全匹配的骨骼,让小女孩的模型用小男孩的骨骼(两个角色共用一个骨骼Avatar),骨骼匹配成功后,小男孩的模型便可用小女孩的动画(也就是所说的动画重定向)

分析:

这里的动画重定向(Animation Retargeting)是指将小女孩的动画数据应用到小男孩的角色身上。

注意:unity中的动画重定向的实现不是一个直观的方法,而是封装到Humanoid类型的动画系统里面,unity在自己的内部定义了一套骨架模板,所有的Avatar骨骼都必须映射到这套模板上才可以由同一个Animator来驱动产生Retargeting之后的动画效果

上述的【原因待续】的解决方案一定是对的,但是具体的解决思想我并不确定我又没有一阵见血的切中要害(可能有点繁琐了)

最终原因!!!

我知道了答案!就是两个角色的骨骼层级结构不一样,导致的动画重定向失败

我想了好多种可能的原因,一个个都试了一下,又都给排除了,发现原因无他就是骨骼层级不一致,我也试了一下能能在untiy内部解决,发现也不太能实现,导入模型软件中调整又太麻烦了(程序同学也可能不会),最好的办法就是(有时可能需要去骨骼)导入到mixamo,重新生成两个层级结构一样的骨骼,便可以调用一样的动画,便可实现动画重定向!!

我之前不太确定有点模糊,这两天研究了一下。确定了他的原因和解决方案,对动画重定向的细节掌握又有了新的理解!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364657.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构历年考研真题对应知识点(树的基本概念)

目录 5.1树的基本概念 5.1.2基本术语 【森林中树的数量、边数和结点数的关系(2016)】 5.1.3树的性质 【树中结点数和度数的关系的应用(2010、2016)】 【指定结点数的三叉树的最小高度分析(2022)】 5.1…

Ubuntu 安装Nginx服务

转自&#xff1a;https://blog.csdn.net/yegu001/article/details/135411588 Package: nginx Architecture: amd64 Version: 1.18.0-6ubuntu14.4 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discusslists.ubuntu.com>…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

机械设计简单介绍

机械设计简单介绍 1 介绍1.1 概述1.2 机械机构设计基本步骤1.3 关键1.3.1 静力学1.3.2 动力学1.3.3 运动学1.3.4 刚度学 1.4 示例【机械臂】 2 资料2.1 知识体系2.2 博客类汇总2.3 免费CAD模型获取2.4 3D打印2.5 SolidWorks 3 具备能力3.1 熟练翻阅 机械设计手册3.2 知道 N 家常…

【C++】初识C++(一)

一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度 的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object o…

为什么IP地址会被列入黑名单?

您是否曾经历过网站访客数量骤减或电子邮件投递失败的困扰&#xff1f;这背后或许隐藏着一个常被忽略的原因&#xff1a;您的IP地址可能已经被列入了黑名单内。尽管您并没有进行任何违法的网络操作&#xff0c;但这个问题依然可能出现。那么&#xff0c;究竟黑名单是什么&#…

SerDes介绍以及原语使用介绍(4)ISERDESE2原语仿真

文章目录 前言一、iserdese2_module模块二、oserdese2_module模块三、顶层模块四、仿真结果分析 前言 上文详细介绍了ISERDESE2原语的使用&#xff0c;本文根据仿真对ISERDESE2原语的使用进一步加深印象。在仿真时&#xff0c;与OSERDESE进行回环。 一、iserdese2_module模块…

算法金 | 协方差、方差、标准差、协方差矩阵

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 1. 方差 方差是统计学中用来度量一组数据分散程度的重要指标。它反映了数据点与其均值之间的偏离程度。在…

fastzdp_login的第一次构建

概述 为了方便能够快捷的实现fastapi实现登录相关功能代码开发&#xff0c;决定开发一个开源的fastapi组件库&#xff0c;想了很多个名字&#xff0c;在检查pypi的时候发现都被占用了&#xff0c;所以最终决定使用fastzdp_login这个名字。 fast代表的时fastapi。zdp代表的是张…

“ONLYOFFICE 8.1:提升用户体验和编辑功能的全面升级”

引言 官网链接 在当今快节奏的工作环境中&#xff0c;高效地处理文档是每个职场人士必备的技能。ONLYOFFICE 桌面编辑器凭借其强大的功能和用户友好的界面&#xff0c;成为了提升文档处理效率的得力助手。本文将介绍 ONLYOFFICE 桌面编辑器的核心特性&#xff0c;并展示如何通…

Zynq7000系列FPGA中的DMA控制器简介(二)

AXI互连上的DMA传输 所有DMA事务都使用AXI接口在PL中的片上存储器、DDR存储器和从外设之间传递数据。PL中的从设备通过DMAC的外部请求接口与DMAC通信&#xff0c;以控制数据流。这意味着从设备可以请求DMA交易&#xff0c;以便将数据从源地址传输到目标地址。 虽然DMAC在技术…

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中&#xff0c;有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主&#xff0c;我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法&#xff1a;使用&#xff0c; “轻云处理pdf官网” 打开 “轻云处…

ChatGPT智能对话绘画系统 带完整的安装源代码包以及搭建教程

系统概述 ChatGPT 智能对话绘画系统是一款集智能语言处理和绘画创作于一体的综合性系统。它利用了深度学习和自然语言处理技术&#xff0c;能够理解用户的意图和需求&#xff0c;并通过与用户的交互&#xff0c;生成富有创意的绘画作品。该系统的核心是一个强大的人工智能模型…

C#基于SkiaSharp实现印章管理(3)

本系列第一篇文章中创建的基本框架限定了印章形状为矩形&#xff0c;但常用的印章有方形、圆形等多种形状&#xff0c;本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。   定义印章背景形状枚举类型&#xff0c;矩形、圆形、椭圆相关的尺寸…

QT事件处理及实例(鼠标事件、键盘事件、事件过滤)

这篇文章通过鼠标事件、键盘事件和事件过滤的三个实例介绍事件处理的实现。 鼠标事件及实例 鼠标事件包括鼠标的移动、按下、松开、单击和双击等。 创建一个MouseEvent项目&#xff0c;通过项目介绍如何获得和处理鼠标事件。程序效果如下图所示。 界面布局代码如下&#xff…

Python数据分析-风湿关节炎生存分析

一、研究背景和意义 类风湿关节炎&#xff08;RA&#xff09;是一种慢性炎症性疾病&#xff0c;主要影响关节&#xff0c;但也可能影响身体的其他部分。RA的病因尚不完全清楚&#xff0c;但已知其涉及免疫系统的异常反应。患者的免疫系统错误地攻击自身的关节组织&#xff0c;…

STM32音频应用开发:DMA与定时器的高效协作

摘要: 本文章将深入浅出地介绍如何使用STM32单片机实现音频播放功能。文章将从音频基础知识入手&#xff0c;逐步讲解音频解码、DAC转换、音频放大等关键环节&#xff0c;并结合STM32 HAL库给出具体的代码实现和电路设计方案。最后&#xff0c;我们将通过一个实例演示如何播放W…

Maven的依赖传递、依赖管理、依赖作用域

在Maven项目中通常会引入大量依赖&#xff0c;但依赖管理不当&#xff0c;会造成版本混乱冲突或者目标包臃肿。因此&#xff0c;我们以SpringBoot为例&#xff0c;从三方面探索依赖的使用规则。 1、 依赖传递 依赖是会传递的&#xff0c;依赖的依赖也会连带引入。例如在项目中…

云计算【第一阶段(21)】Linux引导过程与服务控制

目录 一、linux操作系统引导过程 1.1、开机自检 1.2、MBR引导 1.3、GRUB菜单 1.4、加载 Linux 内核 1.5、init进程初始化 1.6、简述总结 1.7、初始化进程centos 6和7的区别 二、排除启动类故障 2.1、修复MBR扇区故障 2.1.1、 实验 2.2、修复grub引导故障 2.2.1、实…