2 pontos por GN⁺ 2025-07-27 | 2 comentários | Compartilhar no WhatsApp
  • Implementar veículos em jogos prioriza a experiência de jogo em vez de um motor físico realmente fiel
  • Cada jogo de corrida e simulador tem diferenças na forma de controlar o carro e no nível de imersão
  • A simulação de veículos é composta por três elementos: motor/câmbio, pneus e chassi
  • A modelagem dos pneus e o conceito de slip são a chave para reproduzir uma sensação de direção realista
  • O desenvolvedor precisa definir por conta própria o nível de simplificação e abstração adequado ao conceito do jogo

Por que veículos são especiais em jogos

Veículos dentro de jogos são usados como um elemento experiencial importante em vários gêneros
Tanto controles irreais quanto simulações de direção realistas conseguem transmitir a “sensação de dirigir”
Por exemplo, Mario Kart e Assetto Corsa buscam experiências fundamentalmente diferentes, mas a essência da programação de veículos é a mesma
Em vez de reproduzir com precisão as leis da física do mundo real, o foco está em como transmitir a sensação de direção que o usuário espera
O objetivo do desenvolvedor não é tanto a “simulação exata”, mas sim projetar a experiência pretendida

Tentativas iniciais e lições: AV Racer

No início do desenvolvimento de AV Racer, o veículo era movido com um modelo simples de mecânica newtoniana, mas isso não produzia a sensação de um carro real
Foram repetidos hardcodings e ajustes de parâmetros para rotação, drift, velocidade angular e outros aspectos
Isso criava uma sensação empírica de “deslizamento”, mas não atendia a situações extremas nem às expectativas de motoristas reais
Sem compreender a física real do veículo e a experiência do motorista, esbarra-se em limitações fundamentais
No fim, para implementar corretamente, tornou-se necessário estudar os princípios reais da dinâmica veicular

Estrutura da simulação de veículos para jogos

Um veículo em jogo pode ser dividido em três elementos conceituais: motor (e câmbio), rodas/pneus e chassi

Motor (incluindo o câmbio)

  • Recebe entradas como acelerador e troca de marchas
  • Calcula torque e RPM e os converte de acordo com a relação de marcha
  • Interage com as rodas por feedback mútuo (ou seja, sincronização bidirecional entre motor e rodas)

Pneus (incluindo as rodas)

  • Recebem várias entradas, como torque do motor, freio, esterçamento, peso e atrito com a pista
  • Todas as forças são geradas no ponto de contato pneu-solo
  • A modelagem dos pneus (por exemplo, Pacejka Magic Formula) permite reproduzir forças realistas

Chassi

  • Atua como o corpo rígido do motor físico
  • Reage a influências externas como força dos pneus, resistência do ar, gravidade e colisões
  • Determina o movimento geral do veículo e afeta a variação de carga nos pneus
Componente Principais entradas Principais saídas
Motor/câmbio Acelerador, entrada de troca de marcha, velocidade das rodas Torque rotacional, RPM
Pneus Torque do motor, freio, esterçamento, carga, atrito Forças no chassi, sincronização motor-roda
Chassi Forças dos pneus, resultados aerodinâmicos Carga nas rodas, deslocamento geral

Implementar com 100% de fidelidade todos os detalhes físicos, como em um veículo real, é irrealista
A menos que se trate de um laboratório de pesquisa de uma montadora, a maioria dos jogos e simulações usa modelos de caixa-preta, fórmulas e abordagens simplificadas
Por isso, o essencial é o projetista decidir o que omitir e o que enfatizar

Projeto do motor e do trem de força

Motor (o núcleo do cálculo de torque)

  • Embora na realidade seja extremamente complexo, em código ele pode ser modelado como uma simples caixa-preta de entrada (RPM, acelerador) → saída de torque
  • A curva de torque/potência pode ser parametrizada por valores numéricos ou gráficos, permitindo simular motores com características distintas
  • Exemplo: projetar diretamente a curva em ferramentas como o Desmos para ajustar a “personalidade do motor”

Câmbio

  • Pode ser implementado de forma simples com uma tabela de relações de marcha
  • A troca de marchas determina características de aceleração, velocidade máxima etc. do veículo
  • É simples, mas tem grande impacto na experiência de jogo
Marcha Relação
R -2.92
N 0
1 2.50
2 1.61
3 1.10
4 0.81
5 0.68

Sincronização de RPM entre motor e rodas

  • O RPM do motor e a velocidade angular das rodas motrizes são interligados
  • O cálculo numérico é feito por equações diferenciais com base na diferença entre essas duas variáveis de estado
  • A cada frame, implementa-se uma convergência gradual no estilo de “perseguir o valor-alvo” até que coincidam

