Simule robôs com mais realismo: O que há de novo em física para o Unity 2021.2 beta

O Unity 2021.2 beta contém melhorias de usabilidade nos recursos de física que permitem novos casos de uso, ao mesmo tempo em que proporcionam criação mais fácil e depuração mais rápida no campo da robótica.
O componente ArticulationBody está no centro da nossa simulação de robótica porque permite simular cadeias cinemáticas com alta precisão, o que é essencial para mãos robóticas, manipuladores, robótica móvel e muito mais. Ouvimos o feedback dos usuários e fizemos diversas alterações para melhorar o desempenho e a usabilidade.
As propriedades do componente ArticulationBody foram reorganizadas para melhor legibilidade. Agora, os parâmetros relacionados à massa estão em um bloco visual, seguidos pelos parâmetros relacionados às âncoras e, depois, aos acionamentos. Essas alterações foram retroportadas para o Unity 2021.1 e 2020.3.

O editor ArticulationBody agora usa as mesmas ferramentas de articulação que as articulações iterativas regulares. Isso garante uma experiência consistente em todo o Editor. Além disso, também é possível editar visualmente os limites e âncoras de todas as juntas.

As ferramentas de junta oferecem suporte a todos os tipos de junta do ArticulationBody, porque foram estendidas para permitir a edição da junta prismática, o que não estava disponível antes. Veja este tópico do fórum para mais informações ou para fornecer feedback.

ArticulationBody tem uma nova configuração que permite selecionar o modo de detecção de colisão. Todos os modos de detecção de colisão contínua são suportados, assim como no Rigidbody. Isso foi retroportado para 2021.1 e 2020.3, pois foi considerado essencial para certos casos de uso. Por exemplo, treinar um modelo de aprendizado de máquina para controlar um personagem humanoide para andar exigiu habilitar a detecção contínua de colisões nos pés, pois, de outra forma, nosso modelo foi capaz de aprender a usar o impulso de penetração vindo dos pés sobrepostos ao solo a seu favor: ele avançou muito mais rápido do que normalmente, e alguns padrões de voo também foram descobertos.
Variantes adicionais de ArticulationBody.AddForce foram adicionadas para corresponder àquelas em Rigidbody.AddForce. Aplique força, aceleração ou impulso diretamente. Isso facilita a migração de código pré-existente do Rigidbody para o ArticulationBody.
Melhoramos a clareza da documentação declarando explicitamente condições de contorno e casos especiais. Nesta versão, temos uma nova página para o componente ArticulationBody .
Com base no feedback do usuário, também incluímos unidades de medida para todas as propriedades voltadas para C# do componente ArticulationBody na documentação; veja mass, por exemplo.
Continuamos investindo para tornar os pipelines gerais relacionados à física mais fáceis de usar e para fornecer mais flexibilidade para acomodar vários padrões de uso. Acreditamos que isso possibilita simulações mais sofisticadas, impulsionadas pelo fato de os criadores agora poderem usar a funcionalidade extra para entender melhor seu campo e, assim, configurar a simulação para obter resultados mais precisos.
Dito isso, o Physics Debugger agora oferece suporte adequado aos prefabs — tanto no Modo de Isolamento quanto no Modo de Contexto. Agora, ele permite usar o princípio de design de dividir para conquistar em maior extensão, observando as propriedades dos pré-fabricados isoladamente, enquanto o resto da cena não é mostrado.

Camadas físicas são uma ferramenta essencial na otimização do desempenho do sistema de detecção de colisões. Frequentemente, e especialmente em cenas grandes com muitas camadas, é melhor desabilitar todas as colisões primeiro e habilitar apenas as necessárias depois. Para habilitar esse padrão de uso, novos botões foram adicionados para alternar a detecção de colisão entre todas as camadas nas configurações de física. Isso é útil em projetos maiores, onde muitas camadas estão presentes, mas onde você pode reduzir as interações a um subconjunto menor de combinações de camadas para melhorar o desempenho.

Métricas adicionais foram adicionadas ao Physics Profiler. Agora, há mais gráficos disponíveis e o painel textual exibe mais dados sobre a simulação atual. Entre as novas adições estão o número total de consultas de física, o número de corpos de articulação e o número de transformações sincronizadas no último quadro.

Um módulo de criação de perfil personalizado também pode ser criado para incluir apenas as métricas necessárias para um projeto específico.

Por fim, o uso de memória agora também está disponível como uma métrica.
As consultas em lote de física são uma maneira de aumentar o desempenho das consultas de física (como Raycasts, por exemplo) executando-as em todos os núcleos disponíveis, em vez de normalmente executá-las todas no thread principal exclusivamente.
O ideal é que o código que depende dos resultados de uma consulta em lote seja um trabalho em C# para maximizar o aumento de desempenho. Entretanto, o principal problema que impediu que isso acontecesse foi o fato de que o impacto do colisor foi relatado como um Componente Unity (RaycastHit.collider). Nenhum dos componentes do Unity está disponível fora do thread principal, o que limita bastante a adoção de consultas em lote.
Para resolver isso, o ID da instância do Collider que foi atingido agora é exposto. IDs de instância podem ser usados livremente fora do thread principal, então não deve haver mais problemas em encadear os trabalhos de consulta.
O modo de atrito de patch é o modo de simulação de atrito padrão no Unity. Certamente é um compromisso em direção a um desempenho mais alto do que à precisão da simulação, mas ainda pode ser ajustado para obter resultados razoáveis dentro de um orçamento computacional apertado.
Um novo modo de atrito de patch aprimorado agora está disponível nas configurações de física. Ele aborda o problema de que quando mais de uma âncora de atrito é gerada em um par de contato, as forças de atrito podem ser até duas vezes mais fortes do que o previsto pelos modelos analíticos.
Por exemplo, no gráfico a seguir, cubos com atrito dinâmico diferente estão deslizando sobre um plano. Os cubos vermelhos mostram as posições finais esperadas, conforme previsto teoricamente. Os cubos azuis usam atrito regular e parecem percorrer cerca da metade do caminho até o objetivo. Os cubos verdes usam o novo e melhorado atrito de patch e se aproximam muito mais dos valores esperados.

A nova API de modificação de contato já está disponível e estamos coletando feedback neste tópico do fórum. Ele permite a personalização da reação do mecanismo de física aos contatos. Para qualquer par de contato, é possível alterar os pontos de contato, limitar os impulsos aplicados pelo solucionador, ajustar as velocidades alvo e muito mais. Entre outros usos, ele permite fazer furos em qualquer colisor, criar contatos pegajosos e várias correias transportadoras movidas a física. No exemplo abaixo, a esfera cai através do plano porque ignora os pontos de contato com ele (pode ser sensível à área). À direita, um cubo está ricocheteando nos dois planos inclinados sem girar — porque a reação ao contato foi personalizada para excluir rotações.

Essas melhorias garantem que os usuários gerem resultados mais realistas de suas simulações no Unity. Muitas dessas melhorias foram feitas com base em sugestões ou feedback da nossa comunidade e convidamos você a participar da conversa. Para começar a usar robótica no Unity, confira alguns dos nossos exemplos e demonstrações no Unity Robotics Hub.