O que exatamente é um mecanismo de física?


57

Um programa deve receber entrada, processá-lo e fornecer saída. Então, o que exatamente um mecanismo de física toma como entrada e fornece como saída?


36
Muita terminologia questiona as pessoas. Não é necessário diminuir o voto das perguntas básicas simplesmente porque elas são básicas.
Michaelhouse

16
A descrição de um programa como algo que "deve receber contribuições, processá-las e gerar resultados" é uma maneira tão absurdamente simplificada e reducionista de pensar sobre ele como inútil. Pense em como você responderia à pergunta "Um programa deve receber informações, processá-las e fornecer informações. Então, o que exatamente um jogo recebe como informações e fornece como informações?", Você poderia responder, mas não é uma maneira útil de pensar em um jogos.
Jack Aidley

10
@JackAidley Entendo seu ponto de vista, mas, na verdade, um jogo é muito parecido com isso: entrada: pressionamentos de teclas e movimentos do mouse / joystick, saída: imagens divertidas na tela e sons divertidos dos alto-falantes. É simplista, sim, mas ajuda a entender o que é um "jogo" computacionalmente e, na minha experiência, também é uma maneira extremamente útil (mas é claro que não é a única) de pensar sobre arquitetura de código, design de ativos, gerenciamento de projetos etc.
Wjl 11/09/16

Respostas:


58

Um mecanismo de física é responsável por simular os movimentos e a reação dos objetos como se estivessem sob as restrições da física do mundo real (ou semelhante ao mundo real). Devo observar que geralmente não é um programa independente, mas um componente de um programa maior e mais interessante (como um jogo).

A entrada para uma simulação de física geralmente é uma coleção de objetos ("corpos") com propriedades (como sejam rígidas ou moles, suas massas, formas etc.), bem como a coleção de forças que atuam sobre esses corpos.

Com base nessa entrada, o mecanismo simula posições e orientações atualizadas dos corpos e os aplica ("saídas"). Geralmente, quando os objetos colidem ou se sobrepõem, isso é incluído na saída de uma etapa de simulação na forma de um retorno de chamada no qual o código do cliente pode ser conectado para lidar com a lógica de jogo específica relevante para a colisão.


6

A entrada de velocidade, massa e tempo, a saída são novas velocidades. Às vezes, o momento de rotação / angular também é uma entrada e uma saída.

Essencialmente, os motores de física tentam simular os efeitos da gravidade e das colisões. Para melhores mecanismos de física, isso significa que eles incluem deformação permanente e temporária de objetos, incluindo a divisão de objetos em vários objetos e o momento angular dos objetos. Idealmente, eles também simulariam o estresse, por exemplo, quantos caminhões podem atravessar a ponte até que ela desmorone, mas isso é muito raro. Outras variáveis ​​de simulação, como a resistência do ar, também contariam como um mecanismo de física, mas até onde eu sei, elas ainda não entraram em nenhum jogo.

A maioria dos mecanismos de física é especializada em algum grau e simulará a física a um ponto necessário para o jogo. Os motores de física para jogos de carros geralmente são bem diferentes dos motores de física para atiradores em 3D. E o mecanismo de física de um jogo de golfe pode ter cálculos excessivos das interações da bola de golfe e das folhas individuais da grama, enquanto falta completamente o manuseio de colisões de alta velocidade e deformação de um carro (caso seja atingido por uma bola de golfe) .


11
Eu gostaria de salientar que a resistência do ar é realmente uma característica bastante comum dos motores de física. Qualquer jogo que aplique uma velocidade terminal a objetos em queda está modelando a resistência do ar.
Patrick Roberts

O @PatrickRoberts Terminal Velocity não é exatamente o que eu pensava quando mencionava a resistência do ar. Seria como dizer que Pong tem um mecanismo de física que modela impactos cinéticos.
Peter

12
bem, para ser justo, em um sentido amplo, ele faz. Ele modela colisões perfeitamente elásticas em um ambiente sem peso. Entendo que os modelos podem ser simplistas, mas é por isso que são chamados de modelos, porque são aproximações práticas dos fenômenos que experimentamos na realidade.
Patrick Roberts

4

Normalmente, um mecanismo de física é usado para fazer com que um objeto em um jogo se comporte de maneira realista em relação ao ambiente, sem precisar criar animações específicas para todos os cenários possíveis.

Especificamente, um mecanismo de física pega um modelo com um conjunto de propriedades (massa, juntas, etc.) e o torna no jogo de acordo com um conjunto de parâmetros.

Um exemplo inicial disso foram os motores raggdoll (por exemplo, na Unreal), que modelavam a maneira como corpos frágeis caíam degraus etc.

Na tecnologia atual, os mecanismos de física costumam ser intimamente integrados em um pacote geral de design de jogo, juntamente com a IA, a interface do usuário no jogo, a geração de cenas etc.

Você certamente poderia argumentar que os mecanismos de física remontam ao início do design de jogos, por exemplo, o pong pode ser considerado um mecanismo de física bruto. No entanto, o ponto principal é que um mecanismo de física é capaz de gerar pontos de animação em tempo real com base em um conjunto de parâmetros, em vez de apenas usar sequências de animação predeterminadas de captura de movimento ou animação manual.

