Obi v3 y Obi Cloth 3 para Unity: Novedades

Obi Cloth 3.0 ha sido publicada y queríamos hacer un resumen de novedades, cambios, y por qué ha tardado tanto en ser terminado.

Esta nueva versión ha sido casi reescrita desde cero, como también sucedió con 2.0. Debido a esto, no es compatible con las versiones 2.x, por lo que si estás usando una versión 2.x deberás reinicializar tus objetos de tela al actualizar a 3.0. Nuestros esfuerzos durante el desarrollo se han enfocado en el rendimiento, la usabilidad, y la versatilidad.

 

Rendimiento

3.x es entre 3 y 4 veces más rápido que 2.x y casi tan rápido como PhysX, al tiempo que proporciona una simulación de mayor calidad. Aquí están los números:

Obi 3.x utiliza un nuevo controlador de hilos basado en tareas que es capaz de exprimir al máximo los núcleos de tu CPU. Las piezas de tela se agrupan (o dividen) en trozos de un tamaño similar y son enviados al hilo correspondiente para su procesado, lo que resulta en una mejor distribución de carga entre los núcleos. Las secciones de código matemáticamente intensivas utilizan instrucciones SIMD cuando es posible.

La actualización de geometría tanto para mallas normales como mallas con animación esqueletal se produce ahora dentro de la librería C++ de Obi, lo que resulta en notables ganancias de rendimiento. El uso de memoria también se ha visto reducido. De unos 200kb reservados cada cuadro durante una escena de tamaño medio, hemos pasado a sólo 160 bytes.

La memoria se reserva de antemano cuando es posible. Por ejemplo, la tela rasgable reserva un bloque de memoria de un tamaño fijo, dependiente de su grado de destructibilidad, en lugar de reservar memoria adicional cada vez que una región se rasga. Esto da como resultado actualizaciones de geometría más rápidas y un coste en memoria totalmente predecible para cada objeto.

Si todo esto te suena a chino, pruébalo y observa la diferencia tú mismo :).

También hemos añadido un analizador de rendimiento en tiempo de ejecución, para que puedas ver qué está consumiendo más recursos y actuar en consecuencia. No es una novedad esencial a primera vista, pero creemos que ofrece información impagable a los usuarios más avanzados. En la siguiente captura puedes ver el aspecto del analizador: el tiempo discurre de izquierda a derecha, y cada fila representa tareas realizadas por un hilo en concreto.

Usabilidad

El editor de partículas se ha rediseñado para que sea más compacto y tenga una mejor distribución de las herramientas. Las herramientas llevan ahora un código de color para agruparlas por uso, y al dejar el ratón encima aparece una peque descripción de cada una:

Durante el modo edición, las partículas se dibujan sobre una versión del objeto con sombreado plano, lo que mejora la visibilidad. También, al pintar propiedades de los vértices, las partículas desaparecen y se dibuja una rampa de color para representar el valor de la propiedad en cada vértice.

Mantener la malla del MeshRenderer y la topología en sincronía ya no es responsabilidad del usuario. Cuando inicializas un objeto de tela, la malla a dibujar se obtiene automáticamente del asset de topología.  Esto hace de la inicialización un proceso más fácil y rápido.

Cuando se usa una malla animada con un SkinnedMeshRenderer, ya no es necesario cambiar el modo de actualización del componente Animator a “Update Physics” a mano. El ciclo de animación es completamente controlado por Obi, y la animación actualizada automáticamente cuando es necesario.

También hemos añadido un nuevo componente que permite coger la tela con el ratón  utilizando raycasts, ya que es un caso de uso muy común. Simplemente añade el componente ObiClothDragger a tu tela, y listo:

Versatilidad

Los PinConstraints pueden romperse en 3.0, y la resistencia a rotura es controlable independientemente para cada uno:

Los Proxies funcionan con mallas animadas esqueletalmente. Esto permite un rango de efectos y usos mucho mayor, incluyendo la simulación de mallas gruesas con cinturones, bolsillos, geometría inconexa, etc. (Si los proxies son nuevos para ti, sirven para deformar una malla de alta resolución según la simulación de una malla de baja resolución).

