Mecanim Animation System

动画系统简介

Unity 有一个非常丰富而又复杂的动画系统,官方称其为Mecanim。该系统具有以下功能:

  • 支持从外部导入动画剪辑,如:fbx、mb | ma(Autodesk maya 原件)、.max(3ds Max原件)、.blend(Blender 原件

  • 从Unity编辑器创建简单的动画剪辑

  • 提供动画剪辑关键帧到脚本的交互

  • 人形动画重定向,将动画通过Avatar系统从一个模型转移到另一个模型上

  • 预览(编辑器|运行时)动画剪辑以及他们之间的过度与交互

  • 提供可视化工具来管理动画之间的复杂交互

  • 分层管理与遮罩

3ds Max原件在导入时会被转换为FBX格式

需要安装Blender软件才能正常导入.blend

动画系统的工作流程
  1. 由艺术工作者提供剪辑资源

  2. 通过Animator Controller(动画状态机)协调动画之间的衔接、过度、混合

  3. 制作人形角色的Avatar模具或遮罩,包含骨骼映射、肌肉设定

  4. 将Animator和Avatar赋予给不同的模型以实现动画共享

        不建议将这个动画系统应用于图形用户界面,应为它比简单的Tween动画要至少高出30%的开销。

        通常场景中简单游戏对象的动画只需要用到1或2两个环节

        是否需要用到Avatar系统,取决于你的人形动画的通用程度,例如某个BOSS的动画集的通用动画占比不足10%,那么放弃Avatar系统可以帮助你提升30%~50%的CPU计算性能。

Mecanim 动画系统的工作流程
Avatar基础用户手册
简介

        在Unity中Avatar是用来描述骨骼及肌肉组织的接口,它以附加资产的形式寄存在模型或动画资源上。

创建或引用Avatar
从模型创建Avatar功能入口

        你可以在模型导入时,通过Avatar Definition=Create From This Model来为当前的模型新建一个Avatar实例,也可以从其他模型中引用已经创建完毕的Avatar实例。

注意:引用其他模型的Avatar实例,需要保证当前模型的骨骼结构(包括骨骼命名)与被引用的模型一致。

为Avatar资产配置骨骼映射
配置Avatar功能入口
配置Avatar编辑器入口
骨骼映射编辑界面

默认情况下,Unity会自动映射。

自动映射功能入口

在骨骼意外丢失的情况下,可以通过Mapping>Auto map进行自动映射。

当然你可以可以通过Save功能导出一个骨骼模板,提供给其他模型使用。

同时你可以可以通过Load功能载入一个骨骼模板,应用到当前Avatar资产中。

重置模型到T-Pose

 如果资产的骨骼没有进入到T-Pose状态,可能会导致表现上的错误。

你可以通过Enforce T-Pose使它强制进入到T-Pose姿态。

为Avatar配置肌肉参数
肌肉配置面板
浏览调整的姿态

         浏览姿态面板可以让你更好的了解,当前肌肉参数配置下网格最基本的形变是否会发生严重扭曲、挤压、破皮等现象。

模型穿透的例子
调整参数修复穿模

        在这里我将原有的值从40调整到27,修复了模型穿透的现象。

        总之它可以帮助我们约束骨骼的活动姿态,从而使表现达到最佳的效果。

        正常情况下这个姿态产生的问题需不需要修复,取决于你的动画剪辑中是否涉及到该姿态的表现,如果没有,你完全可以忽略它。

模型Avatar与动画剪辑Avatar的关系

        在使用Avatar进行动画共享的正常情况下,动画剪辑可能会来自不同的模型,这意味动画剪辑的Avatar配置不一定能完全适用当前的模型形变。在这种情况下,就需要两个Avatar,动画剪辑Avatar提供标准的姿态配置,而模型的Avatar提供一个不破坏网格形变的姿态配置。

        假设你的动画剪辑Avatar完全可以适应模型的形变,那么他们完全可以使用一个Avatar实例。

        在有两个Avatar工作过程中,模型的Avatar会接收动画剪辑Avatar吐出的姿态数据,并根据自身的肌肉设定再次对姿态进行调整,最终应用到网格形变上。

Animator基础用户手册

        Animator Controller是Mecanim Animation System的核心功能,它涉及到非常多的内容,在这篇文章我只做了最基础的介绍。

简介

        Animator Controller又叫做动画状态机,它的工作原理与状态机类似,它利用Animation Clip(动画剪辑)作为单位节点。在Animator中每个节点都属于一个单独的状态,它允许你根据条件设置动画如何从状态A过度到状态B,以表示角色的形态。

        与普通状态机不同的是,它支持动画状态的混合和叠加。

        混合更像是程序世界的Switch Ease语句,它可以根据某个属性在一组动画中随意过度。

        而叠加是通过权重去控制不同分层的动画状态,最终作用于同一模型上的结果。

创建Animator Controller
创建Animator Controller功能入口
Animator Controller 编辑窗口 
Animator Controller 窗口布局
 工作流程
  1. 在状态面板中编辑动画状态之间的转换
  2. 在参数面板编辑适用于跳转的参数变量
  3. 将参数变量应用到跳转上
  4. 编辑动画跳转过程中的过度方式
  5. 通过脚本控制Animator Controller实例暴露的参数,以达到改变动画行为的目的
新增一个动画状态到编辑区

最简单的办法是拖拽一个Animation Clip资产,到编辑区域视口

当然你也可以效仿下面方式,通过菜单创建状态节点

创建一个空的动画状态
为新节点设置动画剪辑

  1. 选中剪辑
  2. 打开Motion属性的选择器
  3. 选择一个合适的剪辑
创建一个Transition
步骤1和2
  1. 在原节点上右键打开菜单,并选择Make Transition
  2. 拖拽引线到目标节点
使用变量控制Transition 
添加变量
  1. 在参数面板,打开变量菜单
  2. 选择变量类型
  3. 为变量命名
为变换应用参数

  1. 添加控制条件
  2. 选择控制变量
  3. 选择比较值

        到这里为止,一个简单的循环就完成了。

        当然在实际应用过程中还会涉及到状态属性、跳转属性、BlendTree、叠加层、子状态机、覆盖控制器等很多的编辑知识,单独写一个文章介绍。 

为游戏对象配置相关资产
为GameObject配置相关资产
  1. 要挂载 Animator 组件
  2. 配置 Animator Controller(动画控制器)
  3. 配置模型的 Avatar实例
扩展
动画剪辑的参数设置
Animator是如何适配模型的骨骼结构的?

        当Animator开始工作的时候,它会从跟节点开始遍历寻找与骨骼匹配的跟节点,在确定骨骼根节点之后,它会将网格模型的骨骼结构和骨骼节点名称和Avatar配置的骨架做对比,直到找到一个完全一样的骨架。

        当子节点下有两个相同结构的骨骼模型时,Unity总是会选择排序最靠前的模型作为骨骼动画的输出目标。

        这意味着你在子节点上挂载两个模型都适用与该Avatar的时候,即使排序靠前的模型是隐藏的,那么Unity依然会选择它作为输出目标,另外一个即便是显示的也不会动哟。


Unity 骨骼树形结构

Root (根节点)
|-- Hips (髋部)
    |-- LeftUpLeg (左大腿)
        |-- LeftLeg (左小腿)
            |-- LeftFoot (左脚)
                |-- LeftToes (左脚趾)
    |-- RightUpLeg (右大腿)
        |-- RightLeg (右小腿)
            |-- RightFoot (右脚)
                |-- RightToes (右脚趾)
|-- Spine (脊柱)
    |-- Spine1 (脊柱1)
    |-- Spine2 (脊柱2)
|-- Chest (胸部)
|-- Neck (颈部)
|-- Head (头部)
    |-- HeadTop (头顶)
|-- LeftShoulder (左肩)
    |-- LeftArm (左臂)
        |-- LeftForearm (左前臂)
            |-- LeftHand (左手)
                |-- LeftHandThumb (左手拇指)
                    |-- LeftHandThumb1 (左手拇指1)
                    |-- LeftHandThumb2 (左手拇指2)
                |-- LeftHandIndex (左手食指)
                    |-- LeftHandIndex1 (左手食指1)
                    |-- LeftHandIndex2 (左手食指2)
                |-- LeftHandMiddle (左手中指)
                    |-- LeftHandMiddle1 (左手中指1)
                    |-- LeftHandMiddle2 (左手中指2)
                |-- LeftHandRing (左手无名指)
                    |-- LeftHandRing1 (左手无名指1)
                    |-- LeftHandRing2 (左手无名指2)
                |-- LeftHandPinky (左手小指)
                    |-- LeftHandPinky1 (左手小指1)
                    |-- LeftHandPinky2 (左手小指2)
|-- RightShoulder (右肩)
    |-- RightArm (右臂)
        |-- RightForearm (右前臂)
            |-- RightHand (右手)
                |-- RightHandThumb (右手拇指)
                    |-- RightHandThumb1 (右手拇指1)
                    |-- RightHandThumb2 (右手拇指2)
                |-- RightHandIndex (右手食指)
                    |-- RightHandIndex1 (右手食指1)
                    |-- RightHandIndex2 (右手食指2)
                |-- RightHandMiddle (右手中指)
                    |-- RightHandMiddle1 (右手中指1)
                    |-- RightHandMiddle2 (右手中指2)
                |-- RightHandRing (右手无名指)
                    |-- RightHandRing1 (右手无名指1)
                    |-- RightHandRing2 (右手无名指2)
                |-- RightHandPinky (右手小指)
                    |-- RightHandPinky1 (右手小指1)
                    |-- RightHandPinky2 (右手小指2)

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

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

相关文章

Final Shell for Mac 虚拟机连接工具【简单易操作,轻松上手】【开发所需连接工具】

Mac分享吧 文章目录 效果一、下载软件二、安装软件三、运行测试安装完成!!! 效果 一、下载软件 下载软件 链接:http://www.macfxb.cn 二、安装软件 三、运行测试 安装完成!!!

Redis学习[6] ——Redis缓存设计

八、Redis缓存设计 8.1 为什么Redis用作缓存? 一般来说,数据库的数据都是落在磁盘上的,会导致读写速度很慢。如果用户的请求量非常大,数据库很容易崩溃。由于Redis的数据保存在内存中,读写速度很快,所以R…

React(四):DOCX文件在线预览

效果 注意 ⚠️注意:部分文件预览存在问题 依赖 $ yarn add docx-preview $ yarn add jszip源码 import ./index.scss; import {useRef} from react; import type {UploadRequestOption} from rc-upload/lib/interface; import {Upload, Button, message} from an…

【时时三省】(C语言基础)一维数组

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 数组 数组就是一组数 数组的官方定义是一组相同类型元素的集合 一堆数组的创建和初始化 求组的创建 数组是一组相同类型元素的集合。数组的创建当时是: type_t arr&#x…

【过题记录】8.4(robocom补题,网络流)

今天robocom国赛,因为一个bool函数忘记return 1而裂开(错失21分) 以此为戒 贪心消消乐 其实就是一个求最大子矩阵和的板子题 利用最大子段和的思想 枚举矩阵中的上下界 压成一维后利用最大子段和 O ( n ) O(n) O(n)处理 复杂度 O ( n 3 ∗ k ) O(n^3*k) O(n3∗k) k为…

nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)

