Che cos'è esattamente un motore fisico?


57

Un programma dovrebbe prendere input, elaborarlo e dare output. Quindi cosa fa esattamente un motore fisico come input e come output?


36
Molte terminologie mettono in discussione le persone. Non è necessario sottovalutare le domande di base semplicemente perché sono di base.
MichaelHouse

16
La descrizione di un programma come qualcosa che "dovrebbe prendere input, elaborarlo e dare output" è un modo così assurdamente semplificato e riduzionista di pensarlo al punto da essere inutile. Pensa a come risponderesti alla domanda "Un programma dovrebbe prendere input, elaborarlo e dare output. Quindi cosa fa esattamente un gioco come input e fornire come output?", Potresti rispondere ma non è un modo utile di pensare a un gioco.
Jack Aidley,

10
@JackAidley Vedo il tuo punto, ma in realtà un gioco è molto simile: input: sequenze di tasti e movimenti del mouse / joystick, output: immagini divertenti sullo schermo e suoni divertenti dagli altoparlanti. È semplicistico, sì, ma aiuta a capire cosa sia un "gioco" dal punto di vista computazionale, e nella mia esperienza è anche un modo estremamente utile (ma ovviamente non l'unico modo) di pensare all'architettura del codice, alla progettazione degli asset, alla gestione dei progetti, ecc.
wl

Risposte:


58

Un motore fisico è responsabile della simulazione dei movimenti e della reazione degli oggetti come se fossero sotto i vincoli della fisica del mondo reale (o simile al mondo reale). Devo notare che di solito non è un programma autonomo ma piuttosto un componente di un programma più ampio e più interessante (come un gioco).

L'input di una simulazione fisica è generalmente una raccolta di oggetti ("corpi") con proprietà (come ad esempio se sono rigidi o morbidi, le loro masse, forme e così via) e la raccolta di forze che agiscono su quei corpi.

Sulla base di tale input, il motore simula le posizioni e gli orientamenti aggiornati dei corpi e li applica ("output"). In genere, quando gli oggetti si scontrano o si sovrappongono, ciò è incluso nell'output di una fase di simulazione sotto forma di callback a cui il codice client può agganciarsi per gestire la logica di gioco specifica relativa alla collisione.


6

L'ingresso è velocità, massa e tempo, l'uscita è nuove velocità. A volte la rotazione / il momento angolare è anche un input e un output.

Essenzialmente i motori fisici cercano di simulare gli effetti sia della gravità che delle collisioni. Per motori fisici migliori ciò significa che includono sia la deformazione permanente che temporanea degli oggetti, compresa la divisione di oggetti in più oggetti e il momento angolare degli oggetti. Idealmente, simulerebbero anche lo stress, ad esempio il numero di camion che possono attraversare quel ponte fino al collasso, ma è piuttosto raro. Ulteriori variabili di simulazione come la resistenza dell'aria contano anche come motore della fisica, ma per quanto ne so queste non sono ancora entrate in nessun gioco.

La maggior parte dei motori di fisica sono specializzati in una certa misura e simuleranno la fisica fino al punto necessario per il gioco. I motori fisici per i giochi di automobili sono spesso molto diversi dai motori fisici per i tiratori 3D. E il motore fisico di un gioco di golf potrebbe avere calcoli eccessivi delle interazioni della pallina da golf e delle singole foglie d'erba, mentre manca completamente la gestione delle collisioni ad alta velocità e la deformazione di un'auto (nel caso in cui venga colpita da una pallina da golf) .


1
Vorrei sottolineare che la resistenza all'aria è in realtà una caratteristica abbastanza comune dei motori fisici. Qualsiasi gioco che applica una velocità terminale agli oggetti che cadono sta modellando la resistenza dell'aria.
Patrick Roberts,

@PatrickRoberts Terminal Velocity non è esattamente quello a cui stavo pensando quando ho menzionato la resistenza dell'aria. Sarebbe come dire che Pong ha un motore fisico che modella gli impatti cinetici.
Peter,

12
beh per essere onesti, in senso lato lo fa. Modella le collisioni perfettamente elastiche in un ambiente senza peso. Capisco che i modelli possono essere semplicistici, ma è per questo che vengono chiamati modelli perché sono approssimazioni pratiche di fenomeni che sperimentiamo nella realtà.
Patrick Roberts,

4

In genere un motore fisico viene utilizzato per far sì che l'oggetto in un gioco si comporti in modo realistico rispetto al proprio ambiente senza dover progettare animazioni specifiche per ogni possibile scenario.

In particolare, un motore fisico prenderà un modello con un insieme di proprietà (massa, articolazioni ecc.) E lo renderà in gioco in base a un insieme di parametri.

Un primo esempio di ciò sono stati i motori raggdoll (ad esempio in Unreal) che modellavano il modo in cui i corpi inerti sarebbero caduti dai gradini, ecc.

Nella tecnologia attuale, i motori della fisica saranno spesso strettamente integrati in un pacchetto di progettazione del gioco globale insieme all'intelligenza artificiale, all'interfaccia utente in-game, alla generazione di filmati ecc.

Si potrebbe certamente sostenere che i motori della fisica risalgono agli albori della progettazione dei giochi, ad esempio il pong potrebbe essere considerato un motore di fisica grezza. Tuttavia, il punto principale è che un motore fisico è in grado di generare al volo punti di animazione basati su una serie di parametri piuttosto che usare solo sequenze di animazione predeterminate da motion capture o animazione manuale.

Come menzionato in altre risposte, in alcune classi o giochi come la guida o la simulazione di volo il motore fisico può essere fondamentale per il gioco e come tale sarà l'input principale che guida l'animazione sullo schermo. Sebbene in genere il termine sia utilizzato per uno strumento di uso generale che può essere applicato a una varietà di situazioni senza richiedere conoscenze o analisi molto specifiche del contesto in questione da parte dello sviluppatore, piuttosto che un simulatore molto specifico costruito da terra per un'applicazione specifica.


4

Un motore fisico è responsabile della simulazione del movimento degli oggetti nel "mondo" (qualunque cosa significhi nel contesto del motore). La maggior parte dei motori fisici oggi utilizza la meccanica newtoniana per fare ciò, poiché sono relativamente semplici da simulare e "abbastanza precisi" per la maggior parte degli scopi a meno che non si stia eseguendo una simulazione spaziale.

In teoria, un motore fisico "puro" richiederebbe tre input:

  • Lo stato del mondo (gli oggetti, le loro posizioni e le loro velocità) dall'ultimo "tick" (l'ultimo istante nel tempo che il motore ha dovuto modellare)
  • Quanto tempo è trascorso dall'ultimo tick
  • Un elenco delle forze che hanno agito su vari oggetti nel mondo dall'ultimo tick