Isso permite expandir tanto para um estilo arcade quanto para um estilo de simulador
Quando o jogador ajusta vários parâmetros do motor (por exemplo, perfil de comando, turbo etc.), isso pode ser ligado a mudanças no som ou na curva de potência
Mesmo sem imitar exatamente o movimento de um motor real, é possível transmitir clareza na relação de causa e efeito e fortalecer a experiência de interação

Modelo de pneus

O papel dos pneus

  • São a única parte do veículo que realmente entra em contato com a estrada
  • Todas as forças de aceleração, frenagem e contorno de curva são geradas na área de contato do pneu
  • A geração de forças gira em torno da deformação elástica e das características de atrito

Força longitudinal (aceleração/frenagem) e slip ratio

  • O pneu oferece aderência máxima em estado de atrito estático; ao ultrapassar o limite, passa para atrito dinâmico (slip)
  • O slip ratio é calculado pela diferença entre a velocidade de rotação da roda (tração/frenagem) e a velocidade de deslocamento no solo
    • slip ratio = (velocidade angular da roda - velocidade angular de rotação livre) / velocidade angular de rotação livre
  • Em geral, há slip quando a roda gira mais rápido que o solo durante a aceleração, ou mais devagar durante a frenagem
  • A variação da aderência em função do slip ratio pode ser desenhada como uma curva em gráfico
  • A aderência aumenta até certa faixa e, após o ponto máximo, cai bruscamente

Fórmulas de cálculo de força com slip ratio (Pacejka Magic Formula etc.)

  • Usa-se o slip ratio como entrada para fórmulas que produzem curvas complexas (seno/arctan parametrizados)
  • O cálculo precisa ser feito individualmente para cada pneu

Força lateral (contorno de curva) e slip angle

  • Durante a curva, a área de contato se deforma e surge o slip angle
    • slip angle = diferença angular entre a direção real de avanço do pneu e a direção para a qual a roda aponta
  • À medida que o slip angle aumenta, mais aderência é gerada gradualmente, mas ao passar do limite ocorre derrapagem
  • A relação entre slip angle e aderência também forma uma curva característica
  • Muitos parâmetros influenciam isso, como carga, atrito e mudanças dinâmicas

Fenômenos como understeer e oversteer

  • Understeer: quando o slip angle do eixo dianteiro é maior que o do traseiro, o carro gira menos do que o desejado
  • Oversteer: quando o slip angle traseiro fica maior, a traseira do carro escapa para fora
  • Com um modelo de pneus correto, essas características de dirigibilidade surgem naturalmente

