Ampliando la caja de herramientas de la robótica: Cambios en la física en Unity 2022.1

ANTHONY YAKOVLEV / UNITY TECHNOLOGIESContributor
May 12, 2022|6 minutos
Ampliando la caja de herramientas de la robótica: Cambios en la física en Unity 2022.1
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.
Vagón renderizado en 3D en la interfaz de usuario de Unity
Ampliando la caja de herramientas de la robótica: Cambios en la física en Unity 2022.1

Simule robots sofisticados y conscientes del entorno con las nuevas herramientas de sensores de fuerza de dinámica inversa. Explora la dinámica con el depurador de física completamente renovado. Aproveche las mejoras de rendimiento en interpolación, consultas por lotes y más.

Mejoras en el depurador de física

El depurador de física es una herramienta esencial para comprender el funcionamiento interno del motor de física, así como para dar sentido al comportamiento particular observado en un proyecto. Un buen depurador es una herramienta fundamental para crear física convincente, moderna y rica. Con eso en mente, rediseñamos completamente la interfaz de usuario (UI) y agregamos algunas características interesantes.

Para incluir más información en el mismo espacio, agrupamos las propiedades en pestañas y luego las expandimos con las propiedades recién agregadas.

Menú de la interfaz de usuario de Unity

Antes, los componentes Rigidbody y ArticulationBody tenían una sección “Información” plegable en el Inspector que se podía expandir para ver información adicional, como la velocidad lineal actual. Sin embargo, una vez ampliado, el rendimiento general del Editor se degradó significativamente. Además, antes era complicado comparar parámetros de diferentes cuerpos, ya que era necesario abrir dos paneles del Inspector. Para solucionar estos problemas, trasladamos todas las propiedades a la pestaña “Información” de la ventana del Depurador de Física, donde se muestran las propiedades de cada uno de los objetos seleccionados, para que pueda compararlos fácilmente uno al lado del otro.

Opciones del menú de la interfaz de usuario de Unity

Ahora se pueden visualizar los puntos de contacto, junto con la normal de contacto y la distancia de separación.

Interfaz de usuario de Unity con un cuadro rojo y flechas de manipulación que apuntan hacia abajo

Las consultas de física, como Physics.Raycast o Physics.CastSphere, normalmente son parte de algún comportamiento de física personalizado, como controladores de personajes personalizados o controladores de vehículos. Son invisibles y difíciles de depurar. Para ayudar con eso, esta versión ofrece visualización opcional de las consultas de física.

Interfaz de usuario de Unity con formas que se mueven
Dinámica inversa

Hasta ahora, Unity contaba con herramientas que sólo soportaban lo que se llama dinámica hacia adelante: dado un conjunto de objetos y las fuerzas aplicadas a ellos, calcular sus trayectorias. Si bien esto es increíblemente útil, queríamos ampliar nuestra caja de herramientas robótica. Entonces, Unity 2022.1 agrega soporte para dinámica inversa: dado un objeto y una trayectoria deseada, calcula las fuerzas que causan esa trayectoria cuando se simula.

Este esfuerzo abarcará múltiples versiones a medida que lo construimos de forma iterativa. En Unity 2022.1, exponemos un conjunto de funciones para calcular los componentes de la fuerza total actual aplicada a los ArticulationBodies que deben contrarrestarse antes de aplicar la fuerza externa para impulsarlos a lo largo de la trayectoria deseada. En versiones posteriores se expondrán otros conceptos interesantes, como la fuerza conjunta necesaria para contrarrestar el impulso aplicado por el solucionador. Te invitamos a que pruebes esto y nos cuentes lo que piensas en el foro.

En concreto, las nuevas funciones son:

  • Obtenga la fuerza actual aplicada al cuerpo por el variador. Es una indicación de qué tan duro está intentando una unidad alcanzar el objetivo de unidad deseado. Depende de la rigidez y la amortiguación de la unidad, así como de la posición delta objetivo actual y de la velocidad delta objetivo;
  • obtener las fuerzas conjuntas necesarias para contrarrestar las fuerzas de gravedad, Coriolis y centrífugas que actúan sobre el cuerpo; y
  • Obtener la fuerza conjunta necesaria para alcanzar la aceleración deseada.
Interfaz de usuario de Unity que manipula dos personajes
<p>Interpolación y extrapolación</p>

Rigidbody utiliza tanto la interpolación como la extrapolación para dar una impresión de movimiento suave mientras simula a una frecuencia comparativamente baja. Internamente, esto se implementa calculando las poses de transformación en cada actualización. En el caso de la interpolación, las dos últimas poses simuladas se utilizan para calcular una nueva pose de transformación para este cuadro. En el caso de la extrapolación, se utilizan la última pose y velocidad simuladas. Sin embargo, dado que está diseñado para ser liviano, no comunicamos estas poses al motor de física. Las poses solo se presentan a los sistemas fuera de la física (por ejemplo, gráficos y animación). Debido a esto, por ejemplo, un raycast no detectará un cuerpo en la pose interpolada.

Para evitar que la física note los cambios de transformación, el mecanismo fue tener una llamada Physics.SyncTransforms() en cada actualización justo antes de escribir la pose, seguida de una llamada al método interno para borrar todas las actualizaciones de transformación para la física. Esto causó dos clases de problemas:

Si una escena tiene al menos un cuerpo interpolado, todos los cambios de transformación de todos los componentes físicos se sincronizaron con el motor de física en cada actualización (aunque en su mayoría se necesitan una vez por FixedUpdate); y

Si se realizó un cambio en una transformación que tenía un componente Rigidbody con interpolación, la interpolación para este objeto se interrumpió porque el cambio de transformación realizado por el usuario se propagó al motor de física y efectivamente cambió la última pose simulada (la pose no se almacena por separado; es solo la pose que el motor de física usa actualmente).

