-
Notifications
You must be signed in to change notification settings - Fork 145
Q&A
A: 从纯粹的物理学上来讲,这只是一个有collider和point的物理模型,而不是检测mesh是否重叠的图形学黑科技
在讨论穿模之前,我想分别从mesh与collider的角度来谈这个问题:
从mesh穿模的角度而言,我觉得大概是因为你在制作collider的过程中没有完整的将mesh包裹进去,请尝试修改ADBEditorColldier的位置与半径;
另外,有时候目标的collider与其组件上的transfrom位置过远,也可能导致这个状况,并非是脚本有问题,而是由于transfrom在旋转的过程当中也会带着collider绕其position旋转,一个经典的例子就是案例当中的miku模型,由于盆骨的位置实在太高,一旦稍微转动就会导致一个距离较远的胶囊体跑偏,最终没有采用该collider;
你可以尝试创建一个新的gameobject,并在laterUpdate中更新其position与rotation,使其一直处于你理想的位置,来实现在某一位置的效果.
从collider穿模的角度而言,我觉得是因为迭代的次数过低.
高次数的迭代意味更加庞大的性能开销,并随着次数的增多线性增长,但同时也意味着更仔细的分割移动情况与计算新位置.
迭代次数越高,其对于collider运动轨迹与point的运动轨迹的切片就越密集,这是迭代48次的场景(图中collider在一帧内移动了0.4m,相当等于24m/s):

A:建议依次检查以下几个方面:
是否有有约束在碰撞体的范围内:常见于裙子这种有需要约束围一圈的情况,目前经常出现的情况有盆骨附近的collider过大导致挤压了skirt的collider,有的话请关闭ADBSetting的isLoop或者把collider移下面去或者调小一点.
尝试提高迭代次数: 这是个很有效,但是治标不治本的方案,通常而言,正常的参数设置不会出现异常的颤动情况.
避免超出常规的设定参数:我承认把重力设置为10或者把某些参数设置成-1会让场景很酷,但是在低次数的迭代下这会导致频繁的颤动与一些奇怪问题.
避免不合理的constraint:不合理的constraint设定(比如对头发使用shear)会导致一些奇怪的效果,其中就包括震颤.
fixed节点在开始前带有一定的rotation/模型本身处于一种非垂直于地面的情况:如果你使用的是freeze属性,那么本条对你或许会有点帮助,由于freeze效果设计初就考虑进去了同样受到重力影响的问题,所以计算欧拉角的步骤具有一定限制,通常如果出现这个错误,你的骨骼垂直于一个奇怪的角度/一直在旋转;如果你发现你的情况如上所述,请提交issue并提供模型,以获得一个临时的解决方案.
动作本身的问题:如果是该问题,则颤抖无法避免,一个有趣的小解决方案是取消unity对于动画的压缩,通常能得到一定缓解.
A:Collider是否与骨骼发生碰撞一共有三个参数在控制 :
1.ADBEditorCollider上的isOpen属性
2.ColiderChoice规则
3.ADBRuntimeController上的CollisionQuanlity选项被设置成Null
A:这就涉及到一个无奈的问题了,如果是在单线程执行,那么结果会返回静止,但是在Jobs下执行,事情就会变得不一样起来.
由于多线程架构的限制,我不能完全的保证计算顺序的正确,所以一般情况下,你大概可以获得一个略微有些抖动的结果.
同样的,增加迭代次数可以减少其影响,但是能改善的效果有限.
A:UntiyChan请访问https://unity-chan.com/
Miku模型一作是DigitrevX大佬,我是二作,经过大佬同意,可以在非商业的模式下使用该模型,商业需求请上D站联系DigitrevX大佬.
R1N4为公开免费模型,使用前可以参考一下其免费协议,同时强烈安利这个大佬的其他模型XD.
如果仍然存在请发issue.
A: 说出来你们可能不大相信,相比于曾经的DynamicBone,我们在性能上做到了及其夸张,甚至有点匪夷所思的地步.
该套物理系统在60帧的情况下,支持128名角色的物理模拟,包括角色与角色之间的交互,任意两个角色都可以触碰对方的头发
在一些极端的性能情况下,它甚至可以异步执行物理!
待会再来补充图XD .