角色动画研究 —— FABRIK
这篇博客介绍了FABRIK的算法,适应性和与其他IK算法的对比。
FABRIK
在之前的博客角色动画研究 —— IK的三种结算方法和角色动画研究 —— 使用雅可比矩阵(Jacobian)来结算IK中,介绍了在游戏中常用的三角分析、CCD和在控制论中常用的雅可比矩阵的结算IK的方法。在这篇博客中将会介绍另一种IK结算方法,FABRIK。
FABRIK的工作原理
FABRIK的工作原理其实比较简单,相对于以计算效率见长的CCD来说应该还会更快一些,同时,效果也会更好。对于刚体骨骼的IK计算来说,应该是目前游戏开发这一块比较好用的IK结算算法了。
算法如下:
首先,针对一条从首端到尾端的bone chain,以及一个对应的Target point,先计算整条chain的长度,从而判断这个Target point是否可到达。
1.1 如果不可到达,则要求根骨骼进行移动。通常的情境类似于一个人如果伸直了手或者一只长颈鹿伸长了脖子也无法够到目标点时,则此时需要自己本身就向目标点挪(在使用Jacobian矩阵计算的环境下,此时矩阵为irregular,无对应的逆可以算出来)。
1.2 如果可以到达,那么这就意味着可以进行下一步的处理了,这里假设一共有五根骨骼(从根骨骼到末端骨骼分别是p0p0p_0, p1p1p_1,p2p2 p_2, p3p3p_3,p4p4 p_4),与目标位置(t)。如果整条骨骼链可以保证够得着的话,那么就可以开始进行FABRIK的处理。整体分为两步,首先,先从末端骨骼开始计算,先将最末端的骨骼p4p4p_4移到目标位置t处,此时骨骼p4p4p_4的位置为p′4p4′p_4^{'}。
- 然后,将p3p3p_3和p′4p4′p_4^{'}连成一条直线,通过原有的p3p3p_3和p4p4p_4的距离,将现在的p3p3p_3拉到与p′4p4′p_4^{'}同样的距离处p′3p3′p_3^{'}。
- 如是者三,一直处理到根骨骼p0p0p_0
- 再之后,再从根骨骼p′0p0′p_0^{'}开始处理。由于根骨骼再整个迭代过程中是默认为不动的,因此再把根骨骼p′′0p0″p_0^{''}移到原来的位置p0p0{p_0}处,接着使用同样的距离约束,一直处理到尾骨骼p4p4p_4。
- 重复2~5的迭代过程,直到最终的尾骨骼位置与到达目标位置(或与目标位置距离小于某个预定值)停止。此时整个算法结束。
整体算法图示如下:
多端约束与环形约束
针对于人性骨骼(Humanoid Skeleton)来说,其实一套IK往往并不是一整根bone chain来进行结算,更多的应该是类似于bone tree(例如手掌的指头、双手同时追踪一个target)的架构。如果是使用CCD或者雅可比矩阵,则并不能在多条路径中取得平衡,但是针对FABRIK来说,多端约束是很容易实现的——从某一端开始进行结算,到达分叉口时,针对接下来的几条子路径挨个的处理一边,那么对应的sub-base就可以直接取得其平均值,从而兼顾到多端约束的表现:
类似的道理,FABRIK也可以使用在环形约束上。
与其他IK算法的比较
针对于普通的三角分析比较,FABRIK适用于完全未定的骨骼架构上。
针对于CCD,FABRIK可以有更好的收敛效果,甚至还可以用CGA(Conformal geometric algebra)进行收敛加速。
针对于雅可比矩阵操作,FABRIK最终产生的效果不一定比雅可比矩阵更好,但是计算量大大减少。#
骨骼约束
FABRIK的骨骼约束其实与一般的基于iteration的骨骼约束差不多,并且针对工程来讲,还是统一的骨骼约束方案比较现实,因此这里并不展开讲。如果以后有时间可以另起一篇博客进行讲解。
实际运用
FABRIK已经在UE4中被封装成了节点,可以针对链条骨骼模型、树状骨骼模型等直接进行操作,读者可以直接进行使用。如果感兴趣,可以阅读其源码。
<全文完>
角色动画研究 —— FABRIK相关推荐
- 角色动画研究 —— IK的三种结算方法
这篇博客介绍了逆向运动学(Inverse Kinematics, IK)的三种结算方法. 背景 IK在角色动画的表现中有着很重要的地位.通常的角色动画都是使用FK(Forward kinematics ...
- Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(下) 角色动作的过渡切换 角色动画高级技巧 构建测试场景并运行 数据驱动的角色运动 角色动作的过渡切换 我们在研究下一步的高级 ...
- 《强化学习周刊》第39期:近似最优深度、多智能体广义、角色动画强化学习...
No.39 智源社区 强化学习组 强 化 学 习 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<强化学习周刊>已经开启"订阅功能",以后我们会向您自动推送最 ...
- 角色动画中的骨骼蒙皮技术
参考文献<骨骼皮肤绑定技术的研究及实现> 角色动画中的技术难点:建模技术.运动控制技术.运动捕获.骨骼皮肤绑定技术. 其中,建模技术研究的是角色模型层次及其之间的关系运动:控制技术研究的是 ...
- Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(上) 物理引擎先放一边 动画库ozz-animation 动画资源管理 载入和预处理动画 合并到OSG显示 物理引擎先放一边 ...
- 2D MMO中角色动画的优化总结
在深圳Cocos沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在社区论坛上第一次看到Colin的团队用CocosCreator制作的<热血暗黑>时就被深深地震撼到了!更为重要的是 ...
- 《强化学习周刊》第39期:近似最优深度、多智能体广义、角色动画强化学习
文章转载|智源社区 本期贡献者|李明.刘青.小胖 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和资讯,智源社区结合领域内容 ...
- Adobe Illustrator的教程:如何建立扁平化设计角色动画
即使你不能也借鉴,您可以创建一个简单的步骤人物. 学习设计特点,并按照在这个video.flash角色设计/动画CC角色设计中使用的设计过程中的任何字符". Adobe Illustrato ...
- 【建议收藏】找不到免费的角色动画?来试试mixamo
你好,我是你的技术探路者郑洪智,你可以叫我大智. 今天给你分享我的一个秘密武器. 很多童鞋问我,我自己做游戏,从哪搞角色和动画啊?Asset Store负担不起,各种网站上的资源质量参差不齐,耗费了很 ...
最新文章
- python代码块使用缩进表示-Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?...
- 清除window 系统中的垃圾文件-转
- python selenium grid_selenium grid 使用
- English as a medium of instruction
- 64位Ubuntu kylin 16.04安装wine QQ
- 牛客题霸 [删除有序链表中重复的元素] C++题解/答案
- 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...
- 飘刃 0.1.1 发布,速度碾压 Vue-CLI 的轻量级 Vue 项目构建工具
- PLSQL调整SQL字体大小
- 半导体物理学习笔记(一)
- html 日期区间选择器,element日期范围选择器
- 安卓APK文件结构解析 怎样去除内置广告 及修改图标和文字
- linux设备驱动中的阻塞与非阻塞(二)
- 彩色电视制式与色度解码电路
- 服务器 运行时错误怎么办,内部服务器错误怎么办
- 【模型加速】PointPillars模型TensorRT加速实验(4)
- 2019级吉林大学计软实验题目解析
- Win10系统磁盘分区管理
- 使用order by 按照指定顺序排序或自定义顺序排序
- 习题 8-20 懒惰的苏珊(Lazy Susan, ACM/ICPC Danang 2007, UVa1620)
热门文章
- 正交匹配追踪(OMP)其它改进算法
- 我的杭电时代——考研篇
- 广东工业大学计算机科学与技术专业,广东工业大学王牌专业前景怎么样?
- Qt程序单元测试学习记录
- 车企新品牌、新车型层出,数据采集分析告诉你到底哪家强
- YOLO v4在jetson nano的安装及测试
- V4d:4d Convolutional Neural Networks For Video-level Representation Learning
- Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
- Swift 沙盒文件转Data
- 炫界 (302) -(查动简)_家居照明之埃克苏Line系列吊灯:简直主义,把极简几何设计发挥得淋漓尽致...