Qu'est-ce qu'un moteur physique?

57

Un programme doit prendre en compte, le traiter et donner un résultat. Alors, qu'est-ce qu'un moteur physique prend en entrée et fournit en sortie?

utilisateur91119
la source
36
Beaucoup de questions de terminologie interrogent les gens. Pas besoin de baisser les questions de base simplement parce qu'elles sont basiques.
MichaelHouse
16
Décrire un programme comme quelque chose qui «devrait prendre en compte, le traiter et donner le résultat» est une façon de penser absurdement simplifiée et réductionniste au point de devenir inutile. Pensez comment vous répondriez à la question "Un programme doit prendre en compte, le traiter et donner le résultat. Alors, qu'est-ce qu'un jeu prend exactement comme entrée et comme sortie?", Vous pouvez y répondre, mais ce n'est pas une manière utile de penser à une Jeu.
Jack Aidley
10
@JackAidley Je comprends ce que vous voulez dire, mais en réalité, un jeu ressemble beaucoup à celui-ci: entrée: frappes au clavier & mouvements de la souris / du joystick, sortie: images amusantes à l'écran et sons divertissants des haut-parleurs. C'est simpliste, certes, mais cela aide à comprendre ce qu'est un "jeu", et d'après mon expérience, c'est aussi un moyen extrêmement utile (mais pas le seul moyen) de réfléchir à l'architecture de code, à la conception d'actifs, à la gestion de projet, etc.
WJL

Réponses:

58

Un moteur physique est chargé de simuler les mouvements et la réaction des objets comme s'ils étaient soumis aux contraintes de la physique réelle (ou similaire à la physique réelle). Je dois noter que ce n’est généralement pas un programme autonome, mais plutôt un élément d’un programme plus vaste et plus intéressant (comme un jeu).

La simulation physique est généralement alimentée par un ensemble d’objets ("corps") dotés de propriétés (rigides ou souples, de masses, de formes, etc.) ainsi que d’un ensemble de forces agissant sur ces corps.

Sur la base de cette entrée, le moteur simule des positions et des orientations mises à jour des corps et les applique ("sorties"). En général, lorsque des objets entrent en collision ou se chevauchent, cela est inclus dans la sortie d'une étape de simulation sous la forme d'un rappel auquel le code client peut se connecter pour gérer la logique de jeu spécifique liée à la collision.

Josh
la source
6

La vitesse en entrée, la masse et le temps, la sortie est la nouvelle vitesse. Parfois, la rotation / moment angulaire est aussi une entrée et une sortie.

Essentiellement, les moteurs Physics tentent de simuler les effets de la gravité et des collisions. Pour de meilleurs moteurs physiques, cela signifie qu’ils incluent à la fois des déformations permanentes et temporaires d’objets, notamment le fractionnement d’objets en plusieurs objets, ainsi que le moment cinétique des objets. Idéalement, ils simuleraient également le stress, par exemple le nombre de camions pouvant traverser ce pont jusqu'à son effondrement, mais c'est assez rare. D'autres variables de simulation, comme la résistance de l'air, compteraient également comme moteur physique, mais pour autant que je sache, elles ne sont pas encore entrées dans les jeux.

La plupart des moteurs de physique sont spécialisés dans une certaine mesure et simuleront la physique à un point nécessaire pour le jeu. Les moteurs physiques pour les jeux de voiture sont souvent très différents des moteurs physiques pour les tireurs 3D. Et le moteur physique d'un jeu de golf peut avoir des calculs excessifs des interactions de la balle de golf et des feuilles d'herbe individuelles, tout en manquant complètement le traitement des collisions à haute vitesse et de la déformation d'une voiture (au cas où elle serait frappée par une balle de golf) .

Peter
la source
1
J'aimerais souligner que la résistance de l'air est en fait une caractéristique assez commune des moteurs physiques. Tout jeu qui applique une vitesse limite à la chute d'objets modélise la résistance de l'air.
Patrick Roberts
@ PatrickRoberts Terminal Velocity n'est pas exactement ce à quoi je pensais lorsque je parle de résistance à l'air. Ce serait comme dire que Pong a un moteur physique modélisant les impacts cinétiques.
Peter
12
bien pour être juste, dans un sens vague, c'est le cas. Il modélise parfaitement les collisions élastiques dans un environnement sans poids. Je comprends que les modèles peuvent être simplistes, mais c’est pourquoi ils s’appellent modèles parce qu’ils sont des approximations pratiques des phénomènes que nous vivons dans la réalité.
Patrick Roberts
4

Généralement, un moteur physique est utilisé pour que les objets d'un jeu se comportent de manière réaliste par rapport à leur environnement, sans avoir à concevoir d'animations spécifiques pour chaque scénario possible.

En particulier, un moteur physique prendra un modèle avec un ensemble de propriétés (masse, articulations, etc.) et le restituera dans le jeu en fonction d'un ensemble de paramètres.

Les moteurs raggdoll (par exemple, dans Unreal) en ont été un exemple précoce, car ils modélisaient la façon dont les corps mous tombaient sur les marches, etc.

Dans la technologie actuelle, les moteurs physiques sont souvent étroitement intégrés dans un ensemble de jeu complet avec l'IA, l'interface utilisateur du jeu, la génération de cinématiques, etc.

Vous pourriez certainement affirmer que les moteurs physiques remontent à l'aube de la conception de jeux, par exemple que pong pourrait être considéré comme un moteur physique brut. Cependant, l’essentiel est qu’un moteur physique est capable de générer des points d’animation à la volée en fonction d’un ensemble de paramètres plutôt que de simplement utiliser des séquences d’animation prédéterminées à partir de la capture de mouvement ou de l’animation manuelle.

