Domanda

Recentemente ho confrontato alcuni dei motore fisico là fuori per la simulazione e lo sviluppo del gioco. Alcuni sono gratuiti, alcuni sono opensource, alcuni sono commerciali (1 è anche molto commerciale $$$$). Havok, Ode, Newton (aka oxNewton), Proiettile, PhysX e "raw" build-in fisica in alcuni motori 3D.

Ad un certo punto sono arrivato a conclusione o domanda: Perché dovrei usare qualsiasi cosa, ma NVIDIA PhysX se posso fare uso della sua straordinaria performance (se ne ho bisogno) a causa di elaborazione della GPU? Con le future schede NVIDIA posso aspettare ulteriormente indipendenti miglioramento delle fasi regolari generazione di CPU. L'SDK è gratuito ed è disponibile per Linux. Naturalmente è un po 'di vendor lock-in e non è opensource.

Che cosa è la vostra visione o esperienza? Se si desidera iniziare subito con lo sviluppo, è d'accordo con quanto sopra?

applausi

È stato utile?

Soluzione

Disclaimer: io ho mai usato PhysX, la mia esperienza professionale è limitato a proiettile, Newton, e ODE. Di questi tre, ODE è di gran lunga il mio preferito; E 'il più numericamente stabile e gli altri due hanno problemi di scadenza (articolazioni utili non realizzati, joint legale / combinazioni di motori si comportano in modi indefiniti, e c).

Si allude alla questione vendor lock-in nella tua domanda, ma vale la pena ripeterlo: se si usa PhysX come soluzione fisica unica, le persone che utilizzano le schede AMD non sarà in grado di eseguire il gioco (sì, lo so che può essere fatto funzionare , ma non è ufficiale o supportati da NVIDIA). Un modo per aggirare questo è quello di definire un motore di failover, utilizzando ODE o qualcosa su sistemi con schede AMD. Questo funziona, ma raddoppia il carico di lavoro. E 'seducente pensare che sarete in grado di nascondere le differenze tra i due motori dietro un'interfaccia comune e scrivere la maggior parte del vostro codice di fisica di gioco una volta, ma la maggior parte delle difficoltà con la fisica del gioco sarà nel trattare con le idiosincrasie del vostro particolare motore fisico, decidere i valori per cose come il contatto di frizione e restituzione. Quei valori non hanno significati coerenti in tutta motori fisici e (soprattutto) non possono essere derivate formalmente, quindi sei bloccato trovando bell'aspetto, valori giocabili da esperimento. Con PhysX più un failover si sta facendo tutto il lavoro scut due volte.

A un livello più alto, io non credo che nessuno del torrente API di lavorazione sono completamente cotta ancora, e sarei riluttante a impegnarsi per uno fino a quando, per lo meno, abbiamo come la reazione dei clienti Larrabee di Intel forme disegni popoli.

Finora dal vedere PhysX come la scelta più ovvia per la fascia alta di sviluppo del gioco, direi che dovrebbe essere evitato a meno che non si pensi che la gente con le schede AMD costituiscono una frazione significativa della vostra base di giocatori (altamente improbabile ) o avete abbastanza codifica e QA manodopera per testare due motori fisici (più plausibile, ma se la vostra azienda è che benestante ho sentito parlare bene di Havok). Oppure, immagino, se hai progettato un gioco di fisica con richieste di prestazioni così intenso che solo lo streaming di fisica in grado di soddisfare voi - ma in quel caso, vi consiglio di formare una band e lasciare che la Legge di Moore fare il suo dovere per un anno o due.

Altri suggerimenti

Una risposta 2013 aggiornamento presto: sviluppo per quello che considero il tre grandi SO: Linux, OS X, MS. I sviluppare anche con i tre grandi librerie fisiche:. PhysX, Havok, Proiettile

Per quanto riguarda PhysX, di recente ho fatto alcuni test con la nuova incarnazione di essere 3.2.2 a partire dal momento in cui scriviamo. A mio parere nVidia davvero ridotto l'efficacia della biblioteca. Il più grande è la mancanza di accelerazione per corpi rigidi. Lib accelera solo particelle e tessuti. Anche quelli non interfacciarsi con corpi rigidi generali. Sono completamente perplesso nVidia facendo questo perché hanno un enorme dinamismo commerciale spingendo GPU accelerata applicazioni, concentrandosi sul calcolo scientifico con una grande forza motrice essendo simulazione fisica.

Così, mentre le mie aspettative del re della fisica sim essere PhysX, Havok, e Bullet in questo ordine vedo il contrario, in realtà. Proiettile ha rilasciato lib 2.8.1 con un campionamento di supporto OpenCL. Bullet è una parte relativamente piccola lib con generosa concessione di licenze. Il loro obiettivo è di avere rilascio 3 con accelerazione corpo rigido completamente integrato OpenCL.

