Erin Catto, autor del proyecto Box2D, ha anunciado la creación de un nuevo motor de simulación de procesos físicos llamado Box3D. Este motor es un fork de Box2D, con una arquitectura idéntica, pero reformulado y ampliado para su uso en juegos en 3D. El código del proyecto está escrito en C y se distribuye bajo la licencia MIT. Se soportan compilaciones para Linux, Windows y macOS.
El motor Box3D fue creado durante el desarrollo del nuevo shooter en 3D de la estudio Kintsugiyama, The Legend of California, en el que participa Erin. En el juego se utiliza el motor Unreal Engine, pero a los desarrolladores no les satisfizo el motor físico Chaos incluido en el mismo. Surgieron problemas debido a la falta de consideración de los momentos de torsión giroscópicos (objetos finos giraban de manera poco natural durante demasiado tiempo), la detección de colisiones continua (comportamientos poco realistas de árboles que caen) y un bajo rendimiento al procesar cientos de miles de objetos.
Al principio, se planeaba resolver los problemas creando un fork del motor físico Jolt, pero luego, siguiendo el consejo del creador del motor Rubikon, involucrado en el juego Half-Life, se tomó como base una versión simplificada de Rubikon-Lite, que fue desarrollada como un proyecto personal. Esta versión fue reformulada utilizando el código y optimizaciones de Box2D para combinar las capacidades en 3D existentes con los desarrollos del motor Box2D. Como resultado, casi todas las API, estructuras de datos y algoritmos en Rubikon-Lite fueron reemplazados por código de Box2D, conservando solo los algoritmos de construcción de la envoltura convexa y de manejo de colisiones 3D de Rubikon-Lite. Se decidió publicar el motor resultante como un proyecto abierto separado, Box3D, con el conocimiento del autor de Rubikon-Lite y de la empresa Kintsugiyama.
Actualmente se ha publicado la primera versión de Box3D 0.1, que se marca como de calidad alfa. La funcionalidad planificada principal está implementada, pero se necesita trabajar en la documentación y en las pruebas. Además del juego The Legend of California, el nuevo motor ya está en uso en la plataforma de juegos s&box, en el motor de juegos abierto Esoterica y en el juego espacial multijugador Space Game, diseñado para 1000 jugadores.
Para juegos 3D en el nuevo motor se han añadido capacidades como el cálculo de colisiones con mallas poligonales y mapas de altura, utilizados en la generación de paisajes, lo que ha permitido implementar en el juego The Legend of California efectos realistas de caída de árboles sobre superficies voxel. Se añadió soporte para colisiones compuestas precalculadas (baked), compuestas de varias formas simples, lo que ha reducido significativamente el consumo de recursos al simular colisiones de un gran número de pequeños objetos estándar.
Entre las capacidades trasladadas a Box3D, que anteriormente estaban en Box2D:
- Detección continua de colisiones (tratamiento del movimiento del objeto como una trayectoria continua), filtrado de colisiones y generación de eventos al contacto de los objetos. Soporte para formas esféricas, cápsulas y contenedores para la detección de colisiones. Procesador de colisiones optimizado mediante instrucciones SIMD.
- Solver de Sub-stepping para aumentar la precisión de la simulación dividiendo las etapas de simulación en pasos más pequeños.
- Uso del método de coloración de grafos para el manejo de grandes grupos de objetos relacionados.
- Controlador de personajes encargado de gestionar el movimiento, las colisiones y la interacción del personaje con los objetos circundantes.
- Soporte para el trazado de rayos, trazado de formas y verificación de intersecciones al escanear el entorno. Sistema de sensores para detectar objetos en el espacio.
- Solver de Soft Step para calcular la física de cuerpos rígidos durante interacciones complejas.
- Soporte para congelar el estado de grupos de objetos inactivos o estáticos para ahorrar recursos.
- Soporte para diversas conexiones y tipos de vínculos entre objetos, incluyendo bisagras, muelles, motores, soldaduras y ruedas, con la capacidad de ajustar cada conexión de manera flexible. Cálculo de fuerzas de compresión y tensión con las que los objetos interactúan entre sí.
- Posibilidad de generar eventos al inicio de movimiento, detención o estabilización del objeto.
- Ganchos para procesamiento multihilo con un programador interno opcional.
- Uso de coordenadas tipo double, lo que permite crear mundos enormes.
- Determinismo multiplataforma que garantiza resultados idénticos en diferentes plataformas de hardware.
- Soporte para grabación y reproducción de simulaciones.
- API C y código C correspondiente al estándar C17.
En los planes futuros se menciona la expansión de las capacidades relacionadas con los movimientos de personajes, la mejora de los mecanismos para prevenir colisiones 'fantasma' (ghost collision), la introducción de optimizaciones y la mejora del procesamiento de conexiones (joint solver). En el repositorio, se propone permitir el envío de solicitudes de pull con cambios por parte de representantes de la comunidad después de la firma de un acuerdo de transferencia de derechos de propiedad sobre el código (CLA).


Fuente: opennet.ru
