Análisis de NVIDIA PhysX

Análisis de NVIDIA PhysX

por

Agarramos los controladores de PhysX para tarjetas gráficas NVIDIA y salimos de paseo. Un análisis que cubre desde lo más básico - como hacer funcionar PhysX en tu tarjeta - hasta pruebas de rendimiento.

PhysX, esta es una palabra a la cual fuimos introducidos la gran mayoría de nosotros desde el 2005 cuando AGEIA hizo su primer anuncio para el público en general sobre su apuesta tecnológica. Por medio de un API llamado en esa época NovodeX y un chip especializado llamado PhysX, esta naciente empresa de Mountain View, California pensaba revolucionar la forma como las personas interactuaban con los juegos por medio de la simulación de propiedades físicas en ellos.

Hace algunos años cuando trabajaba en un sitio vecino, me interesé por esta tecnología y logre tener acceso a la documentación que explicaba lo que quería hacer esta empresa. Esto es parte de lo que escribí en ese momento:

Historia que llevó a la existencia de PhysX

Physics Processing Unit (Unidad de Procesamiento de Física) por sus siglas en ingles, es la revolución que promete AGEIA encarnado en su nuevo producto: el chip PhysX. Esta revolución se basa en un procesador que libera al CPU de la creación y modelación de efectos de física de la misma manera como el GPU lo hizo con los ambientes en tres dimensiones.

¿Por qué un PPU? En nuestra memoria reciente, nos hemos asombrado con el realismo alcanzado por motores de física como Havok empleado en Max Payne y hemos disfrutado del motor de física de Half-Life 2 en especial cuando tenemos a mano la pistola de gravedad. Aun cuando los modelos empleados en estos juegos han mejorado la experiencia, el nivel de complejidad de los efectos es limitado.

Adicionalmente, los consumidores cada vez exigen juegos más reales debido a que sus estándares suben con cada innovación Por una parte, en un juego el CPU debe dedicarse entre otras tareas, a la inteligencia artificial, lógica del juego y el sistema de puntuación e inventario entre otros. Según AGEIA, dado que el CPU tiene que realizar varias tareas, se estima que se emplea solo un sexto de este para cálculos de física. Por otra, los procesadores de alto desempeño en la actualidad soportan entre 30 y 40 “cuerpos activos” por escena (aquellos que se pueden manipular o destruir como el caso de barriles de petróleo). Esto hace que hasta el día de hoy, la interacción con los mundos virtuales de los juegos más avanzados sea muy limitada. ¿Cuántas veces, teniendo un arma -que en la vida real destruiría todo a su paso- y han querido destruir una pared para descubrir lo que hay en el otro lado, para luego darse cuenta que la pared es indestructible? Esta es solo una de las muchas limitaciones de los juegos que disminuyen su realismo.

A continuación, mostraremos una suerte de manual reducido de los beneficios que ofrece tener una implementación adecuada de un motor de física:

  • Propiedades de Materiales: La densidad, fricción y rebote de elementos en un juego. Se puede tomar como ejemplo la diferencia de rebote entre una pelota de tenis y una fútbol.
  • Dinámica de Cuerpos Rígidos y Detección de Colisión: Otorgan movimiento real a los objetos en un juego basado en las leyes de física que se implementen (Newtoniana y otras). Un caso común de una mala aplicación de esta técnica, es cuando un jugador “atraviesa” otro objeto.
  • Uniones y Resortes: Son herramientas para modelar mecanismos complejos como vehículos articulados o movimientos fluidos del cuerpo humano y la posibilidad de interactuar y manipular objetos en el mundo.
  • Fluidos: Técnicas para hacer que el fluido tenga características volumétricas especificas dependiendo del tipo de liquido (aceite, agua, lava, etc.)
  • Sistemas de Partículas Inteligentes: Una característica del humo es que si uno pasa por el, altera su flujo, por lo tanto la idea de este sistema es que las partículas interactúen con los objetos en movimiento o incluso con las características del ambiente, como la dirección del viento.
  • Telas: Para emplearlo, por ejemplo en abrigos y faldas que tengan un movimiento real. Un ejemplo de cómo puede mejorar la experiencia en un juego según AGEIA, es el caso de ver a un ladrón corriendo y por el movimiento de su vestimenta, ver algún objeto de suma importancia que él se está llevando.

En la actualidad, los efectos más comunes que se encuentran en los motores de física son el de cuerpos rígidos y detección de colisión, al igual que los efectos “rag doll”. Este es el efecto más común y se puede apreciar cuando un personaje cae al morir en un combate (piensen en la escena de Battle of Proxycon de 3DMark 2003). Esto, sumado a las limitaciones naturales de los CPUs, los cuales no están optimizados para cantidades considerables de cálculos en paralelo (similar limitación a la que tienen ellos para calcular gráficas en 3D), hace que aun cuando se empleen CPUs de cuatro núcleos, el procesamiento de cálculos físicos sea muy limitado.

La idea entonces del PPU PhysX P1 era acelerar el procesamiento de las instrucciones físicas que recibía del API NovodeX (actualmente llamado PhysX también). Sin embargo, la flexibilidad de su API permitía que las instrucciones no fueran solamente ejecutadas por el P1, sino también los CPUs de computadores y consolas, por lo que con el tiempo pudimos disfrutar de forma muy limitada del API PhysX en juegos tales como Unreal Tournament 3, lo anterior queda representado en el gráfico que AGEIA ponía en las presentaciones de la época: