APSchmidt 发表于 2023-2-3 10:57

米哈游的布料解算方案,在Unity是如何实现的?

以原神为例:
1.角色在待机、跑动、攻击时,布料飘动的效果是固定的,不受速度、方向影响,显然不是实时物理模拟的解算方案。
更倾向于是Animator播放烘焙好的布料动画的方案。
2.大世界遇到地形高低差,实时计算的FootIK会影响布料(裙子)位置,同时也还包含布料正常情况下的飘动效果。
但这和1的结论并不一致。更不可能是单独为IK烘焙多套动画。
综上,这种布料方案在Unity是如何实现的?

kirin77 发表于 2023-2-3 11:02

我猜大概率用了MagicalCloth,但是肯定魔改过。
MagicalCloth背后的算法叫FABRIK,我在这个帖子里讲了: https://www.zhihu.com/answer/2775116303

xiangtingsl 发表于 2023-2-3 11:11

工匠克算法,直接k死!算个鬼

stonstad 发表于 2023-2-3 11:13

原神ik只在待机生效,ik最大高度也是有限制的
百分之90的摆动动画是k的
有些部分动画,会有少量微弱的动态骨骼效果,一般只在飘带的末端存在
毕竟原神是角色高转速,人物不支持换装,用k的动画能最大限度保证效果

xiaozongpeng 发表于 2023-2-3 11:14

据我所知,大部分“飘动”效果都是预先烘焙好的动画。
小部分是基于物理的动态解算。
其基本可以靠unity的两款插件:《Final-IK》与《Magica Cloth》来实现。
https://assetstore.unity.com/packages/tools/animation/final-ik-14290Preventing penetration当然,插件永远解决的是“泛用性”问题,就好比《Dynamic Bone》性能巨差,但是他就是实现《VR Chat》模型mod的动态骨骼的首选插件。落实到项目中建议自己写一套捏。
爱吃菠萝不吃萝卜:【游戏开发】逆向运动学(IK)详解实际上,“烘焙动画”与“物理解算”并不冲突。除去Unity官方的《AnimationRigging》package把ik解算插入了Unity Mecanim动画管线中,其他的插件都可以视为一种“后处理”——比如在【LateUpdate】中更新骨骼的transform信息。
这样,一帧之内,动画管线的流程是:读取动画片信息、采样动画数据、把动画数据写入骨骼中、后处理(IK Solve,物理计算)、重新写入解算数据、渲染。
在此,我不得不提一句《Magica Cloth》在后处理阶段的策略:因为防穿模的物理计算其实蛮耗时的,为了保证帧率,《Magica Cloth》决定在当前帧输入物理计算的参数,在下一帧渲染前输出计算结果——所有布料的物理模拟全部延迟一帧。
由于此插件本就搭载了Unity的Job System,此计算不会阻塞主线程,采用多线程计算的同时延迟一帧出结果,效率其实已经很高了。
至于“布料”“穿模”的算法原理,还得靠大手子贴一贴论文or博文链接了,这方面我是一窍不通。

Ilingis 发表于 2023-2-3 11:17

有在网上看过有人提取了原神的动画,而这些动画都是包含了布料抖动的,所以可以得出,都是骨骼动画,不是实时解算,都是maya,max里面烘焙好的或者是动画师手动k。
<hr/>更新:
不好意思,没看题,请忘记我的答案。
再更新:
个人猜测,仔细分析foot ik,其实裙子在ik状态下只是单向抬起,所以,理论上,可以用animator的addition animation实现,通过脚的跨度计算weight实现。
页: [1]
查看完整版本: 米哈游的布料解算方案,在Unity是如何实现的?