Quali sono i concetti specifici di matematica, fisica, intelligenza artificiale e generali che un programmatore dovrebbe conoscere per sviluppare un motore di gioco? [chiuso]


9

Essendo un programmatore di applicazioni web e DB centrate, ho conoscenza di strutture di dati come elenchi, alberi, grafici, ecc. Sinceramente uso molto poco di questi algoritmi di struttura dei dati nella mia codifica, tranne per l'ordinamento di cose in matrici semplici, come ha funzionato quasi interamente con framework orientati al cliente in cui erano integrate tutte le funzionalità principali. Conosco C, PHP, Java, HTML, PL / SQL e MySQL. Attualmente sto imparando Python.

Voglio iniziare con lo sviluppo del gioco. Ho visto altre domande su suggerimenti, suggerimenti e approcci allo sviluppo di giochi per principianti. Capisco questi punti e sono chiaro con le risposte. Alcuni giorni dopo la pubblicazione, ho letto l'articolo Scrivi giochi, non motori , e ho capito che avrei dovuto implementare un gioco prima di creare un motore di gioco. Tuttavia, ho delle domande.

Il mio obiettivo è quello di

  • Migliora le mie capacità di programmazione a livello di base, incluso l'uso di algoritmi di struttura dei dati, concetti di matematica e fisica.
  • Implementa un buon motore di gioco, per dedicarmi alla codifica a livello di core.
  • Per aprirmi la strada nel campo della ricerca AI.

Quali sono i concetti specifici di matematica, fisica, intelligenza artificiale e generali che un programmatore dovrebbe conoscere per sviluppare un motore di gioco?

Risposte:


11

Strutture di dati: è certamente una domanda valida. Tuttavia, mentre alcune Strutture dati sono utili per qualsiasi tipo di gioco (come quelli che hai già menzionato, Elenchi, Alberi ...), ce ne sono altri che sono molto specifici. Ad esempio, Octrees può essere molto utile nella programmazione 3D, ma in un ambiente 2D puro probabilmente non ti serviranno.

Algoritmi : si applica la stessa regola empirica. Esempio, in un ambiente 2D puro, il rilevamento delle collisioni funziona in modo molto diverso rispetto al 3D.

Aree matematiche importanti: L' Area più importante per uno sviluppatore di motori con cui familiarizzare è l'algebra lineare e argomenti di algebra più avanzati (Quaternioni). Abbastanza semplice davvero, se ti senti a tuo agio con l'algebra lineare (e intendo al di là della semplice moltiplicazione Matrix), la tua partenza è buona.

La prossima è Geometry, che si collega comunque bene all'algebra lineare in Engine Dev, e probabilmente non ha bisogno di menzionare comunque.

Inoltre, non fa mai male avere una solida conoscenza del calcolo di base. Questo è utile quando si ha a che fare con il motore fisico o con argomenti di ombreggiatura più avanzati.

Altri argomenti di interesse dovrebbero essere: Combinatoria, Statistica

Fisica: non è obbligatorio, SE hai intenzione di creare giochi semplici. Non fa male, ma ti andrà bene con la fisica delle superiori in questo caso.

Se stai pensando di scrivere un motore fisico o di implementare un'architettura esistente, allora sì, è obbligatorio. Ma non temere, ci sono molti libri di fisica scritti appositamente per Game-Devs. Tieni a mente, leggi queste PRIMA di iniziare a programmare un gioco con la fisica. Se il tuo gioco dovrebbe avere una fisica, questi motori si collegheranno profondamente alla tua architettura principale.

AI: Ad essere sincero, se l'IA è il tuo interesse principale, non mi preoccuperei di scrivere un intero motore. L'intelligenza artificiale è molto più divertente quando hai un'architettura esistente con cui giocare. Scrivere un motore sarà una seccatura e ci vorrà un bel po 'prima che tu sia in grado di implementare divertenti algoritmi AI.

Che tipo di gioco desideri sviluppare? Forse posso approfondire di più questi punti con queste informazioni.


