Un programma dovrebbe prendere input, elaborarlo e dare output. Quindi cosa fa esattamente un motore fisico come input e come output?
Un programma dovrebbe prendere input, elaborarlo e dare output. Quindi cosa fa esattamente un motore fisico come input e come output?
Risposte:
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.
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) .
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.
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:
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ù.
Un motore fisico è fondamentalmente un simulatore di corpi fisici.
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.
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.
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.