Limitação mútua entre forças longitudinais/laterais (Friction Circle)

  • Quando o pneu usa força ao mesmo tempo para aceleração/frenagem e para fazer curva, o máximo disponível em cada direção passa a afetar a outra
  • Círculo de atrito (circle/ellipse): a soma dos dois vetores de força não pode ultrapassar um limite
    • (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
  • Exemplo: em frenagem forte com esterçamento acentuado, é fácil perder o controle
  • Como pneus reais têm comportamento curvo/não linear, é preciso ajustar os parâmetros aos dados reais

Implementação no código

  • Calcular separadamente, em cada pneu, as forças longitudinais e laterais
  • Somar os dois vetores e normalizá-los (scaling) para dentro de um círculo de atrito virtual
  • Ajustando os parâmetros dinamicamente, também é fácil experimentar mudanças sofisticadas na dirigibilidade

Integração ao motor físico do veículo completo

  • Agregar ao chassi as forças dos pneus + a saída da suspensão + influências externas (gravidade, drag etc.)
  • Atualizar aceleração/velocidade a cada frame com base nas leis do movimento de Newton

Elementos adicionais expansíveis

  • Geometria da suspensão: cambagem, caster etc.
  • Dinâmica avançada dos pneus: temperatura, desgaste, expansão, variação de carga etc.
  • Aerodinâmica: downforce, drag, spoiler com ajuste automático
  • Trem de força/diferencial, ABS, ESP, limite de esterçamento etc.
  • Se necessário, consultar livros como Race Car Vehicle Dynamics (Milliken), Mechanics of Pneumatic Tires (S.K. Clark)

Conclusão

Só com os modelos acima já é possível implementar a base de um veículo para jogos que se comporta de forma semelhante a um carro real
Detalhes adicionais podem ser expandidos conforme o objetivo e a necessidade do desenvolvimento
O essencial é a simplificação/abstração dos princípios básicos obtidos do mundo real e uma filosofia de design centrada na experiência de jogo
Se houver dúvidas, opiniões ou sugestões de correção, entre em contato

2 comentários

 
dogtree 2025-07-27

Li errado como 'programando veículos em veículos' e pensei: isso não é meio perigoso?

 
GN⁺ 2025-07-27
Comentários do Hacker News
  • O interessante é que, na prática, o motor é a parte com mais componentes em movimento, mas no código acaba sendo a parte mais simples de toda a simulação do carro. Isso porque o papel central do motor é ser uma calculadora de torque. Ele recebe várias entradas e produz apenas uma saída, o torque de rotação, quase como uma caixa-preta. Recomendo muito a série de vídeos do simulador de motores do AngeTheGreat. É impressionante ver como foi otimizado a ponto de rodar em tempo real e ainda produzir sons de motor realistas. Veja o vídeo do simulador de motor do AngeTheGreat

    • O jogo Automation tem um construtor/simulador de motores extremamente aprofundado. Fazer todo tipo de experimento com motores é realmente divertido, e a parte de simulação de som também adota alguns conceitos abordados nos vídeos do AngeTheGreat

    • Isso me lembra o exemplo clássico de animar um cubo no Houdini. Há algo muito divertido nas surpresas que surgem em uma simulação em tempo real de motor a combustão interna. Exemplo de animação de cubo no Houdini

    • Comecei a programar porque meu pai escrevia um simulador de motores em BASIC. Ele era engenheiro mecânico e queria comparar as curvas de torque de vários projetos de motor. Quando ele desenhava wireframes de pistões, do conjunto do virabrequim e do próprio virabrequim se movendo em quadros de menos de um segundo com os comandos CIRCLE e LINE, fiquei chocado ao perceber que era possível desenhar e animar algo no computador. É realmente impressionante que esta pessoa tenha feito algo parecido para criar sons melhores de carros de corrida

    • Motores de EV não são, na verdade, muito simples? Motores a combustão são caros e complexos porque usam pequenas explosões para gerar torque. Por isso fico pensando se a maioria dos carros nos jogos não se comporta como EVs, a menos que se simule um ICE com mais precisão

  • Fui responsável por toda a simulação de veículos em Army of Two. Este texto é uma boa introdução. Aplicar o modelo de pneus de Pacejka e diferenciais de transmissão ajudou muito. Além disso, é surpreendente como a simulação física de barras estabilizadoras e da suspensão é extremamente importante para criar uma dirigibilidade “divertida”. Sem isso, a condução fica escorregadia e pouco imersiva. Dá para sentir isso até no vídeo de demonstração. Se você não implementar barras estabilizadoras e suspensão, o carro capota com facilidade, e aí você acaba mexendo sem parar no deslizamento dos pneus ou nas configurações de atrito da superfície, o que na verdade piora a experiência de dirigir

    • Muito obrigado por essa informação! Eu não fazia ideia de que a barra estabilizadora era tão importante em um modelo básico. Vou estudar mais sobre isso e, se conseguir implementar bem, pretendo atualizar o texto

    • Recentemente apareceu um problema na suspensão do meu carro, então acabei experimentando na prática o que é uma “dirigibilidade sem graça”. Isso me fez concordar ainda mais com o comentário

  • Isso é muito parecido com o que eu mesmo percebi ao fazer o jogo Flightle. Eu estava criando um simulador de voo lateral para celular, mas o movimento do avião parecia esquisito demais, então, irritado, pensei: “o que há de tão difícil nisso?” e comecei a fazer eu mesmo. Ao estudar os princípios de voo, percebi como é importante o nível certo de abstração. Se for irreal demais, não fica divertido; se for realista demais, fica difícil equilibrar a jogabilidade. Link do Flightle

    • Já é tarde para editar o comentário, mas reuni minhas experiências em mais detalhe em um texto separado. Dê uma olhada em como fiz um simulador de voo com rolagem lateral. Depois, mudei o avião de um ponto para uma estrutura com duas asas ligadas por uma barra, e sofri bastante para ajustar isso de um jeito divertido. Alguém mais habilidoso talvez tivesse feito melhor

    • Gostei bastante do jogo. Para usuários de desktop, eu sugeriria permitir controlar os sliders com a roda de rolagem do mouse

  • Há algum tempo fiz um jogo para iOS que simula carros e drift. Era baseado em SpriteKit, mas pode ser implementado facilmente em qualquer engine 2D. A ideia básica é conectar as duas rodas dianteiras à carroceria retangular com juntas de pino e aplicar força nas rodas. O ângulo da força é calculado assim: x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) Também adicionei partículas de derrapagem. O drift foi implementado ajustando os valores de damping das rodas e da carroceria. App Drift Mania Infinite Car Racer

    • O jogo tem muita personalidade! Gostei de como ele começa na hora. As partículas de derrapagem são práticas. O visual também é bom. Mas, para mim, a dificuldade estava alta demais. Se tivesse algo como um “modo zen” em que bater na parede não reinicia, eu jogaria mais

    • O jogo é muito legal. A loja de apps é tão competitiva que conseguir 22 avaliações já é impressionante. Fiquei curioso para saber como você divulgou isso

    • “Este jogo oferece gráficos incríveis...” Esse humor autodepreciativo é muito fofo. Já estou baixando

  • Este texto foi sinceramente muito interessante. Só a parte sobre o modelo de pneus já vale várias releituras. Se a ideia é buscar diversão sem se preocupar com simulação ou realismo, nada supera o arcade Super Sprint dos anos 1980. Informações sobre o jogo Super Sprint

  • Vou colar aqui parte de alguns materiais de palestras relacionadas que eu tinha guardado nas minhas notas: Hamish Young, física de veículos e dinâmica de pneus em ‘Just Cause 4’ Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, física de veículos supercharged em ‘Skylanders’ Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, palestra sobre a ciência do off-road The Science of Off-Roading Jared Cone, a física de ‘Rocket League’ It IS Rocket Science! The Physics of 'Rocket League' Detailed

  • O texto em si é ótimo, mas a introdução me pareceu um pouco confusa. Diz que carros oferecem vários tipos de experiências irreais nos jogos, mas armas não, e isso me parece questionável. Na verdade, os jogos estão cheios de armas irreais. Além disso, o texto afirma que nossas expectativas sobre dirigir vêm mais da mídia e da cultura do que da experiência direta, mas isso não se aplica ainda mais às armas? Até o salto é tratado de formas muito diferentes nos jogos, e minhas expectativas sobre salto vêm muito mais da experiência real de já ter pulado

    • Parece que você não tem muita experiência fazendo FPS. Armas reais são diferentes da experiência nos jogos. Se fossem exatamente iguais às reais, seriam bem menos divertidas e mais frustrantes. Com jogos de corrida é a mesma coisa: para ficar divertido, é preciso distorcer a realidade na medida certa

    • Acho que esse tema não é sobre “realismo”, e sim sobre “verossimilhança”. O importante é criar uma experiência que o jogador considere crível. As armas nos jogos são diferentes das reais, mas priorizam a fantasia de parecerem poderosas e ameaçadoras. O salto também não tem base realista, mas é desenhado da forma que melhor serve ao objetivo do jogo. Já em áreas como carros, em que há fatos físicos e sistematização possível, busca-se uma representação mais realista, comparável até a simulações industriais. Por outro lado, movimento humano, sistemas econômicos, fluxo de combate e coisas do tipo são muito mais difíceis de abordar com esse grau de realismo, então costumam ser retratados de forma bem mais cartunesca. O designer de jogos precisa encontrar um compromisso adequado que combine com as expectativas do jogador e com os objetivos gerais do jogo. Perseguir apenas um realismo excessivamente detalhado e estragar a estrutura do todo é uma armadilha comum

    • O exemplo de FPS foi algo que me veio à cabeça às pressas no palco, mas pensando melhor percebi que não é um bom exemplo. Obrigado por apontar isso

  • Acho que faltaram elementos como colinas, rampas e suspensão. A Unreal Engine tem até uma demo de veículo bem simples, e também existem demos com modelos reais de suspensão

    • No fim da apresentação e do texto há um vídeo curto mostrando o estado atual do engine, e no vídeo há vários tipos de terreno, incluindo colinas e rampas. Na apresentação foi usada uma grade plana simples. A suspensão também foi implementada, mas como não é tanto um problema especial de carros e sim uma funcionalidade mais geral para suportar peso, ela não foi abordada em profundidade por questão de tempo e de fluxo da apresentação

    • Como o Wassim mencionou no Q&A, a suspensão é tratada automaticamente pelo motor de física, e o efeito dela se reflete na carga do pneu, influenciando naturalmente também as forças do pneu

  • Há uma boa palestra da GDC sobre a física dos veículos em Rocket League. Veja a palestra sobre a física de Rocket League. Para contextualizar, eu era do time, mas não trabalhava no cliente do jogo, e sim em outra parte

  • Ao ler este texto, lembrei de uma boa palestra sobre física de corrida. Veja Andre Marziali - Physics of Racing