Una parte della commenti parlare di percorsi di codice multiple. La mia opinione è che non è un affare troppo grande. Ho già il supporto di tre sistemi operativi con supporto codificare minima (filettatura per la maggior parte e non utilizzare codice specifico sistema operativo, usare C ++ e std modelli lib). E 'simile per le librerie di fisica. Io uso una libreria condivisa e astratto un'interfaccia comune. Questo va bene perché la fisica non cambia molto;) Sarà comunque necessario impostare un ambiente di simulazione, gestire gli oggetti, rende iterazioni nell'ambiente, ripulire una volta terminato. Il resto è il flash, realizzato nel tempo libero.

Con l'avvento di OpenCL nelle librerie tradizionali (NVIDIA CUDA è molto vicino - vedere demo proiettile OpenCL). Il lavoro plug-fisica si ridurrà

Quindi, partendo da zero e solo interessati con la modellazione fisica? Non si può andare male con proiettile. Piccolo, licenza flessibile (gratuito), molto vicina alla produzione pronto OpenCL che sarà cross-platform tra i tre grandi soluzioni OS e GPU.

Buona fortuna!

Si possono trovare questo interessante:

http://www.xbitlabs.com/news/video/display /20091001171332_AMD_Nvidia_PhysX_Will_Be_Irrelevant.html

E 'di parte ... è fondamentalmente un colloquio con AMD ... ma rende alcuni punti che mi sembrano da prendere in considerazione nel vostro caso.

A causa dei problemi di David Seiler ha sottolineato, commutazione motori fisici po 'di tempo in futuro potrebbe essere un enorme problema / insormontabile ... soprattutto se il gameplay è strettamente legato alla fisica.

Quindi, se si vuole veramente accelerazione hardware fisica nel tuo motore di NOW, andare per PhysX, ma essere consapevoli che quando le soluzioni come quelle postulato da AMD in questo articolo sono disponibili (sono assolutamente , ma non sono qui ancora), vi troverete di fronte a scelte spiacevoli:

1) riscrivere il motore da utilizzare (inserire il nome del nuovo motore fisico accelerato hardware multipiattaforma), potenzialmente cambiare la dinamica del vostro gioco in un brutto modo

2) continuare a usare PhysX solo, del tutto trascurando gli utenti AMD

3) cercare di ottenere PhysX a lavorare su GPU AMD (bleah ...)

A parte l'idea di David di utilizzare un motore fisico CPU come ripiego (fare il doppio del lavoro e la produzione di 2 motori che non si comportano in modo identico) la vostra unica altra opzione è quella di utilizzare la fisica CPU puro.

Tuttavia, come roba come OpenCL diventa corrente principale possiamo vedere ODE / Bullet / parente di partenza per incorporare che ... IOW se codificare ora con ODE / Bullet / kin si potrebbe (probabilmente alla fine) ottenere l'accelerazione GPU per "libero" più tardi (nessuna modifica al codice). Sarà ancora si comportano in modo leggermente diverso con la versione di GPU (un problema inevitabile a causa dell'effetto farfalla e le differenze di implementazione in virgola mobile), ma almeno avrete la / Bullet / comunità ODE parente lavorare con voi per ridurre tale gap .

Questo è il mio consiglio: utilizzare una libreria fisica open source che attualmente utilizza solo la CPU, e aspettare che a fare uso di GPU tramite OpenCL, CUDA, la lingua flusso di ATI, ecc Performance sarà urlando veloce quando ciò accade, e potrai risparmiare il mal di testa.

L'ipotetica beneficio delle future schede gfx è cosa buona e giusta, ma ci saranno anche i futuri benefici dalla CPU core aggiuntivi troppo. Si può essere sicuri che i futuri carte GFX avranno sempre una batteria di ricambio per il tuo fisica?

Ma probabilmente la migliore ragione, anche se un po 'vago, in questo caso, è che le prestazioni non è tutto. Come per qualsiasi libreria di terze parti, potrebbe essere necessario per sostenere e migliorare che codificano per gli anni a venire, e si sta andando a voler fare in modo che le interfacce sono ragionevoli, la documentazione è buono, e che ha le capacità che si richiedono.

Ci possono essere anche le preoccupazioni maggiori matematici come alcune API che offrono equazione più stabile risolvere e simili, ma lascio commento da quello di un esperto.

Ho usato ODE e ora con PhysX . PhysX rende costruzione di scene più facile e (il mio parere personale) sembra più realistico, tuttavia, non v'è alcuna documentazione adeguata per PhysX ; infatti quasi nessuna documentazione a tutti. D'altra parte, ODE è open source e v'è abbondanza di documenti, tutorial, ecc PS: Usando GPU accelaration me ei miei colleghi sta aiutando in modo significativo; stiamo utilizzando APEX distruzione e PhysX di particelle.

PhysX lavora con schede nVidia non, semplicemente non ottenere accelerato. Lasciando nella stessa posizione degli altri motori sono per iniziare. Il problema è se si dispone di una simulazione fisica che è praticabile solo con l'accelerazione fisica hardware.

Se tutto il codice è massicciamente paralelizable, quindi andare per esso!

per tutto il resto, le GPU sono del tutto inadeguato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top