Simulando cabelos e tecidos com Unity Cloth no celular





Muitos designers, mais cedo ou mais tarde, enfrentam o desafio de atingir um comportamento realista de tecido ou cabelo. Existem várias tecnologias para isso, mas nem todas são adequadas para plataformas móveis. Normalmente, os desenvolvedores móveis fazem animações porque é o menos caro. Vamos falar sobre simulação em tempo real - o módulo Unity Cloth .







O Unity Cloth é um sistema baseado em simulação de física de tecido que funciona em conjunto com SkinnedMeshRenderer. Ele permite que você controle uma ampla gama de parâmetros, como rigidez à tração ou torção, amortecimento (a quantidade que é responsável pela rapidez com que o tecido chegará ao equilíbrio), simulação de vento, interação de colisões internas (autocolisão), fricção, gravidade, influência, etc. interação de coletores, etc.



Uma das equipes do estúdio Plarium de Krasnodar estudou a aplicabilidade do Unity Cloth para dispositivos móveis.



Parte 1. Simulação de tecido



Começamos com testes de estresse para avaliar os limites aceitáveis ​​para usar as configurações do módulo em dispositivos móveis. A primeira amostra a ser examinada foi uma malha multicamada de poli alta - uma capa com ~ 10k vértices, ~ 7k triângulos. 19 cápsulas de colisão foram adicionadas ao objeto na forma das partes do corpo do personagem. O resto das configurações são padrão.



O gráfico abaixo mostra a latência das métricas sendo examinadas em milissegundos, dependendo do número de instâncias do objeto. O dispositivo testado é o Xiaomi Mi5 (4 núcleos, 2,15 GHz, 3 GB de RAM).







Xiaomi Mi5 não é o dispositivo mais fraco, mas sérias perdas de desempenho já são visíveis nele. Em dispositivos menos potentes (Lenovo A536, Quad-core, 1,3 GHz, 1 GB de RAM), eles se tornam desastrosos. A seguir, avaliaremos os resultados que o dispositivo mais fraco demonstra.







Uma atualização da física do tecido sozinha é responsável por 775 ms de 800. Vamos tentar excluir a influência dos aceleradores.







Os cálculos de colisão do colisor reduzem significativamente o desempenho; com 25 instâncias, um máximo de 475 colisores estiveram presentes na cena.



A próxima medição é relativa a um modelo de camada única low-poly (153 vértices, 256 triângulos) com menos instâncias (até 9) e menos colisões (até 8).











Vamos ver o impacto dos cálculos do colisor. Vamos construir as dependências correspondentes usando o exemplo de uma instância de um objeto em diferentes dispositivos (além dos dispositivos já usados, pegamos Asus ZenFone 5, Dual-core, 2 GHz, 1 GB de RAM).







As funções resultantes são bem aproximadas por uma função polinomial de grau 2.



Pode-se ver que a situação com objetos de polígonos baixos é muito melhor. Nos dispositivos mais antigos, uma instância de um objeto leva cerca de 1 ms em média (contra ~ 3 ms para um modelo de polígonos altos, outras coisas sendo iguais), o que é muito bom.



A seguir, vamos ver como os parâmetros adicionais afetam o desempenho .



Nos testes, uma malha de camada única foi usada com um detalhe ligeiramente maior do que na dimensão anterior (~ 450 vértices, ~ 800 triângulos). 1 colisor de cápsula foi adicionado ao componente Unity Cloth, 1 instância do objeto foi examinada, parâmetros adicionais de colisões internas e efeitos do vento foram variados .











A simulação de vento adicional, como cálculos de colisão interna, degrada o desempenho.



Isso é especialmente perceptível em modelos mais complexos. Vamos analisar o efeito de parâmetros adicionais de rigidez (tensão, torção) e atenuação em malhas com ~ 10.000 vértices e ~ 500 com 1 colisor de cápsula.







Abaixo estão os resultados obtidos no dispositivo mais fraco (Lenovo A536) com parâmetros variados em cada uma das medições.



1. Rigidez: alongamento e torção.

Low-poly: 1,67ms Poli alto: 145,32 ms.



