Simulación de cabello y telas con Unity Cloth en dispositivos móviles





Muchos diseñadores, tarde o temprano, se enfrentan al desafío de lograr un comportamiento realista del tejido o del cabello. Existe una serie de tecnologías para esto, pero no todas son adecuadas para plataformas móviles. Por lo general, los desarrolladores móviles hacen animaciones porque es el menos costoso. Vamos a hablar sobre la simulación en tiempo real: el módulo Unity Cloth .







Unity Cloth es un sistema basado en simulación de física de tejidos que funciona junto con SkinnedMeshRenderer. Permite controlar una amplia gama de parámetros, como la rigidez de tracción o torsión, la amortiguación (la cantidad que es responsable de la rapidez con la que el tejido llegará al equilibrio), la simulación del viento, la interacción de colisiones internas (auto-colisión), la fricción, la gravedad, la influencia, etc. interacción de colisionadores, etc.



Uno de los equipos del estudio de Krasnodar Plarium estudió la aplicabilidad de Unity Cloth para dispositivos móviles.



Parte 1. Simulación de tejidos



Comenzamos con pruebas de estrés para evaluar los límites aceptables para usar la configuración del módulo en dispositivos móviles. La primera muestra que se examinó fue una malla multicapa de alta polietileno : una capa con ~ 10k vértices, ~ 7k triángulos. Se agregaron 19 colisionadores de cápsulas al objeto en la forma de las partes del cuerpo del personaje. El resto de las configuraciones son predeterminadas.



El siguiente gráfico muestra la latencia de las métricas que se examinan en milisegundos, según la cantidad de instancias de objetos. El dispositivo probado es Xiaomi Mi5 (4 núcleos, 2,15 GHz, 3 GB de RAM).







Xiaomi Mi5 no es el dispositivo más débil, pero ya se ven graves pérdidas de rendimiento. En dispositivos menos potentes (Lenovo A536, Quad-core, 1.3 GHz, 1 GB de RAM), se vuelven desastrosos. A continuación, evaluaremos los resultados que demuestra el dispositivo más débil.







Una actualización de la física de tejidos por sí sola representa 775 ms de 800. Tratemos de excluir la influencia de los colisionadores.







Los cálculos de colisión de colisionadores reducen en gran medida el rendimiento; con 25 casos, un máximo de 475 colisionadores estaban presentes en la escena.



La siguiente medida es relativa a un modelo de una sola capa de baja poli (153 vértices, 256 triángulos) con menos instancias (hasta 9) y menos colisionadores (hasta 8).











Veamos qué impacto tienen los cálculos de colisionadores. Construyamos las dependencias correspondientes usando el ejemplo de una instancia de un objeto en diferentes dispositivos (además de los dispositivos ya usados, tomamos Asus ZenFone 5, Dual-core, 2 GHz, 1 GB de RAM).







Las funciones resultantes están bien aproximadas por una función polinomial de grado 2.



Se puede ver que la situación con objetos low poly es mucho mejor. En los dispositivos más antiguos, una instancia de un objeto tarda aproximadamente 1 ms en promedio (en comparación con ~ 3 ms para un modelo de alta poli, en igualdad de condiciones), lo cual es bastante bueno.



A continuación, veamos cómo los parámetros adicionales afectan el rendimiento .



En las pruebas, usamos una malla de una sola capa con un poco más de detalle que en la dimensión anterior (~ 450 vértices, ~ 800 triángulos). Se agregó 1 colisionador de cápsulas al componente Unity Cloth, se examinó 1 instancia del objeto, se variaron parámetros adicionales de colisiones internas y efectos del viento .











La simulación de viento adicional, como los cálculos de colisión interna, degrada el rendimiento.



Esto es especialmente notable en modelos más complejos. Analicemos el efecto de parámetros adicionales de rigidez (tensión, torsión) y atenuación en mallas con ~ 10,000 vértices y ~ 500 con colisionador de 1 cápsula.







A continuación se muestran los resultados obtenidos en el dispositivo más débil (Lenovo A536) con parámetros variables en cada una de las medidas.



1. Rigidez: estiramiento y torsión.

Baja poli: 1,67 ms Poliéster alto: 145,32 ms.



2. Rigidez: alargamiento - incl. / Curl - apagado.

