De nombreux designers sont tôt ou tard confrontés au défi d'obtenir un comportement réaliste des tissus ou des cheveux. Il existe un certain nombre de technologies pour cela, mais toutes ne sont pas adaptées aux plates-formes mobiles. Habituellement, les développeurs mobiles créent des animations car c'est la moins chère. Nous allons parler de simulation en temps réel - le module Unity Cloth .
Unity Cloth est un système basé sur la simulation de la physique des tissus qui fonctionne en conjonction avec SkinnedMeshRenderer. Il vous permet de contrôler un large éventail de paramètres, tels que la rigidité en traction ou en torsion, l'amortissement (la quantité responsable de la rapidité avec laquelle le tissu parviendra à l'équilibre), la simulation du vent, l'interaction des collisions internes (auto-collision), le frottement, la gravité, l'influence, etc. interaction des collisionneurs, etc.
Une des équipes du studio de Krasnodar Plarium a étudié l'applicabilité de Unity Cloth pour les appareils mobiles.
Partie 1. Simulation tissulaire
Nous avons commencé par des tests de résistance pour évaluer les limites acceptables d'utilisation des paramètres du module sur les appareils mobiles. Le premier échantillon à être examiné était un maillage multicouche à haute teneur en poly - une cape avec ~ 10k sommets, ~ 7k triangles. 19 collisionneurs de capsule ont été ajoutés à l'objet sous la forme des parties du corps du personnage. Le reste des paramètres est défini par défaut.
Le graphique ci-dessous montre la latence des métriques examinées en millisecondes en fonction du nombre d'instances d'objet. L'appareil testé est le Xiaomi Mi5 (4 cœurs, 2,15 GHz, 3 Go de RAM).
Xiaomi Mi5 n'est pas l'appareil le plus faible, mais de sérieuses pertes de performances y sont déjà visibles. Sur les appareils moins puissants (Lenovo A536, Quad-core, 1,3 GHz, 1 Go de RAM), ils deviennent désastreux. Ensuite, nous évaluerons les résultats démontrés par l'appareil le plus faible.
Une mise à jour de la physique des tissus représente à elle seule 775 ms sur 800. Essayons d'exclure l'influence des collisionneurs.
Les calculs de collision de collisionneurs réduisent considérablement les performances; avec 25 cas, un maximum de 475 collisionneurs étaient présents sur les lieux.
La mesure suivante est relative à un modèle monocouche low poly (153 sommets, 256 triangles) avec moins d'instances (jusqu'à 9) et moins de collisionneurs (jusqu'à 8).
Voyons quel impact ont les calculs de collisionneur. Construisons les dépendances correspondantes en utilisant l'exemple d'une instance d'un objet sur différents appareils (en plus des appareils déjà utilisés, nous prenons Asus ZenFone 5, Dual-core, 2 GHz, 1 Go de RAM).
Les fonctions résultantes sont bien approximées par une fonction polynomiale de degré 2.
On peut voir que la situation avec les objets low poly est bien meilleure. Sur les appareils les plus anciens, une instance d'un objet prend environ 1 ms en moyenne (contre ~ 3 ms pour un modèle high-poly, toutes choses égales par ailleurs), ce qui est plutôt bien.
Voyons ensuite comment des paramètres supplémentaires affectent les performances .
Dans les tests, nous avons utilisé un maillage monocouche avec un peu plus de détails que dans la dimension précédente (~ 450 sommets, ~ 800 triangles). 1 collisionneur de capsule a été ajouté au composant Unity Cloth, 1 instance de l'objet a été examinée, les paramètres supplémentaires des collisions internes et des effets du vent ont été modifiés .
Une simulation de vent supplémentaire, comme les calculs de collision interne, dégrade les performances.
Ceci est particulièrement visible sur les modèles plus complexes. Analysons l'effet de paramètres supplémentaires de rigidité (traction, torsion) et d'atténuation sur des maillages avec ~ 10 000 sommets et ~ 500 avec 1 capsule collisionneuse.
Vous trouverez ci-dessous les résultats obtenus sur l'appareil le plus faible (Lenovo A536) avec des paramètres variables dans chacune des mesures.
1. Rigidité: étirement et torsion - off.
Faible poly: 1,67 ms High-poly: 145,32 ms.
2. Rigidité: allongement - incl. / Curl - désactivé.
Faible poly: 1,79 ms Haut poly: 160,44 ms.
3. Rigidité: Stretch - off. / Torsion - incl.
Faible poly: 1,90 ms. High-poly: 172,19 ms.
4. Rigidité: étirement et torsion - incl.
Faible poly: 1,92 ms Haut poly: 194,50 ms.
5. Rigidité: allongement - incl. / Curl - désactivé. Influence du vent - incl.
Low-poly: 1,69 ms. Haut poly: 165,73 ms.
6. Rigidité: allongement - incl. / Curl - désactivé. Atténuation incl.
Low-poly: 1,69 ms. High-poly: 172,75 ms.
7. Rigidité: allongement - incl. / Curl - désactivé. Influence du vent - incl. Atténuation - incl.
Low-poly: 1,76 ms. Haut poly: 173,10 ms
8. Rigidité: allongement - incl. / Curl - désactivé. Collisions internes - incl.
Faible poly: 2,01 ms. High-poly: Unity Crash
Les paramètres de simulation du vent, de la décoloration, de la compression, de la torsion et de l'interaction interne ajoutent une charge supplémentaire, dégradant considérablement les performances sur les appareils faibles lors de l'utilisation de maillages high-poly. Les maillages avec moins de sommets ont moins de latence.
- La simulation du vent ajoute environ 9% de la latence métrique totale.
- La simulation d'évanouissement ajoute environ 12% du retard métrique total.
- La simulation de rétrécissement / torsion ajoute environ 13 à 15% de la latence métrique totale.
- ~ 12–16% ( . : ).
2.
Modèle de cgtrader.com
Parlons un peu des capacités du composant Unity Cloth pour travailler avec les cheveux. À première vue, cela ne devrait pas être plus difficile qu'avec les tissus monocouches - fixez d'abord les sommets souhaités, puis répartissez le degré d'influence de la simulation sur les sommets restants. Mais il y a un problème - des plis d'objets volumétriques tels que des boucles. Pour voir plus clairement la raison de leur apparition, prenez le réseau cristallin cubique centré sur la face d'un métal, par exemple le chlorure de sodium, à titre d'illustration.
Les plis s'expliquent par le fait que les pics voisins dépassent les sommets éloignés (indiqués par la flèche). Les plis et les torsions ne pouvaient être évités même en utilisant des calculs d'interactions de collisions internes. Nous concluons que Unity Cloth ne convient pas aux corps solides.
Paramètres de simulation:
- Paramètres 1: 3 collisionneurs, rigidité activée pour la tension et la torsion, vent et collisions internes désactivées, amortissement;
- Paramètres 2: 3 collisionneurs, rigidité de traction activée, vent et collisions internes désactivées, atténuation désactivée;
- Paramètres 3: 1 collisionneur, rigidité de traction activée, vent et collisions internes désactivées, atténuation désactivée.
Les indicateurs de performance des deux appareils faibles sont comparables l'un à l'autre, Xiaomi donne les meilleurs résultats.
Sur les scènes chargées, même des retards relativement petits deviennent importants, et dans le développement mobile, ces chiffres se multiplient, vous devez donc vous battre pour chaque dixième de milliseconde.
Résumé du composant Tissu Unity
- Il s'adapte bien aux objets simples à une seule couche (drapeaux, capes, couvre-lits et nappes).
- .
- .
- . , : Graphics Settings .
- - Unity ( Bug Story).
La simulation de tissus simples monocouches créés avec le module Unity Cloth est assez réaliste. Cependant, il doit être utilisé avec prudence: l'interaction avec un grand nombre de collisionneurs, ainsi que des calculs excessifs de simulation de vent, d'amortissement, de compression, de torsion, d'interaction interne, conduisent à une dégradation des performances. En général, Unity Cloth est assez gourmand en ressources pour une utilisation sur les appareils mobiles, en particulier lors de la simulation de tissus et de cheveux sur des mailles à haute teneur en poly.
Si vous avez l'intention d'utiliser Unity Cloth sur des plates-formes mobiles, faites attention aux recommandations suivantes:
- Moins de sommets signifie de meilleures performances. Utilisez des maillages avec le nombre minimum de sommets que vous pouvez gérer.
- , .
- , , , , .
- , , .
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 , - /. , :
2018.4.14f.
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.