Para solucionar estos problemas, actualizamos el código de interpolación para que no necesite sincronizar todas las transformaciones para cada cuadro. Este cambio también mejora el rendimiento; el nuevo código de interpolación se ejecuta más rápido que antes (dependiendo de la complejidad de la escena).

<p>Cómo abordar los comentarios en los foros</p>

Una sección del foro está dedicada a discutir varias vistas previas experimentales de tecnología de física, y algunos de los cambios implementados en esta versión se originaron allí:

  • Muchos proyectos, especialmente los más grandes, suelen utilizar muchas capas de GameObject, por lo que la matriz que describe las combinaciones de capas y produce pares de contactos para la física también se vuelve bastante grande. En esta versión, resaltamos la fila y la columna seleccionadas actualmente para que sea más fácil de usar.
imagen de la cuadrícula siendo seleccionada
  • Una articulación se utiliza para unir dos cuerpos rígidos y define las restricciones sobre su movimiento relativo. A partir de Unity 2020.2, también se puede usar una articulación para vincular un Rigidbody a un ArticulationBody. Para que esto sea posible, cada clase conjunta recibió una propiedad adicional que se muestra en el Inspector. Es imposible vincular Rigidbody y ArticulationBody al mismo tiempo, por lo que mostrar ambas opciones cuando ya se ha configurado una ocupa espacio vertical sin ningún motivo. Ahora, solo se muestra la propiedad que se configuró.
Elementos en la barra de menú que se están seleccionando
  • Un cuerpo rígido cinemático es un tipo especial de cuerpo que puede influir en otros cuerpos, sin dejar que nada más lo afecte. En ese sentido, es análogo a un colisionador estático, con la excepción de que está diseñado para moverse con frecuencia. Los casos de uso típicos son controladores de personajes, física impulsada por animación, simulación de muñecas en realidad virtual (RV), etc. Se controla estableciendo un objetivo cinemático que el cuerpo alcanzará en solo un cuadro de simulación. La principal diferencia con el colisionador estático aquí es que el objetivo cinemático no se alcanza mediante teletransportación instantánea (cambio de pose), sino calculando las velocidades lineales y angulares necesarias para alcanzar el objetivo en un cuadro y pasándolas al solucionador después. De esta manera, el movimiento puede contribuir a la restricción de las matrices jacobianas correctamente y, por lo tanto, cualquier cadena de unión adjunta reaccionará adecuadamente (sin fallos). En esta versión de Unity, exponemos un nuevo método para establecer tanto la posición como la rotación del objetivo cinemático en una sola operación.
  • La modificación de contacto, introducida en Unity 2021.2, permite cambiar los detalles del punto de contacto generados por la fase estrecha, justo antes de que se utilicen para crear restricciones de contacto para el solucionador. En esta versión, agregamos nuevos captadores de velocidades corporales en un par de contacto, para casos de uso avanzados como este ejemplo de fricción anisotrópica personalizada.
  • La versión de PhysX se actualizó a 4.1.2, la última en la línea 4.x hasta la fecha. Es una versión menor, por lo que solo soluciona errores y fallas críticas. Las notas de la versión están disponibles aquí.
  • Cuando un cuerpo dinámico se superpone a un colisionador, el solucionador intenta encontrar un impulso correctivo que los separe mientras satisface todas las restricciones. Internamente, este impulso se calcula para cada punto de contacto en un par, pero solo teníamos un valor agregado que devolvía una suma total de todos los puntos. Con esta versión, exponemos una nueva propiedad de la estructura ContactPoint que permite recuperar impulsos para cada punto de contacto.
  • Estamos observando de cerca los comentarios sobre el componente ArticulationBody que llegan de la comunidad robótica. Para facilitar la creación y el ajuste del comportamiento de algunas partes de robot más pequeñas, anclamos los controladores de límite de articulación en el espacio de la pantalla para que ya no ocluyan los colisionadores en la escena.
Ampliar el objeto de Unity
  • Las consultas por lotes de física fueron el resultado de una semana de hacking de Unity y se enviaron directamente para habilitar ciertos casos de uso, pero con una funcionalidad mínima. Continúan evolucionando, con nuevas funcionalidades que permiten aún más casos de uso, como aquellos con patrones de subprocesos más sofisticados, y los tipos de consultas son más diversos. En esta versión en particular, permitimos que las consultas por lotes se ejecuten en cualquier escena de física y agregamos un nuevo tipo de consulta por lotes (Physics.ClosestPointCommand).
  • Para que una malla se pueda utilizar con MeshCollider, primero debe hornearse. El horneado es un proceso costoso para producir las estructuras de búsqueda espacial necesarias para la detección de colisiones. Normalmente, esto sucede implícitamente cada vez que se cambia la propiedad de malla de un MeshCollider, y se ejecuta en el hilo principal, bloqueando cualquier trabajo posterior hasta que se complete. En Unity 2019.3, expusimos un método seguro para subprocesos para ejecutar el bake off del subproceso principal a pedido. La intención era permitir mallas generadas por procedimientos más sofisticadas, ya que ahora se podía convertir en un trabajo la generación de contenido y el horneado de mallas, obteniendo una utilización de subprocesos mucho mayor. Sin embargo, una desventaja particular de esta función era que sólo admitía hornear con las opciones de cocciónpredeterminadas. En esta versión, lo corregimos exponiendo una nueva variante de Physics.BakeMesh que admite la cocción con cualquier opción de cocción.

¡Estamos ansiosos por ver lo que creas con las nuevas API de dinámica inversa y el depurador de física renovado! Descargue la última versión de Unity 2022.1 hoy y únase a la conversación en el foro de robótica y el foro de vistas previas de física.