Como mencionado em outras respostas, em algumas classes ou jogos, como condução ou simulação de vôo, o mecanismo de física pode ser fundamental para o jogo e, como tal, será a principal entrada para a animação na tela. Embora normalmente o termo seja usado para uma ferramenta de uso geral que possa ser aplicada a uma variedade de situações sem exigir conhecimento muito específico ou análise do contexto em questão por parte do desenvolvedor, em vez de um simulador muito específico construído a partir do solo para uma aplicação específica.


4

Um mecanismo de física é responsável por simular o movimento de objetos no "mundo" (o que isso significa no contexto do mecanismo). Atualmente, a maioria dos mecanismos de física usa a mecânica newtoniana para fazer isso, pois eles são relativamente simples de simular e "precisos o suficiente" para a maioria dos propósitos, a menos que você esteja fazendo um sim espacial.

Em teoria, um mecanismo físico "puro" precisaria de três entradas:

  • O estado do mundo (os objetos, suas posições e suas velocidades) a partir do último "tick" (o último instante no tempo em que o mecanismo teve que modelar)
  • Quanto tempo se passou desde o último tick
  • Uma lista das forças que atuam em vários objetos no mundo desde o último tick

Levando em consideração a inércia e as forças, o mecanismo move os objetos. A saída do mecanismo de física é simplesmente o novo estado do "mundo" , que o jogo pode ler e modificar conforme necessário.

Na prática, os mecanismos de física não são necessariamente tão "puros" . Os objetos precisam ser criados e destruídos, e às vezes precisam ser movidos de maneiras que as leis do mecanismo de física não permitiriam. Às vezes, isso pode ser feito fora do mecanismo, mas às vezes é feito dentro e, para fazer isso, o mecanismo precisa de mais entradas. Mas as três entradas mencionadas acima cobrem o básico.

Por exemplo, digamos que você precisava mover um personagem em um jogo usando um joystick. Se você não estiver usando um mecanismo de física, isso é bastante direto: quando você vê que o usuário está movendo o joystick, você move o objeto de acordo. Com um mecanismo de física, você não move o objeto diretamente: aplica-lhe uma força, correspondente à direção em que deseja que o objeto vá, e deixa o mecanismo manipular o movimento real .

Qual é a diferença? Mesmo que não haja mais nada no mundo, é improvável que o objeto se mova da mesma maneira, porque o mecanismo de física lidará com coisas como aceleração realista. Mas também é possível que outras forças possam estar atuando no objeto ao mesmo tempo, assim como inércia, e o mecanismo levará todas elas em consideração . Por exemplo, se você aplicar uma força para o norte no objeto, mas alguma outra coisa estiver aplicando uma força para o oeste (ou o objeto já estiver se movendo para o oeste e nada estiver diminuindo a velocidade), o mecanismo moverá o objeto para o noroeste.

É isso que um mecanismo de física recebe: ele mantém o controle de objetos, suas posições e velocidades e as forças que atuam sobre eles. Graças às leis da mecânica, ele pode até criar algumas forças por conta própria, para lidar automaticamente com coisas como colisões, fricção e gravidade, tudo sem você, o desenvolvedor do jogo, ter que fazer algo extra.


1

Um mecanismo de física é basicamente um simulador de corpos físicos.

Entrada

Ele permite que você crie um corpo (ou vários) especificando suas propriedades físicas, como massa, tamanho, densidade, etc.

Também permite definir as propriedades do mundo da física em que a simulação ocorre (por exemplo, gravidade).

Finalmente, permite aplicar forças ou criar articulações entre os corpos.

Resultado

Depois de definir todas essas coisas, você pode iniciar a simulação e o Mecanismo de Física informará onde cada corpo será colocado no próximo passo temporal (que geralmente corresponde ao próximo quadro do seu jogo). E o próximo, e assim por diante ...

Você vê os Sprites se movendo na tela, porque todo quadro que o Game Engine pede ao Physics Engine

Onde está esse corpo agora?

e o Game Engine atualiza a representação gráfica de acordo.

Considerações

Normalmente, gosto de ver o Physics Engine como uma ferramenta para aplicar as leis da física de maneira declarativa .

De fato, ao invés de escrever um código para descrever quais cálculos devem ser realizados para determinar onde um corpo estará no próximo passo temporal, eu simplesmente descrevo o mundo da física definindo os atributos dos corpos (e do próprio mundo da física) e deixo o mecanismo da física responder essa pergunta para mim.


Sua seção 'considerações' não é realmente clara (para mim). Se você melhorar isso para ser mais claro e concreto / prático (por exemplo, forneça exemplos reais de sistemas que você observou, construiu, etc.), então darei um +1.
code_dredd

@ray: Obrigado pela sua sugestão. Eu vou consertar o mais rápido possível!
Luca Angeletti 12/09

Certifique-se de me fazer um comentário depois de terminar e não se apresse. Deve ser útil para outros posteriormente.
code_dredd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.