Erin Catto, autor do projeto Box2D, anunciou a criação de um novo motor de simulação de processos físicos, o Box3D, que é um fork do Box2D, com arquitetura idêntica, mas reformulado e ampliado para uso em jogos tridimensionais. O código do projeto está escrito em C e é distribuído sob a licença MIT. Há suporte para compilações em Linux, Windows e macOS.
O motor Box3D foi criado durante o desenvolvimento do novo jogo de tiro em 3D, The Legend of California, no qual Erin está envolvido. O jogo utiliza o motor Unreal Engine, mas os desenvolvedores não ficaram satisfeitos com o motor físico padrão, Chaos. Problemas surgiram devido à falta de consideração para momentos de torção giroscópica (objetos finos giravam de forma não natural por muito tempo), detecção contínua de colisões (comportamento irrealista de árvores caindo) e baixa performance ao processar centenas de milhares de objetos.
Inicialmente, os problemas eram planejados para serem resolvidos criando um fork do motor físico Jolt, mas depois, a conselho do criador do motor Rubikon, envolvido no jogo Half-Life, decidiu-se pela utilização de uma versão simplificada do Rubikon-Lite, desenvolvida como um hobby, que foi reformulada, integrando código e otimizações do Box2D para combinar as capacidades existentes em 3D com as inovações do motor Box2D. Como resultado, quase todas as APIs, estruturas de dados e algoritmos do Rubikon-Lite foram substituídos pelo código do Box2D, restando apenas os algoritmos de construção de envoltórias convexas e processamento de colisões 3D do Rubikon-Lite. O motor resultante, com o conhecimento do autor do Rubikon-Lite e da empresa Kintsugiyama, foi decidido ser publicado como um projeto aberto separado, o Box3D.
Atualmente, foi lançado o primeiro lançamento do Box3D 0.1, que é classificado como tendo qualidade de versão alfa. A funcionalidade principal planejada foi implementada, mas há necessidade de melhorar a documentação e realizar testes. Além do jogo The Legend of California, o novo motor já está sendo utilizado na plataforma de jogos s&box, no motor de jogos aberto Esoterica e no jogo multiplayer Space Game, projetado para 1000 jogadores.
Para jogos 3D, o novo motor incorporou funcionalidades como o cálculo de colisões com malhas poligonais e mapas de altura utilizados na geração de terrenos, permitindo que o jogo The Legend of California implementasse efeitos realistas de queda de árvores em superfícies voxel. Foi adicionada a suporte para colisões compostas pré-calculadas (baked), compostas de várias formas simples, reduzindo significativamente o consumo de recursos durante a simulação de colisões de um grande número de pequenos objetos.
Entre as funcionalidades transferidas para o Box3D, anteriormente disponíveis no Box2D:
- Detecção contínua de colisões (processamento do movimento do objeto como uma trajetória contínua), filtragem de colisões e geração de eventos ao entrar em contato com objetos. Suporte a formas esféricas, capsulares e de concha para definição de colisões. Um processador de colisão otimizado com instruções SIMD.
- Solver de sub-divisão para aumentar a precisão da simulação, segmentando etapas de simulação em várias etapas menores.
- Uso do método de coloração de grafos para processar grandes grupos de objetos interconectados.
- Controlador de personagem responsável pelo processamento de movimento, colisões e interação do personagem com objetos ao redor.
- Suporte a ray tracing, rastreamento de formas e verificação de interseções ao escanear o ambiente. Sistema de sensores para detectar objetos no espaço.
- Solver de Soft Step para calcular a física de corpos rígidos em interações complexas.
- Suporte ao congelamento do estado de grupos de objetos inativos ou estáticos para economizar recursos.
- Suporte a vários tipos de conexões e ligações entre objetos, incluindo articulações, molas, motores, soldagem e rodas, com a possibilidade de configuração flexível de cada conexão. Cálculo de forças de compressão e alongamento que os objetos exercem uns sobre os outros.
- Capacidade de gerar eventos ao iniciar o movimento, parar ou estabilizar um objeto.
- Ganchos para processamento multithread com um planejador interno opcional.
- Uso de coordenadas do tipo double, permitindo a criação de mundos imensos.
- Determinismo multiplataforma que garante resultados idênticos em diferentes plataformas de hardware.
- Suporte à gravação e reprodução de simulações.
- API C e código C conforme o padrão C17.
Os planos futuros incluem a ampliação das capacidades relacionadas ao movimento de personagens, aprimoramento dos mecanismos de prevenção de 'colisões fantasma' (ghost collision), otimizações e melhorias no processamento de conexões (joint solver). O repositório pretende oferecer a possibilidade de envio de pull requests com alterações de membros da comunidade após a assinatura de um contrato de transferência de direitos de propriedade sobre o código (CLA).


Fonte: opennet.ru