今天 准备访问下Nginx服务,但是 启动时出现如下报错:(80端口被占用,没有找到nginx.pid文件) 解决思路: 1、 查看下排查下nginx服务 #确认下nginx状态 ps -ef|grep nginx systemctl status nginx#查看端口…

[CTF]-PWN:格式化字符串漏洞题综合解析

printf型格式化字符串漏洞: 任意地址写: 32位: 例题(inndy_echo): 有格式化字符串漏洞,可以修改printf的got表内地址为system,传参getshell 解法一: 在32位中可以使…

vscode的json文件解析

vscode的json文件解析 0.参考链接1.什么是JSON2.JSON语法2.0数据类型2.1对象2.2数组2.3嵌套 3.vscode包含的JSON文件介绍4.vscode包含的JSON文件解析4.1 task.json4.2 launch.json4.3 settings.json4.4 c_cpp_properties.json4.5 package.json(详细的看参考链接&…

Python设计模式 - 抽象工厂模式

定义 抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 产品等级结构与产品族 为了更好地理解抽象工厂模式,先引入两个概念: 产品等级结构:就是产品的…

试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts

Claude.ai的Artifacts真是太方便了。 GitHub上的AWS Samples仓库中有一个仿制Artifacts的应用程序。 Open Artifacts for Amazon Bedrock https://github.com/aws-samples/open_artifacts_for_bedrockhttps://github.com/aws-samples/open_artifacts_for_bedrock本文将介绍「…

【C++】数组案例 五只小猪称体重

题目:给出五只小猪体重,找出最大的体重的值并打印 思路:利用数组写入五只小猪的体重,让每一个元素都赋值给一个整型变量并每赋值一次就于下一个数组中的元素比,若是大就继续赋值给这个变量,若是小则不赋值…

H81002S 1.7mm网络变压器:BMS汽车蓝牙接收器中的超薄共模电感科技

华强盛导读:在当今这个日新月异的汽车科技领域,每一处细节都蕴含着创新与突破。作为电动汽车心脏的电池管理系统(BMS),其高效稳定的运行不仅关乎续航与安全,更是智能化驾驶体验的基石。而在这背后&#xff…

win7安装mysql-installer-community-8.0.11.0

1、安装Microsoft Visual C 2019 Redistributable Package (x64) 官网下载地址:https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?viewmsvc-160#latest-microsoft-visual-c-redistributable-version 通过百度网盘分享的文件&#xff1…

Ubuntu安装nvidia-docker并使用的正确方式

Ubuntu安装docker: ubuntu(24.04)以及WSL2安装docker的详细教程_unbantu安装docker-CSDN博客文章浏览阅读646次,点赞5次,收藏3次。默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo。…

DAP-Seq:解锁转录因子结合位点的新钥匙

引言: 在基因组学的浩瀚宇宙中,转录因子如同掌管基因表达的神秘钥匙。它们与DNA上的特定序列结合,调控着生命活动的每一个节拍。然而,传统的研究方法在探索这些结合位点时面临诸多挑战。今天,我们将一起了解一种创新技…

多路I/O复用之select、poll、epoll

一、多进程/多线程模型的不足 为每个请求分配一个进程或线程的方式会带来较大的资源开销。创建和切换进程/线程需要消耗系统资源,包括内存、CPU 时间等。例如,在一个大规模的服务器环境中,如果同时有数千个请求到来,为每个请求创建…

01 LVS负载均衡群集

集群 在互联网应用中,随着站点对硬件的性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器越来越力不从心 集群的含义 Cluster,集群也叫群集由多台主机构成,但对外只表现为一个整体 集群分类 类型 负载均衡集…

C++初学(10)

10.1、共用体 共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。比如说:结构可以同时存储int、long、和double,而共用体只能存储int、long、或double。共用体的句式与结构相似,但含义不…

《Milvus Cloud向量数据库指南》——Zilliz Cloud 高可用性深度解析:赋能GenAI应用,引领非结构化数据新纪元

在人工智能与大数据技术日新月异的今天,非结构化数据的处理与分析已成为推动行业智能化转型的关键驱动力。Zilliz Cloud,作为基于开源向量数据库Milvus构建的全托管解决方案,不仅革新了非结构化数据的存储与查询方式,更以其卓越的高可用性设计,为开发人员构建高效、可靠的…

c++----内存管理

okk,大家好。我们大家学习了鄙人的前面前面几篇博客,并且还稍微使用了一些c的基础知识。并且我们前面都说过,我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊,内…