Comme mentionné dans d'autres réponses, dans certaines classes ou certains jeux tels que la simulation de conduite ou de vol, le moteur physique peut être fondamental pour le jeu et, en tant que tel, sera la principale entrée de l'animation à l'écran. Bien que le terme soit généralement utilisé pour désigner un outil polyvalent pouvant être appliqué à diverses situations sans nécessiter une connaissance ou une analyse très spécifique du contexte en question de la part du développeur, plutôt qu'un simulateur très spécifique construit à partir du sol. pour une application spécifique.

Chris Johns
la source
4

Un moteur physique est chargé de simuler le mouvement des objets dans "le monde" (peu importe ce que cela signifie dans le contexte du moteur). La plupart des moteurs physiques utilisent de nos jours la mécanique newtonienne, car ils sont relativement simples à simuler et "suffisamment précis" pour la plupart des applications, à moins que vous ne fassiez une simulation spatiale.

En théorie, un moteur physique "pur" aurait trois entrées:

  • L'état du monde (les objets, leurs positions et leurs vitesses) à la dernière "tick" (le dernier instant dans le temps que le moteur devait modéliser)
  • Combien de temps s'est écoulé depuis le dernier tick
  • Une liste des forces qui ont agi sur divers objets dans le monde depuis le dernier tick

En tenant compte de l'inertie et des forces, le moteur déplace les objets. La sortie du moteur physique est simplement le nouvel état du "monde" , que le jeu peut ensuite lire et modifier si nécessaire.

En pratique, les moteurs physiques ne sont pas nécessairement aussi "purs" . Les objets doivent être créés et détruits, et parfois ils doivent être déplacés d’une manière que les lois du moteur physique ne permettent pas. Cela peut parfois être fait à l'extérieur du moteur, mais parfois à l'intérieur, et pour ce faire, le moteur a besoin de plus d'entrées. Mais les trois entrées mentionnées ci-dessus couvrent les bases.

Par exemple, supposons que vous deviez déplacer un personnage dans un jeu à l'aide d'un joystick. Si vous n'utilisez pas de moteur physique, la procédure est assez simple: lorsque vous voyez que l'utilisateur déplace le joystick, vous déplacez l'objet en conséquence. Avec un moteur physique, vous ne déplacez pas directement l'objet: vous lui appliquez une force correspondant à la direction dans laquelle vous voulez que l'objet soit dirigé et vous laissez le moteur le déplacer .

Quelle est la différence? Même s'il n'y a rien d'autre dans le monde, il est peu probable que l'objet se déplace de la même manière, car le moteur physique gérera des choses comme une accélération réaliste. Mais il est également possible que d' autres forces agissent sur l'objet en même temps, de même que l'inertie, et le moteur les prendra en compte . Par exemple, si vous appliquez une force vers le nord sur l'objet, mais que quelque chose d'autre applique une force vers l'ouest (ou si l'objet se déplaçait déjà vers l'ouest et que rien ne ralentit sa progression), le moteur déplacera l'objet vers le nord-ouest.

C'est ce que vous procure un moteur physique: il garde la trace des objets, de leurs positions et de leurs vitesses, ainsi que des forces qui agissent sur eux. Grâce aux lois de la mécanique, il peut même créer certaines forces, gérer automatiquement des choses comme les collisions, les frictions et la gravité, le tout sans que vous, le développeur du jeu, ayez à faire autre chose.

Le Spooniest
la source
1

Un moteur physique est fondamentalement un simulateur de corps physiques.

Contribution

Il vous permet de créer un corps (ou plusieurs corps) en spécifiant ses propriétés physiques comme la masse, la taille, la densité, etc.

Cela vous permet également de définir les propriétés du monde de la physique où se déroule la simulation (par exemple, la gravité).

Enfin, il vous permet d'appliquer des forces ou de créer des articulations entre les corps.

Sortie

Une fois que vous avez défini toutes ces choses, vous pouvez lancer la simulation et le moteur physique vous indiquera où chaque corps sera placé lors du prochain pas de temps (qui correspond généralement à la prochaine image de votre jeu). Et le suivant, et ainsi de suite ...

Vous voyez les sprites se déplacer sur l'écran car chaque image du moteur de jeu demande au moteur physique

Où est ce corps maintenant?

et le moteur de jeu met à jour la représentation graphique en conséquence.

Considérations

J'aime généralement voir le moteur physique comme un outil permettant d'appliquer les lois de la physique de manière déclarative .

Enfait au lieu d’écrire du code décrivant les calculs à effectuer pour déterminer l’emplacement d’un corps lors de la prochaine étape, je décris simplement le monde de la physique qui définit les attributs des corps (et du monde de la physique elle-même) et laisse le moteur physique répondre cette question pour moi.

Luca Angeletti
la source
Votre section "considérations" n'est pas vraiment claire du tout (pour moi). Si vous améliorez cela pour qu'il soit plus clair et concret / pratique (par exemple, fournissez des exemples de systèmes réels que vous avez observés, construits, etc.), alors je vous donnerai un +1.
code_dredd
@ray: Merci pour votre suggestion. Je vais résoudre ce problème dès que possible!
Luca Angeletti
Assurez-vous de m'envoyer un commentaire une fois que vous avez terminé et ne vous précipitez pas. Cela devrait être utile pour les autres plus tard.
code_dredd