モバイルでUnityClothを使用して髪と生地をシミュレートする





多くの設計者は遅かれ早かれ、現実的な組織や髪の動きを実現するという課題に直面しています。これには多くのテクノロジーがありますが、すべてがモバイルプラットフォームに適しているわけではありません。通常、モバイル開発者は最も安価であるためアニメーションを作成します。リアルタイムシミュレーションについて説明します-UnityClothモジュール







Unity Clothは、SkinnedMeshRendererと連携して動作する組織物理シミュレーションベースのシステムです。これにより、引張り剛性またはねじり剛性、減衰(ファブリックが平衡状態になるまでの速さの原因となる量)、風のシミュレーション、内部衝突の相互作用(自己衝突)、摩擦、重力、影響など、さまざまなパラメーターを制御できます。コライダーの相互作用など



。KrasnodarスタジオPlariumのチームの1つは、モバイルデバイスへのUnityClothの適用性を研究しました。



パート1。組織シミュレーション



モバイルデバイスでモジュール設定を使用するための許容限界を評価するために、ストレステストから始めました。最初に調べたサンプルは、高ポリ多層メッシュでした。これは、頂点が約10k、三角形が約7kのケープです。 19個のカプセルコライダーがキャラクターの体の部分の形でオブジェクトに追加されました。残りの設定はデフォルトです。



以下のグラフは、オブジェクトインスタンスの数に応じて、調査対象のメトリックの待ち時間をミリ秒単位で示しています。テストされたデバイスはXiaomiMi5(4コア、2.15 GHz、3 GBのRAM)です。







Xiaomi Mi5は最も弱いデバイスではありませんが、深刻なパフォーマンスの低下がすでに見られます。それほど強力ではないデバイス(Lenovo A536、クアッドコア、1.3 GHz、1 GB RAM)では、悲惨な結果になります。次に、最も弱いデバイスが示す結果を評価します。







組織物理学の1つの更新だけで、800のうち775ミリ秒を占めます。コライダーの影響を排除してみましょう。







コライダーの衝突計算はパフォーマンスを大幅に低下させます。25のインスタンスで、最大475のコライダーがシーンに存在しました。



次の測定は、インスタンス(最大9)とコライダー(最大8)が少ない低ポリ単層モデル(153の頂点、256の三角形)に関連しています。











コライダーの計算がどのような影響を与えるか見てみましょう。さまざまなデバイス上のオブジェクトの1つのインスタンスの例を使用して、対応する依存関係を構築しましょう(すでに関与しているデバイスに加えて、Asus ZenFone 5、デュアルコア、2 GHz、1 GBのRAMを使用します)。







結果の関数は、次数2の多項式関数でよく近似されます。



低ポリオブジェクトの状況がはるかに優れていることがわかります。最も古いデバイスでは、オブジェクトの1つのインスタンスに平均で約1ミリ秒かかります(高ポリモデルの場合は約3ミリ秒で、他のすべての条件は同じです)。これはかなり良いことです。



次に、追加のパラメーターがパフォーマンスにどのように影響するかを見てみましょう



テストでは、前の次元よりもわずかに詳細な単層メッシュを使用しました(〜450の頂点、〜800の三角形)。 Unity Clothコンポーネントに1つのカプセルコライダーが追加され、オブジェクトの1つのインスタンスが検査され、内部衝突と風の影響の追加パラメーター変化しました











内部衝突計算などの追加の風シミュレーションは、パフォーマンスを低下させます。



これは、より複雑なモデルで特に顕著です。剛性(張力、ねじれ)と減衰の追加パラメーターが、1つのカプセルコライダーで約10,000の頂点と約500のメッシュに及ぼす影響を分析してみましょう







以下は、各測定でさまざまなパラメータを使用して最も弱いデバイス(Lenovo A536)で得られた結果です。



1.硬さ:伸ばすとねじる-オフ。

低ポリ:1.67ms高ポリ:145.32ミリ秒。



2.剛性:伸び-含む。 /カール-オフ。

