在手机上使用Unity Cloth模拟头发和织物





许多设计师迟早都会面临实现逼真的组织或头发行为的挑战。有许多技术可以实现,但是并非所有技术都适合于移动平台。通常,移动开发人员烘焙动画是因为它最便宜。我们将讨论实时仿真-Unity Cloth模块







Unity Cloth是一个基于组织物理模拟的系统,可与SkinnedMeshRenderer结合使用。它使您可以控制各种参数,例如抗张或抗扭刚度,阻尼(决定织物达到平衡速度的量),风向模拟,内部碰撞的相互作用(自碰撞),摩擦,重力,影响等。撞机等的相互作用



的一个从克拉斯诺达工作室Plarium队的研究统一布的适用性用于移动设备。



第1部分。组织模拟



我们从压力测试开始,以评估在移动设备上使用模块设置的可接受限制。要检查的第一个样品是高多边形多层网格-具有约10k顶点,约7k三角形的海角。以角色身体部位的形状向对象添加了19个胶囊对撞机。其余设置为默认设置。



下图显示了要检查的指标的延迟(以毫秒为单位),具体取决于对象实例的数量。经过测试的设备是小米Mi5(4核,2.15 GHz,3 GB RAM)。







小米Mi5并不是最弱的设备,但已经可以看到严重的性能损失。在功能较弱的设备(联想A536,四核,1.3 GHz,1 GB RAM)上,它们会造成灾难性的后果。接下来,我们将评估最弱设备展示的结果。







仅组织物理学的一项更新就占了800毫秒中的775毫秒。让我们尝试排除对撞机的影响。







对撞机碰撞计算大大降低了性能;在25个实例中,场景中最多存在475个对撞机。



下一个测量是相对于实例单层模型(153个顶点,256个三角形)而言,实例更少(最多9个),对撞机更少(最多8个)。











让我们看看对撞机计算有什么影响。让我们以一个对象实例在不同设备上的示例为例,建立相应的依赖关系(除了已经使用的设备之外,我们还使用Asus ZenFone 5,双核,2 GHz,1 GB RAM)。







所得函数可以很好地近似为2级多项式函数。



可以看出,具有低多边形对象的情况要好得多。在最古老的设备上,一个对象的一个​​实例平均大约需要1毫秒(对于其他所有条件相同的高多边形模型,则大约为3毫秒),这是相当不错的。



接下来,让我们看看其他参数如何影响性能



在测试中,使用了单层网格,其细节比以前的尺寸要大一些(〜450个顶点,〜800个三角形)。将1个胶囊对撞机添加到Unity Cloth组件中,检查了该对象的1个实例,还更改了内部碰撞和风效应的其他参数











诸如内部碰撞计算之类的附加风仿真会降低性能。



这在更复杂的模型上尤其明显。让我们分析刚度(张力,扭转)和衰减的附加参数对具有大约10,000个顶点的网格和具有1个胶囊对撞器的大约500个网格的影响。







以下是在每个测量中参数变化的最弱设备(联想A536)上获得的结果。



1.刚度:拉伸和扭曲-关闭。

低聚:1.67ms高多边形:145.32毫秒。



2.刚度:伸长率-包括/卷曲-关闭。

低聚:1.79ms高poly:160.44ms



3.刚度:伸展-关闭。 /扭曲-含

低聚:1.90ms高多边形:172.19毫秒。



4.刚度:拉伸和扭曲-包括

低聚:1.92ms高poly:194.50ms



5.刚度:伸长率-包括/卷曲-关闭。风影响-包括

低聚:1.69毫秒。高聚:165.73ms。



6.刚度:伸长率-包括/卷曲-关闭。包括衰减

低聚:1.69毫秒。高多边形:172.75ms。



7.刚度:伸长率-包括/卷曲-关闭。风影响-包括衰减-含

低聚:1.76ms 高poly:173.10ms



8.刚度:伸长率-包括 /卷曲-关闭。内部碰撞-包括

低聚:2.01ms。高多边形:Unity Crash



模拟风,渐变,压缩,扭曲和内部相互作用的参数会增加额外的负载,从而在使用高多边形网格时在弱设备上的性能显着降低。顶点较少的网格具有较小的延迟。



  • 风速模拟会增加〜9%的总指标延迟。
  • 衰落仿真增加了总度量延迟的12%。
  • 收缩/扭曲模拟增加了约13-15%的总指标延迟。
  • ~ 12–16% ( . : ).


2.





来自cgtrader.com



模型让我们谈谈Unity Cloth组件在处理头发上的功能。乍一看,这应该比单层织物难得多-首先固定所需的顶点,然后为其余的顶点分配模拟影响程度。但是有一个问题-诸如卷发之类的体积物体的扭结。为了更清楚地了解它们发生的原因,以某种金属(例如氯化钠)的面心立方晶格为例。







扭结的解释是附近的峰超出了远处的峰(如箭头所示)。即使使用内部碰撞相互作用的计算,也无法避免扭结和扭曲。我们得出结论,Unity Cloth不适合用于实体。







模拟设置:



  • 参数1:3个对撞机,为拉力和扭曲打开了刚度,关闭了风和内部碰撞,使阻尼消失;
  • 参数2:3个对撞机,启用拉伸刚度,禁用风和内部碰撞,禁用衰减;
  • 参数3:1个对撞机,启用拉伸刚度,禁用风和内部碰撞,禁用衰减。


两个弱设备的性能指标可以相互比较,小米给出了更好的结果。



在繁忙的场景中,即使是相对较小的延迟也会变得很重要,在移动开发中,这些数字会成倍增加,因此您必须争取每十分之一毫秒的时间。



Unity布组件的摘要



  • 它可以很好地处理简单的单层对象(标志,斗篷,床罩和桌布)。
  • .
  • .
  • . , : Graphics Settings .
  • - Unity ( Bug Story).




用Unity Cloth模块创建的简单单层结构的仿真是很现实的。但是,应谨慎使用:与大量对撞机进行交互,以及对风模拟,阻尼,压缩,扭曲,内部交互进行过多计算,都会导致性能下降。通常,Unity Cloth在移动设备上的使用会占用大量资源,尤其是在高多边形网格上模拟织物和头发时。



如果您确实打算在移动平台上使用Unity Cloth,请注意以下建议:

  • 更少的顶点意味着更好的性能。使用具有最少顶点数的网格物体。
  • , .
  • , , , , .
  • , , .


Bug Story
, - . Unity Support.



1. Unity 2018.4.4f1 Cloth Bounds SkinnedMeshRenderer, , .







8 9 . Xiaomi Mi 5.







2018.4.8f1.



2. 2018.4.8 Constraints , - /. , :

  • Constraints;
  • -, ;
  • Play Mode ;
  • Cloth.






2018.4.14f.



All Articles