Consigli necessari per un motore fisico


12

Di recente ho avviato un progetto, costruendo un motore fisico. Speravo che potessi darmi qualche consiglio relativo ad alcuni documenti e / o migliori tecnologie per questo.

Prima di tutto, ho visto che Game-Physics-Engine-Development è altamente raccomandato per il compito da svolgere e mi chiedevo se potevi darmi una seconda opinione. Inoltre, mentre navigavo su Amazon, mi sono imbattuto in Game Engine Architecture e dato che voglio costruire il mio motore fisico per i giochi, ho pensato che potesse essere una buona lettura.

In secondo luogo, so che la simulazione della fisica è altamente computazionale, quindi mi piacerebbe usare CUDA o OpenCL. Adesso sto propendendo ad OpenCL, perché funzionerebbe su entrambi i chipset NVIDIA e ATI. Cosa suggerite?

PS: lo implementerò in C ++ su Linux.

Risposte:


10

Ecco come ho imparato a scrivere un motore fisico, è tutto gratuito e altamente raccomandato:

  1. Articoli di David Baraff in particolare An Introduction to Physically Based Modeling

  2. Tesi Simulazione dinamica basata su impulsi di sistemi rigidi per il corpo di Brian Vincent Mirtich

  3. Kacic / Bullock "Un sistema di dinamica pratica" SIGRAPH 2003, EDIT: collegamento aggiunto .

Questi articoli sono stati citati in un altro grande articolo di Nick Porcino (LucasArts) in uno dei libri di gemme Gems 4 "Writing a Verlet-Based Physics Engine". Non è gratuito, ma vale ogni centesimo.

Dai un'occhiata anche ad altri motori, ecco la fonte del Bullet Physics Engine .

Informazioni sull'implementazione CUDA / OpenCL: eseguilo prima sulla CPU, è abbastanza complicato :)

Ricorda che molto probabilmente getterai via il tuo motore dopo un po ', dal momento che è troppo difficile realizzare un motore fisico stabile e ben integrato con un elenco di funzionalità competitivo da solo, tuttavia è un'ottima esperienza di apprendimento!

Non appena il motore è in funzione, il mio consiglio è: creare scenari di prova in cui confrontare il risultato del motore con il risultato di un altro motore. Questo mi ha aiutato a trovare molti errori e migliorerà la tua interfaccia; qualcosa di simile a lanciare una forza simile per 1 secondo nello stesso corpo in entrambi i motori.

Ultimo ma non meno importante: ignora le collisioni all'avvio, concentrati prima su una simulazione stabile.


Sembra un'ottima risposta, ma potresti voler formattare un po '.
Il comunista Duck il

Grazie per il feedback. Sono d'accordo che non sarò in grado di creare un motore competitivo, ma il mio obiettivo principale con questo è la parte di apprendimento.
Adivasile,

1
@La comunista Duck grazie per il suggerimento, ero nuovo di lato e ammetto che ero troppo pigro per controllare le opzioni di formato, risolto :)
Maik Semder

1
Aggiunto il link al documento di Kacic, si spera sia quello giusto :)
Ray Dey,

5

Maik ha ragione, i documenti di Baraff sono un ottimo inizio, ma non dimenticare che Chris Heckers scrive su rigide dinamiche del corpo: http://chrishecker.com/Rigid_Body_Dynamics !

Anche il suo consiglio su "[..] butterai via il tuo motore" è del tutto vero. Ma imparerai molto!

Per quanto riguarda la parte CUDA / OpenCL della tua domanda: se conosci CUDA, passare a OpenCL diventa molto semplice. Consiglio di imparare prima CUDA, perché ci sono così tanti buoni tutorial, esempi di codice e librerie di calcolo là fuori. Per esempio:

Ma attenzione: iniziare su CUDA è facile, iniziare a simulare la fisica è un po 'più difficile, ma combinare entrambi è una vera sfida!


hai assolutamente ragione, questa è un'altra grande risorsa che deve essere menzionata, +1 per il documento di Chris Hecker
Maik Semder,

4

Ho iniziato anche con Baraff, ma ormai è un po 'datato. Ciò di cui hai bisogno sono i solutori iterativi e la migliore immagine di carta su di esso sono i Dyanmics iterativi di Erin Catto . Hai tutto ciò che ti serve per implementare il tuo motore fisico. Puoi approfondire un po 'la tesi di dottorato di Erleben se hai bisogno di maggiori dettagli (come articolazioni e altro materiale matematico), ma è praticamente tutto. Vorrei averlo trovato fin dall'inizio - visita un po 'il forum Bullet, ci sono molte informazioni (forse troppe).

Per quanto riguarda i libri, molti dei libri disponibili sono deludenti, ma raccomando Physics Based Animation di Kenny Erleben o Game Physics Pearls.

Non conosco molto CUDA / OpenCL (anche se ho sempre voluto farlo) ma dovresti assolutamente dare un'occhiata al lavoro di Takahiro Harada.

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.