低ポリ:1.79msハイポリ:160.44ms。



3.剛性:ストレッチ-オフ。 /ツイスト-含む

低ポリ:1.90ms。高ポリ:172.19ミリ秒。



4.剛性:伸縮とねじれ-含む。

低ポリ:1.92msハイポリ:194.50ミリ秒。



5.剛性:伸び-含む。 /カール-オフ。風の影響-含む

低ポリ:1.69ミリ秒。ハイポリ:165.73ms。



6.剛性:伸び-含む。 /カール-オフ。減衰込み

低ポリ:1.69ミリ秒。ハイポリ:172.75ms。



7.剛性:伸び-含む。 /カール-オフ。風の影響-含む減衰-含む。

低ポリ:1.76ms ハイポリ:173.10ms



8.剛性:伸び-含む。/カール-オフ。内部衝突-含む。

低ポリ:2.01ms ハイポリ:ユニティクラッシュ



風、フェード、圧縮、ねじれ、および内部相互作用のシミュレーションのパラメーターは、追加の負荷を追加し、ハイポリメッシュを使用する場合の弱いデバイスのパフォーマンスを大幅に低下させます。頂点が少ないメッシュは、待ち時間が短くなります。



  • 風のシミュレーションでは、メトリックの合計待ち時間の約9%が追加されます。
  • フェージングシミュレーションは、メトリック遅延全体の約12%を追加します。
  • 収縮/ねじれシミュレーションは、総メトリック待ち時間の約13〜15%を追加します。
  • ~ 12–16% ( . : ).


2.





cgtrader.comのモデル髪を扱う際のUnityCloth



コンポーネントの機能について少し話しましょう。一見したところ、これは単層ファブリックの場合と同じくらい難しいことではありません。最初に目的の頂点を修正してから、シミュレーションの影響の程度を残りの頂点に分散します。しかし、問題があります-カールなどの体積オブジェクトのねじれ。それらが発生する理由をより明確に理解するために、いくつかの金属、たとえば塩化ナトリウムの面心立方結晶格子を例として取り上げます。







ねじれは、近くのピークが遠くのピークを超えているという事実によって説明されます(矢印で示されています)。内部衝突の相互作用の計算を使用しても、ねじれやねじれは避けられませんでした。UnityClothはソリッドボディには適していないと結論付けています。







シミュレーション設定:



  • パラメータ1:3つのコライダー、張力とねじれのための剛性オン、風と内部の衝突オフ、減衰オフ。
  • パラメータ2:3つのコライダー、引張り剛性が有効、風と内部の衝突が無効、減衰が無効。
  • パラメータ3:1コライダー、引張剛性を有効、風と内部衝突を無効、減衰を無効。


2つの弱いデバイスのパフォーマンス指標は互いに同等であり、Xiaomiが最良の結果をもたらします。



忙しいシーンでは、比較的小さな遅延でも重要になり、モバイル開発ではこれらの数値が倍増するため、10ミリ秒ごとに戦わなければなりません。



UnityClothコンポーネントの概要



  • 単純な単層オブジェクト(旗、岬、ベッドカバー、テーブルクロス)にうまく対応します。
  • .
  • .
  • . , : Graphics Settings .
  • - Unity ( Bug Story).




UnityClothモジュールで作成された単純な単層ファブリックのシミュレーションは非常に現実的です。ただし、注意して使用する必要があります。多数のコライダーとの相互作用、および風、減衰、圧縮、ねじれ、内部相互作用をシミュレートするための不要な計算により、パフォーマンスが低下します。一般に、Unity Clothは、モバイルデバイスで使用するには、特に高ポリメッシュでファブリックや髪の毛をシミュレートする場合に、非常に多くのリソースを消費します。モバイルプラットフォームでUnityCloth



を使用する場合は、次の推奨事項に注意してください。

  • 頂点が少ないほど、パフォーマンスが向上します。処理できる頂点の数が最小のメッシュを使用してください。
  • , .
  • , , , , .
  • , , .


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