Baja poli: 1,79 ms Poliéster alto: 160,44 ms.



3. Rigidez: Estirar. / Torcer - incl.

Baja poli: 1,90 ms. Poliéster alto: 172,19 ms.



4. Rigidez: estiramiento y torsión - incl.

Baja poli: 1,92 ms. Poliéster alto: 194,50 ms.



5. Rigidez: alargamiento - incl. / Curl - apagado. Influencia del viento - incl.

Baja poli: 1,69 ms. Poliéster alto: 165,73 ms.



6. Rigidez: alargamiento - incl. / Curl - apagado. Atenuación incl.

Baja poli: 1,69 ms. Poliéster alto: 172,75 ms.



7. Rigidez: alargamiento - incl. / Curl - apagado. Influencia del viento - incl. Atenuación - incl.

Baja poli: 1,76 ms. Alta poli: 173,10 ms



8. Rigidez: alargamiento - incl. / Curl - apagado. Colisiones internas - incl.

Baja poli: 2.01ms High-poly: Unity Crash



Los parámetros de simulación de viento, desvanecimiento, compresión, torsión e interacción interna agregan una carga adicional, degradando significativamente el rendimiento en dispositivos débiles cuando se utilizan mallas de alta poli. Las mallas con menos vértices tienen menos latencia.



  • La simulación de viento agrega ~ 9% de la latencia métrica total.
  • La simulación de desvanecimiento agrega ~ 12% del retraso métrico total.
  • La simulación de encogimiento / torsión agrega ~ 13-15% de la latencia métrica total.
  • ~ 12–16% ( . : ).


2.





Modelo de cgtrader.com



Hablemos un poco sobre las capacidades del componente Unity Cloth para trabajar con el cabello. A primera vista, esto no debería ser más difícil que con las telas de una sola capa: primero fije los vértices deseados y luego distribuya el grado de influencia de la simulación a los vértices restantes. Pero hay un problema: torceduras de objetos volumétricos como rizos. Para ver más claramente la razón de su aparición, tome como ilustración la red cristalina cúbica centrada en las caras de algún metal, por ejemplo, el cloruro de sodio.







Las torceduras se explican por el hecho de que los picos cercanos van más allá de los distantes (mostrados por la flecha). Las torceduras y torceduras no se pudieron evitar incluso con el uso de cálculos de interacciones de colisiones internas. Concluimos que Unity Cloth no es adecuado para cuerpos sólidos.







Configuración de simulación:



  • Params 1: 3 colisionadores, rigidez activada para tensión y torsión, viento y colisiones internas desactivadas, amortiguación;
  • Parámetros 2: 3 colisionadores, rigidez de tracción habilitada, viento y colisiones internas inhabilitadas, atenuación inhabilitada;
  • Colisionador de parámetros 3: 1, rigidez de tracción habilitada, viento y colisiones internas inhabilitadas, atenuación inhabilitada.


Los indicadores de rendimiento de los dos dispositivos débiles son comparables entre sí, Xiaomi da los mejores resultados.



En escenas concurridas, incluso los retrasos relativamente pequeños se vuelven significativos y, en el desarrollo móvil, estos números se multiplican, por lo que debe luchar por cada décima de milisegundo.



Resumen del componente Unity Cloth



  • Se adapta bien a objetos simples de una sola capa (banderas, capas, colchas y manteles).
  • .
  • .
  • . , : Graphics Settings .
  • - Unity ( Bug Story).




La simulación de tejidos simples de una sola capa creados con el módulo Unity Cloth es bastante realista. Sin embargo, debe usarse con precaución: la interacción con un gran número de colisionadores, así como el cálculo excesivo de simulación de viento, amortiguación, compresión, torsión, interacción interna, conducen a una degradación del rendimiento. En general, Unity Cloth requiere muchos recursos para su uso en dispositivos móviles, especialmente cuando se simulan telas y cabello en mallas de alta polietileno.



Si tiene la intención de utilizar Unity Cloth en plataformas móviles, preste atención a las siguientes recomendaciones:

  • Menos vértices significan un mejor rendimiento. Utilice mallas con el número mínimo de vértices que pueda manejar.
  • , .
  • , , , , .
  • , , .


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