【Unity】骨骼动画
【Unity】骨骼动画
蒙皮模型
蒙皮模型的结构
直接将蒙皮模型拖进场景中并观察其子节点,最简单的蒙皮模型中由骨架和蒙皮网格两部分组成。
-
骨架
由一堆空物体组成,每个空物体代表一根骨骼。
-
蒙皮网格
蒙皮网格相比普通网格多了一些数据:
- 一组模型空间转骨骼空间矩阵,每个矩阵对应一个骨骼。
- 每个顶点所要跟随的骨骼矩阵索引。
- 每个顶点所要跟随的骨骼矩阵权重。
为了支持这些新属性,蒙皮网格需要使用专门的 SkinnedMeshRenderer 组件。
顶点与骨骼的关联
蒙皮网格的顶点会跟随骨骼,效果就好比把该顶点挂为该骨骼的子物体,因此当骨骼发生变换时,顶点也会跟着变换,从而实现了提线木偶版的效果。
具体实现是 Unity 通过在计算着色器中用矩阵变换实现的,其通过矩阵计算新顶点位置的方式如下:
新顶点位置 =(世界空间到模型空间 * 骨骼空间到世界空间 * 初始模型空间到骨骼空间)* 初始顶点位置
- 骨骼空间到世界空间:随着骨骼的变换而改变,这就是带动顶点的关键。
- 初始模型空间到骨骼空间:一般由模型文件提供,或者也可以用世界空间桥接计算。
网格和骨架的关联
蒙皮网格仅记录对一组骨骼的索引,但具体这些骨骼对应哪些 Transform
,则是由蒙皮网格渲染器完成的。实际上模型文件里有对骨架进行描述,Unity也是因此才能用空物体生成骨架,而蒙皮网格不过是通过指定根骨骼的方式,连接骨架和网格。
骨架共用的原理
由上文可见,网格和骨骼并不是一个强绑定关系,而且蒙皮网格渲染器(下面简称渲染器)关联网格和骨骼这一操作也只在渲染器启动时发生,所以只要在渲染器启动前准备好符合条件的空物体,渲染器也会将其识别为骨骼。实际上渲染器中也有提供修改根骨骼这一操作,便是起实现骨架共用的作用。
骨骼动画
动画即控制一个或多个属性,使其在时间的流逝中发生变化。而骨骼动画字如其名,即控制骨骼的动画。骨骼只是一个空物体,挂在它上面的只有 Transform 组件,因此能修改的也只有位置,旋转,缩放信息。通过调整这些属性来使特定的骨骼空间发生变动,从而导致蒙皮网格中的顶点相对世界的位置发生变化,便营造出来模型动了的感觉。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!