Tenendo conto dell'inerzia e delle forze, il motore sposta gli oggetti. L'output del motore fisico è semplicemente il nuovo stato del "mondo" , che il gioco può quindi leggere e modificare secondo necessità.

In pratica, i motori fisici non sono necessariamente così "puri" . Gli oggetti devono essere creati e distrutti, e talvolta devono essere spostati in modi che le leggi del motore fisico non consentirebbero. Questo a volte può essere fatto al di fuori del motore, ma a volte è fatto all'interno, e per farlo, il motore ha bisogno di più input. Ma i tre input sopra indicati coprono le basi.

Ad esempio, supponiamo che tu abbia dovuto spostare un personaggio in un gioco usando un joystick. Se non stai usando un motore fisico, questo è piuttosto semplice: quando vedi che l'utente sta spostando il joystick, muovi l'oggetto di conseguenza. Con un motore fisico, non si sposta direttamente l'oggetto: si applica una forza ad esso, corrispondente alla direzione in cui si vuole spostare l'oggetto, e si lascia che il motore lo maneggi effettivamente spostandolo .

Qual è la differenza? Anche se non c'è nient'altro al mondo, è improbabile che l'oggetto si muova allo stesso modo, perché il motore fisico gestirà cose come un'accelerazione realistica. Ma è anche possibile che altre forze agiscano contemporaneamente sull'oggetto, così come l'inerzia, e il motore ne terrà conto tutte . Ad esempio, se si applica una forza verso nord sull'oggetto, ma qualcos'altro sta applicando una forza verso ovest (o l'oggetto si stava già spostando verso ovest e nulla lo sta rallentando), il motore sposta l'oggetto a nord-ovest.

Questo è ciò che ti dà un motore fisico: tiene traccia degli oggetti, delle loro posizioni e velocità e delle forze che agiscono su di essi. Grazie alle leggi della meccanica, può persino creare alcune forze da solo, per gestire automaticamente cose come collisioni, attriti e gravità, il tutto senza di te, lo sviluppatore del gioco, che deve fare qualcosa in più.


1

Un motore fisico è fondamentalmente un simulatore di corpi fisici.

Ingresso

Ti permette di creare un corpo (o più) specificando le sue proprietà fisiche come massa, dimensioni, densità, ecc ...

Consente inoltre di definire le proprietà del mondo fisico in cui si verifica la simulazione (ad es. Gravità).

Infine ti consente di applicare forze o creare articolazioni tra i corpi.

Produzione

Una volta definite tutte queste cose, puoi iniziare la simulazione e il motore fisico ti dirà dove ogni corpo verrà posizionato sul prossimo timestep (che di solito corrisponde al fotogramma successivo nel tuo gioco). E il prossimo, e così via ...

Vedi gli Sprite che si muovono sullo schermo perché ogni frame che il Game Engine richiede al Physics Engine

Dov'è questo corpo adesso?

e Game Engine aggiorna la rappresentazione grafica di conseguenza.

considerazioni

Di solito mi piace vedere il motore fisico come uno strumento per applicare le leggi della fisica in modo dichiarativo .

Infatti invece di scrivere il codice per descrivere quali calcoli dovrebbero essere eseguiti per determinare dove sarà un corpo nel prossimo timestep, descrivo semplicemente il mondo della fisica che imposta gli attributi dei corpi (e del mondo della fisica stessa) e lascio che il motore fisico risponda quella domanda per me.


La tua sezione "considerazioni" non è affatto chiara (per me). Se lo migliorate per essere più chiari e concreti / pratici (ad esempio, fornite esempi di sistema reali che avete osservato, costruito, ecc.), Allora vi darò un +1.
code_dredd,

@ray: grazie per il tuo suggerimento. Lo aggiusterò al più presto!
Luca Angeletti,

Assicurati di farmi un commento dopo aver finito e non affrettarti. Dovrebbe essere utile per gli altri in seguito.
code_dredd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.