2. Rigidez: alongamento - incl. / Curl - desligado.

Low-poly: 1,79ms High-poly: 160,44ms



3. Rigidez: alongamento. / Torção - incl.

Low-poly: 1,90 ms High-poly: 172,19 ms.



4. Rigidez: alongamento e torção - incl.

Low-poly: 1,92ms Poli alto: 194,50 ms



5. Rigidez: alongamento - incl. / Curl - desligado. Influência do vento - incl.

Low-poly: 1,69 ms. Poli alto: 165,73ms.



6. Rigidez: alongamento - incl. / Curl - desligado. Atenuação incl.

Low-poly: 1,69 ms. Poli alto: 172,75 ms.



7. Rigidez: alongamento - incl. / Curl - desligado. Influência do vento - incl. Atenuação - incl.

Low-poly: 1,76ms Poli alto: 173,10 ms



8. Rigidez: alongamento - incl. / Curl - desligado. Colisões internas - incl.

Low-poly: 2,01ms. High-poly: Unity Crash



Os parâmetros de simulação de vento, fade, compressão, torção e interação interna adicionam uma carga adicional, degradando significativamente o desempenho em dispositivos fracos ao usar malhas de high poly. Malhas com menos vértices têm menos latência.



  • A simulação de vento adiciona ~ 9% da latência métrica total.
  • A simulação de desvanecimento adiciona ~ 12% do atraso métrico total.
  • A simulação de redução / torção adiciona ~ 13-15% da latência métrica total.
  • ~ 12–16% ( . : ).


2.





Modelo da cgtrader.com



Vamos falar um pouco sobre as capacidades do componente Unity Cloth para trabalhar com cabelos. À primeira vista, isso não deve ser mais difícil do que com tecidos de camada única - primeiro fixe os vértices desejados e depois distribua o grau de influência da simulação para os vértices restantes. Mas há um problema - torções de objetos volumétricos, como cachos. Para ver mais claramente a razão de sua ocorrência, pegue a estrutura de cristal cúbico centrado na face de algum metal, por exemplo, cloreto de sódio, como ilustração.







As torções são explicadas pelo fato de que os picos próximos vão além dos distantes (mostrados pela seta). Torções e torções não podiam ser evitadas nem mesmo com o uso de cálculos de interações de colisões internas. Concluímos que o tecido da unidade não é adequado para corpos sólidos.







Configurações de simulação:



  • Params 1: 3 colisões, rigidez ligada para tensão e torção, vento e colisões internas desligadas, amortecimento desligado;
  • Params 2: 3 colisores, rigidez à tração habilitada, vento e colisões internas desabilitadas, atenuação desabilitada;
  • Params 3: 1 colisor, rigidez à tração habilitada, vento e colisões internas desabilitadas, atenuação desabilitada.


Os indicadores de desempenho dos dois dispositivos fracos são comparáveis ​​entre si, a Xiaomi dá os melhores resultados.



Em cenas movimentadas, mesmo atrasos relativamente pequenos se tornam significativos, e no desenvolvimento móvel esses números se multiplicam, então você tem que lutar por cada décimo de milissegundo.



Resumo do componente Unity Cloth



  • Ele lida bem com objetos simples de camada única (bandeiras, capas, colchas e toalhas de mesa).
  • .
  • .
  • . , : Graphics Settings .
  • - Unity ( Bug Story).




A simulação de tecidos de camada única simples criados com o módulo Unity Cloth é bastante realista. No entanto, deve ser usado com cautela: interagir com um grande número de aceleradores, bem como computação excessiva de simulação de vento, amortecimento, compressão, torção, interação interna, leva à degradação do desempenho. Em geral, o Unity Cloth consome muitos recursos para uso em dispositivos móveis, especialmente ao simular tecidos e cabelos em malhas de poliéster.



Se você pretende usar o Unity Cloth em plataformas móveis, preste atenção às seguintes recomendações:

  • Menos vértices significam melhor desempenho. Use malhas com o número mínimo de vértices que você pode manipular.
  • , .
  • , , , , .
  • , , .


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