正向动力学与反向动力学
角色动画中的骨骼运动遵循动力学原理,定位和动画骨骼包括两种类型的动力学:正向动力学(FK)和反向动力学(IK)
要理解反向动力学(Inverse kinematics)系统,应该首先明白正向动力学(forward kinematics)系统。FK是一种让动画制作者可以将层级的节点摆出一个类似一副骨架的形状的方法。
节点的概念。它是一个用于电脑动画产业的通用术语。就角色动画骨骼来说。一个节点代表层级内外的任何物体,例如一个大腿骨骼,或者一个辅助点,或者一个球体
在一套FK系统中,一般的规则是:层级里的一个父节点驱动任意子节点的运动。例如,如果你移动前臂(父),手腕(子)就会随之运动。但是,如果你移动腕节点,前臂还将停留在原处。
使用FK方法制作动画的过程非常像摆放动作造型:当你摆放肢体(子)造型的时候,可以移动人物的躯干(父)以及所有保持与父节点的相对位置的肢体。
这是制作动画物体(例如一个行走的角色)的手臂的一种简单、直观的方法,因为动画制作者只需要考虑手臂相对应父节点的运动,而不是相对于整个空间的运动。同时应该注意的是,在使用FK制作动画时要给每一个为特定姿势而旋转的关节设置旋转关键帧。不过,当角色手臂需要抓住场景里的某些物体时,如楼梯的扶手,FK就不是最好的使用方法了。
那么与之相比。IK就是一种子节点驱动父节点运动的动画制作方法。
依然使用手臂做为例子,如果使用IK移动手腕,计算机将计算如何移动和旋转手臂的其他父节点,以使其完成想要的造型。
一般情况下,使用一条IK链需要更多的元素进行操作。手腕的位置代表一个被称为末端受动器(End Effector)的位置。末端受动器是一个IK节点,它代表一种IK解决方案的最终结果。另外,目标的物体代表末端受动器的所需位置。动画制作者操纵目标只是为了最终定位手腕,因为IK解算器总是将末端受动器的位置匹配到目标物体上。如图所示。在某些情况下,如手臂关节旋转或者只是手臂的长度太短,可能会将目标移动到某些末端受动器无法匹配的位置。
使用IK方法的一大好处之一就是可以安置末端受动器。如果你把手腕目标移动到楼梯扶手的某个位置上,并随后移动角色的躯干,手腕将会留在扶手上,因为手臂关节会自动改变到适合手腕和身体新位置的地方。使用FK完成这样的工作将会非常乏味和繁琐。而且与FK相比,默认情况下在一个IK链上制作目标物体的动画会设置目标物体的位置关键帧,但不在IK链的关节上设置旋转关键帧。
这两种方法各有其优点和缺点。一般的解决方案包括在角色的上部躯干使用FK,腿部使用IK.但是如果角色使用手掌行走呢。。。。。。。。
理想的解决方案是拥有一套你可以在其中根据需要在FK和IK之间来回切换的系统。比如强大的CS骨骼系统。
百度百科:
IK反向动力学,是根据末端子关节的位置移动来计算得出每个父关节的旋转两个原理正好相反
前向动力学与反向动力学
来源: Michael的日志
前向动力学与反向动力学是骨骼动画中很重要的方法,那么它的原理和实现究竟是怎样的呢,我写了一篇关于前向动力学与反向动力学的教程,希望对大家有帮助!
一、前向动力学的特点:
1、具有层次的骨骼结构,比如说当我们举起手臂的时候,我们的手肘跟着运动,手腕跟着手肘运动,手指跟着手腕运动,这就是一个典型的具有层次的骨骼运动,也就说,当父骨骼运动时,所有的子骨骼也随之运动
2、每一根骨骼都是由定义在其父骨骼关节坐标空间中的旋转角度ri和固定的位移ti决定的
设R={r0, r1, r2, r3,……}
那么骨骼链中的最末端的骨骼的位置E(Ex,Ey,Ez)(终端效应)
E=f(R)
那么在一般2D情况下
考虑以下的骨骼链:
可以看见骨骼链的末端骨骼的位置和旋转就是由r0, r1, r2, r3和t0, t1, t2, t3决定的,由于t0, t1, t2, t3是固定的,因此实际是仅有r0, r1, r2, r3所决定。那么我们可以简单研究一下二维平面上的骨骼旋转,请看下图:
设骨骼1,骨骼2,骨骼3的长度分别为L1,L2, L3
设骨骼1,骨骼2,骨骼3的位置二维向量分别为T1,T2, T3
设骨骼1,骨骼2,骨骼3的夹角分别为R1,R2, R3
关节2的位置为T2=(T1.x+L1*cos(R1),T1.y+L1*sin(R1))
关节3的位置为T3=(T2.x+-L2*cos(R2-R1),T2.y+L2*sin(R2-R1))
终端感应器的位置为E=(T2.x+L3*cos(R3-R2-R1),T2.y+L3*sin(R3-R2-R1))
二、反向动力学
反向动力学
前向动力学是给定一系列骨骼的状态值r0, r1, r2, r3和t0, t1, t2, t3那么最终骨骼的形态就决定了,终端感应器即最后一根骨骼的位置和旋转也就确定了。但有时候在实际应用中往往是这样一种情况,即确定了一个目标位置,让骨骼通过旋转,使得最后终端感应器能够处于目标位置之上。那么在中情况下就需要进行反向动力学求解了。即已知E(Ex,Ey,Ez),求R ={r0, r1, r2, r3,。。。。}
在前向动力学中E=f(R)
那么在反向动力学中R=f-1(E)
反向动力学的求解通常有那么几种方法:
解析求解:通过对方程式进行直接求解,并选择最优解,但在应用中并不可行
数值分析法:通常代价昂贵,不精确,但是在应用中往往是可行的唯一方法
三种常用方法:
1、雅克比矩阵法(数值分析法)
2、圆柱坐标法(数值分析法)
3、三角函数法(解析求解)
雅克比矩阵法
雅克比矩阵法是由整个系统各个参数R ={r0, r1, r2, r3,。。。。}的偏导数əR ={ər0, ər1, ər2, ər3,。。。。}
那么当系统中R ={r0, r1, r2, r3,。。。。}发生ΔR ={Δr0, Δr1, Δ r2, Δr3,。。。。}
变化时,对应E发生的变化ΔE= əRΔR,ΔE={ΔEx,ΔEy,ΔEz}
实际上,这里只是线性近似,为什么呢,请看下图
雅克比矩阵为:
əEx/r0 əEx/r1 … əEx/rn
j= əEy/r0 əEy/r1 … əEy/rn
əEz/r0 əEz/r1 … əEz/rn
已知ΔE={ΔEx,ΔEy,ΔEz}求ΔR ={Δr0, Δr1, Δ r2, Δr3,。。。。},在J为方型矩阵的情况下,ΔR=J-1ΔE, J-1为雅克比矩阵J的逆矩阵
雅克比矩阵的问题:
1、如果系统是个高约束系统或者过低约束系统
2、雅克比矩阵不可逆,即系统无解
3、雅克比矩阵不一定为方阵
为了解决这个问题:
我们引入矩阵J+= (JT J)-1 JT
(JT J)-1是方阵,并且可逆,那么我们就可以了利用(JT J)-1,而且这是可行的,为什么呢,我们先看看此公式的推导:
JΔR=ΔE
那么J JTΔR= JTΔE,两边同时乘上(J JT)-1,最后得到
ΔR=(J JT)-1 JTΔE,取J+= (JT J)-1 JT
...
正向动力学与反向动力学相关推荐
- Blender图解教程:什么是正向动力学(Forward Kinematics简称FK)和反向动力学(Inverse Kinematics 简称IK)
小补一下IK和FK的基础知识,本文仅介绍的原理,其设置方式将在其它文章中介绍. FK 即 Forward Kinematics 正向动力学 IK 即 Inverse Kinematics 反向动力学 ...
- Unity—反向动力学IK
每日一句:人生最精彩的不是实现梦想的瞬间,而是坚持梦想的过程 目录 定义: 准备: API: 设置IK 头部IK--设置人物的头部根据视角旋转 手脚IK 案例:脚步IK 定义: 一般来说,骨骼动画都是 ...
- 反向动力学在计算机动画中的应用,Unity3d教程运用类人动画反向动力学 (Inverse Kinematics)...
反向动力学 (Inverse Kinematics)(仅限专业版 (Pro)) 大多数动画经过旋转调整骨架中关节的视点为预订值来制造.子关节的方位依据其父关节的旋转而改变,因而,关节链的端点由其所包含 ...
- 反向动力学(Inverse kinematics) 学习笔记
反向动力学(Inverse kinematics) 学习笔记 1 背景 1.1 骨骼动画 将动画分为两个部分:用于绘制外观的蒙皮,以及用于控制动作的骨架(摘自维基百科).这些骨架以树状结构组织,每片骨 ...
- Unity Mecanim动画系统 之 IK(Inverse Kinematics即反向动力学)的相关说明和简单使用
Unity Mecanim动画系统 之 IK(Inverse Kinematics即反向动力学)的相关说明和简单使用 目录 Unity Mecanim动画系统 之 IK(Inverse Kinemat ...
- Unity之IK(反向动力学)
IK Inverse Kinematic即反向动力学,在骨骼动画中构建骨骼的方法被称为正向动力学.通常来说是父骨骼带动子骨骼旋转或移动,而反向动力学则是子骨骼带动父骨骼旋转或移动. 举个例子来说,正向 ...
- Unity最详细的动画总结包含IK反向动力学,AvatarMask骨骼遮罩,模型导入错误解决,MatchTarget
*案例1请见我的博客空间 Unity动画系统案例1 **所需要的项目素材和完整项目见我的线上课堂https://www.zuikakuedu.top* 该栏目讲解所有Unity的动画:有多种类型,和一 ...
- 机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播
1. 监督学习和无监督学习 监督学习 ( Supervised Learning ) 和无监督学习 ( Unsupervised Learning ) 是在机器学习中经常被提及的两个重要的学习方法. ...
- 轻松理解正向代理与反向代理
点击蓝色"程序猿DD"关注我哟 我知道有很多专注于业务研发的童鞋,经常搞不清"正向代理"与"反向代理"这两个东西.很多时候,因为这些东西的应 ...
最新文章
- 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]
- linux下perl命令行参数,Perl One-Liners | Perl命令行学习1 -e参数
- 电子自动窗帘系统c语言程序,单片机自动窗帘控制程序(两个电机)
- 404 not found ------ nginx ----- lnmp/lnmpa centOS7
- [How TO]-windows安装wget工具
- Easy Slider: 功能强大简单易用的jQuery滑动门插件
- DP_字串匹配(HDU_1501)
- 模拟撞击_模玩资讯:EPOCH 汽车撞击测试用模拟假人与实验车辆
- AUTOSAR从入门到精通100讲(十二)-V2X通信安全技术要求标准
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
- Datagard產生gap
- 线性回归 最小二乘推导
- DLL入口函数DllMain
- IDEA - 如何安装Statistic代码统计插件?
- 剑指 Offer 24. 反转链表java
- 使用微带线设计一个低通滤波器
- ROM修改---修改本机的mac地址
- 【任务脚本】1103双十一京东淘宝任务脚本,全自动程序,淘宝京东自动做任务,向大神致敬...
- 适合编程初学者的开源博客系统(Python版)
- 中华英才网java在线笔试_牛客网校招全国统一模拟笔试(三月场)- Java方向
热门文章
- 在unity中使用Newtonsoft.Json
- 公历转农历的python实现
- Revit单构件导出IFC
- 基于arduino的一位数码管控制
- ORB+GMS、FREAK+GMS、BRISK+GMS、AKAZE+GMS特征点结合使用方法
- jmeter安装完打不开_安装配置Jmeter教程
- 微信小程序实战 (WXSS:小程序版CSS、WXS:小程序版JavaScript)
- Java中常见的30道例题代码
- 10个免费的响应式布局HTML5+CSS3模板
- Throughput Latency