Grazie per la tua risposta elaborata. Come risposta alla tua domanda .. bene in questo momento non ho idea nel mio cervello, ma voglio sviluppare un motore di gioco 3d. Ma pensa meglio per iniziare con qualche gioco 2D e conoscere l'ambiente. Prima di tutto, dovrei giocare ad alcuni giochi per conoscere l'aspetto dei giochi (dato che non ho mai giocato ai videogiochi :-)). In modo che sia facile per me capire la terminologia dei libri e altre cose. Ho trovato molto utile il seguito,
droidsites il

scusa ho perso il link nel mio commento precedente: gamedev.stackexchange.com/questions/8502/…
droidsites

In passato avrei raccomandato di iniziare prima con i giochi 2D se si desidera sviluppare giochi 3D. Tuttavia, con la rivolta di architetture come XNA, credo che sia più divertente immergersi direttamente nel 3D. Hai già dato un'occhiata a C # / XNA? Non dovrebbe essere un problema dato il tuo background di programmazione
Michael Kissner,

No, non l'ho verificato. Sì ... non è un problema scegliere C #. Ma sono molto interessato al genere pitone :-)
droidsites,

Se sei interessato a Python e sei più interessato a costruire un gioco piuttosto che a costruire la tecnologia per costruire un gioco, potresti dare un'occhiata a Panda3D, o Blender Game Engine.
Sean Middleditch,

1

Mentre può essere valido chiedere quali strutture di dati sono più utilizzate nello sviluppo del gioco, è molto più valido chiedere quali strutture di dati vengano utilizzate per problemi specifici. Posso facilmente affermare che le tabelle hash sono super comuni nei giochi, ma ciò non ti direbbe nulla di utile in termini di quando e dove usare (e non usare!) Una tabella hash nel tuo codice. :)

In termini di matematica, devi avere una conoscenza molto forte dell'algebra lineare (vettori, matrici, risoluzione di sistemi lineari, ecc.), Una conoscenza molto forte della trigonometria e almeno una comprensione di base del calcolo (derivate semplici e integrazione) . Qualsiasi corso introduttivo di algebra lineare a livello universitario dovrebbe metterti sulla strada giusta, se non ti insegnerà tutto ciò che devi sapere per iniziare a lavorare con i principi comuni della grafica 3D. Collego anche un libro di seguito che potresti trovare molto utile.

Per la fisica, sei pronto per un passaggio. La fisica può essere suddivisa in due diverse categorie: rilevamento delle collisioni e risposta alle collisioni. Devi assolutamente conoscere la matematica dietro il rilevamento delle collisioni, poiché quella matematica è più o meno identica a ciò che devi fare per la grafica (specialmente per costruire gli alberi e le mappe di cui hai bisogno per l'occlusione), e userai quella roba per un molta della tua logica di gioco.

La risposta alla collisione può variare da livelli "semplici" a livelli di complessità ridicoli, e persino le cose semplici possono inizialmente non essere intuitive. Consiglio vivamente di lasciare quella roba in una libreria esistente come Bullet, Havok, PhysX o così via (o Box2D se stai lavorando al gameplay 2D) fino a quando e a meno che tu non sia a tuo agio con la matematica e l'algoritmo esistenti conoscenza e decidi che vuoi imparare come funzionano i motori fisici. Ti consiglierei quindi di costruire un motore fisico 2D molto semplice come primo tentativo. I motori fisici 3D sono bestie follemente complesse e sono (probabilmente) la parte di gran lunga più complicata e difficile della programmazione dei giochi, motivo per cui i motori fisici sono la tecnologia di terze parti più comunemente utilizzata nei giochi. Semplicemente non vedi molti giochi che non sono Utilizzo di Havok o PhysX nel mondo professionale, nonostante il numero di giochi con motori grafici e codice core sviluppati da zero. Anche le aziende che non fanno altro che costruire motori di gioco in genere concedono in licenza un motore fisico, ad esempio Unreal utilizza solo PhysX anziché includere il proprio motore fisico.

Consiglierei i seguenti libri per iniziare. Il primo è un libro di livello introduttivo sulla matematica di base che devi conoscere come programmatore di giochi 3D:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

Il secondo è un libro rilevato per gli algoritmi di rilevamento delle collisioni (non per la risposta alle collisioni!) Che aiuterà sia con la codifica grafica sia con la codifica fisica:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

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.