Un nuevo editor de enlazado de proxies ha sido integrado que te permite pintar influencias de una malla a otra sin salir de Unity, para controlar cómo se ajusta la malla deformable a la malla de simulación. Para casos sencillos en los que la malla entera se ajusta tal cual a la simulación, Obi puede prepararlo todo simplemente pulsando un botón.

La resistencia a rasgado se puede pintar partícula a partícula. Esto permite definir la manera en que la tela se rasgará, lo que resulta útil para un montón de efectos:

También se puede pintar la elasticidad de los SkinConstraints para cada partícula, y viene muy bien para pieles y carnes descolgadas:

  

En 3.0 el viento trabaja usando un sistema basado en zonas. Puedes especificar una dirección e intensidad ambiental, y añadir zonas esféricas de viento direccional o radial. Emparentar una zona de viento a unas aspas rotatorias puede resultar en un buen ventilador, por ejemplo:

Por último, hemos actualizado nuestro algoritmo de proyección de restricciones a XPBD. XPBD es una técnica reciente que mejora la dinámica basada en posiciones, desacoplando la rigidez de las restricciones del número de iteraciones y del tamaño del paso temporal. También reduce la viscosidad artificial. Todo esto se traduce en simulaciones más precisas y parámetros más fáciles de ajustar. En PBD normal, cuando estableces la rigidez de un material el resultado final no sólo depende de esto si no también del número de iteraciones y del paso temporal. Esto hace que ajustar los materiales en varias plataformas con distintas características de rendimiento sea una pesadilla. Sin embargo  XPBD garantiza la convergencia al mismo resultado, dada la misma rigidez y un número suficiente de iteraciones, lo que facilita mucho la vida.

Como bonus, XPBD también ofrece aproximaciones bastante precisas de la fuerza aplicada por cada restricción, lo que nos ha permitido mejorar otras características como el rasgado de la tela. Podéis echar un vistazo a este vídeo de los desarrolladores de esta técnica para una comparación más técnica entre PBD, XPBD, y un solver de referencia:

¿Por qué ha tardado tanto?

Hay varias razones que han hecho de esta actualización algo difícil:

  • La magnitud de los cambios. Diseñar, reescribir y probar tantas cosas es un proceso inherentemente lento.
  • Estamos preparando un sistema para reporte de bugs, sugerencias y feedback de usuarios. Queremos crear una comunidad de usuarios que puedan sugerir y votar nuevas ideas, y que esté claro dónde acudir cuando se necesite soporte o consejo. Hemos recibido muchos emails con preguntas e ideas similares sobre 2.x, y creemos que sería beneficioso para todos si todo este conocimiento pudiera ser compartido.
  • Queremos luchar contra la piratería hasta un punto razonable. Para ello estamos preparando un sistema de verificación de clientes. No nos importa dar soporte a todo el mundo, pero gastar recursos y tiempo en usuarios “pícaros” no es muy justo para aquellos que han pagado por él.
  • Hemos de crear nuevos vídeos promocionales y documentación para asegurarnos de que tienes suficiente información para conseguir lo que necesitas de Obi.
  • Asegurarnos de que la nueva arquitectura es lo suficientemente flexible para acomodar futuros cambios en 3.x sin comprometer la compatibilidad con versiones anteriores.
  • Pulir bugs, compilar y probar la librería en todas las plataformas soportadas (Windows, OS X, iOS y Android) lleva su tiempo…

Como usuarios sabemos lo frustrante que es poseer un software que se ajusta a casi todo lo que necesitamos, pero que carece justo de la única característica que es esencial para nuestro proyecto, y que no es trivial (o posible) añadir nosotros mismos. Por eso hemos puesto tanto esfuerzo en esta versión, y esperamos que cumpla vuestras expectativas.

 

 

¡Estad atentos para más noticias!

El equipo de VM

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *