每日一句:实践出真知,试错方确信
目录
最开始我想的原因!
分析一下动画相关参数
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组件详解:
Mesh
- 功能:指定要渲染的网格(Mesh)。
- 设置:选择一个网格资源(通常是一个已经绑定骨骼的网格)。
Materials
- 功能:指定用于渲染网格的材质。
- 设置:添加一个或多个材质资源。每个子网格可以指定一个不同的材质。
Root Bone
- 功能:指定骨骼层次结构的根骨骼。
- 设置:选择一个Transform对象作为根骨骼,通常是角色的骨盆或根节点。
Bones
- 功能:包含所有影响网格的骨骼Transform。
- 设置:列表中的每个Transform对象对应一个骨骼,用于控制网格的变形。
Bounds
- 功能:定义网格的包围盒,用于确定网格在场景中的位置和大小。
- 设置:自动计算或手动调整包围盒。
Quality
- 功能:设置蒙皮质量。
- 选项:
- Auto:根据硬件性能自动选择质量。
- 1 Bone:每个顶点受一个骨骼影响。
- 2 Bones:每个顶点受两个骨骼影响。
- 4 Bones:每个顶点受四个骨骼影响。
Update When Offscreen
- 功能:指定模型在屏幕外时是否继续更新动画。
- 设置:勾选此选项可以确保动画在角色不可见时也继续更新,但会增加性能开销。
Skinned Motion Vectors
- 功能:启用蒙皮网格的运动矢量,用于运动模糊效果。
- 设置:勾选此选项以启用运动矢量。
Dynamic Occlusion
- 功能:设置是否启用动态遮挡剔除。
- 设置:勾选此选项可以提高性能,通过剔除被遮挡的部分网格。
Root Bone Transform
- 功能:设置根骨骼的Transform,用于定位和旋转整个网格。
- 设置:选择一个Transform对象作为根骨骼的Transform。
Skinned Mesh Renderer工作原理
Skinned Mesh Renderer组件通过骨骼(Transform)控制网格的顶点变形,从而实现复杂的角色动画。每个顶点的变形由一个或多个骨骼的变换(位置、旋转和缩放)决定,顶点的位置根据骨骼的变换进行插值。
设置Skinned Mesh Renderer
假设你有一个角色模型,导入Unity并配置Skinned Mesh Renderer:
选择模型并检查Skinned Mesh Renderer:
- 在Hierarchy窗口中选择角色模型。
- 在Inspector窗口中找到Skinned Mesh Renderer组件。
配置网格和材质:
- 在“Mesh”字段中,选择角色的网格资源。
- 在“Materials”字段中,添加或选择适当的材质资源。
设置骨骼:
- 在“Root Bone”字段中,选择角色的根骨骼(例如,骨盆)。
- 在“Bones”列表中,确保所有影响网格的骨骼Transform都已正确设置。
调整其他参数:
- 根据需要调整“Bounds”、“Quality”、“Update When Offscreen”等参数,以优化性能和动画效果。
动画重定向(Animation Retargeting)
动画重定向(Animation Retargeting)是指将一个角色的动画应用到另一个角色上。这个过程通常用于不同的角色共享相同的动画,避免重复制作动画。
1. 骨架一致性
首先,确保两个角色使用相同或类似的骨骼结构。这是重定向动画的基础。如果骨骼结构不一致,重定向的效果可能会不理想。
2. Avatar设置
Unity使用Avatar来定义角色的骨骼结构。确保两个角色都配置了Avatar,并且骨骼映射正确。
配置Avatar
-
为模型创建Avatar:
- 选择模型文件,在Inspector面板中找到
Rig
选项卡。 - 设置
Animation Type
为Humanoid
。 - 点击
Configure
按钮进入Avatar配置界面,确保骨骼映射正确。
- 选择模型文件,在Inspector面板中找到
-
应用相同的Avatar:
- 在动画文件的
Rig
选项卡中,设置Avatar Definition
为Copy From Other Avatar
。 - 选择已经配置好的角色的Avatar。
- 在动画文件的
3. 动画控制器(Animator Controller)
把两个模型的 Animator 都设置为 同一个 动画控制器
Avatar Definition选项解释:
Create From This Model:
- Unity会根据当前导入的模型自动生成一个Avatar。
- Unity将会尝试根据模型中的骨骼层次结构和骨骼命名来创建一个Avatar定义。
- 这个选项适合于从头开始创建一个角色模型,或者对已有的角色模型进行重新导入和处理。
Copy From Other Avatar:
- Unity会复制另一个已存在的Avatar的定义。
- 这个选项适合于确保多个角色模型共享相同的骨骼结构和动画数据,以便于动画重定向和共享动画资源。
使用Copy From Other Avatar来进行动画重定向的前提条件:具备相同的骨骼层级结构
原因待续!!
经过上述参数的详解我找到了原因以及最重要的动画重定向怎么使用?
原因是:小男孩,小女孩不具备相同的骨骼层级结构,无法进行动画重定向
解决:
方法一:让模型的同学到3dmaxs把人物骨骼去掉,重新到mixamo里面,重新生成骨骼
方法二:在3D建模软件中重新生成或调整模型的骨骼层级结构,使其与小女孩骨骼结构尽可能相似或一致。
得到两个完全匹配的骨骼,让小女孩的模型用小男孩的骨骼(两个角色共用一个骨骼Avatar),骨骼匹配成功后,小男孩的模型便可用小女孩的动画(也就是所说的动画重定向)
分析:
这里的动画重定向(Animation Retargeting)是指将小女孩的动画数据应用到小男孩的角色身上。
注意:unity中的动画重定向的实现不是一个直观的方法,而是封装到Humanoid类型的动画系统里面,unity在自己的内部定义了一套骨架模板,所有的Avatar骨骼都必须映射到这套模板上才可以由同一个Animator来驱动产生Retargeting之后的动画效果
上述的【原因待续】的解决方案一定是对的,但是具体的解决思想我并不确定我又没有一阵见血的切中要害(可能有点繁琐了)
最终原因!!!
我知道了答案!就是两个角色的骨骼层级结构不一样,导致的动画重定向失败
我想了好多种可能的原因,一个个都试了一下,又都给排除了,发现原因无他就是骨骼层级不一致,我也试了一下能能在untiy内部解决,发现也不太能实现,导入模型软件中调整又太麻烦了(程序同学也可能不会),最好的办法就是(有时可能需要去骨骼)导入到mixamo,重新生成两个层级结构一样的骨骼,便可以调用一样的动画,便可实现动画重定向!!
我之前不太确定有点模糊,这两天研究了一下。确定了他的原因和解决方案,对动画重定向的细节掌握又有了新的理解!!