DOMANDA Primi passi verso matematica e fisica in un videogioco

DaleyGray

Nuovo Utente
24
0
Salve a tutti, come ben saprete ormai i videogiochi arrivano ad utilizzare algoritmi molto complessi matematicamente parlando e io ancora non sono in grado, non avendo la capacità, di crearne miei propri.
Volevo quindi iniziare un percorso di studi (autodidatta) per la geometria e l'algebra nei videogiochi (inoltre vorrei chiedervi che campi della matematica si usano, in quanto l'unica cosa che sono riuscito a comprendere è che si usa soprattutto l'algebra lineare), la fisica (qui immagino che i campi usati varino a seconda delle situazioni in cui ci si trova, come collisione ecc...). Premetto che ho tempo, e anche molto.
Ecco, il problema principale è che non riesco a trovare l'input giusto, il giusto percorso di studi per far ciò (e le giuste documentazioni, che anche in inglese, non troppo complesso, vanno bene): ci sono talmente tante cose che proprio non so da dove iniziare, per cui chiedo a gente più esperta di me da quale argomento iniziare (sia per matematica, sia per fisica) per sviluppare il percorso con eventuali riferimenti a documenti/guide/manuali ecc (possibilmente online free perché non sono in possesso di conto corrente online in famiglia e i manuali fatico a trovarli in giro per la mia città purtroppo).
Per la programmazione credo invece di potermela gestire, adesso come adesso sto studiando le liste puntate in C e finito il C (so che manca ancora un bel po', ma mi piace studiare ciò che mi interessa) passerò al C++ (a scuola studio Java e C, andando all'informatico, ma questi due linguaggi li sto portando avanti da solo), avendo anche le basi di OOP grazie al già citato Java. Ed infine, una volta finito il percorso nei dettagli con il C++ passerò a studiare DirectX (o OpenCL, ancora non lo so). Ditemi se è meglio imboccare un altro percorso nel caso in cui mi sbaglio.
Tutto questo però so che si tratterà di un percorso molto lungo (che mi accompagnerà per diversi anni), ma avendone adesso come adesso 17 ho il tempo di farla diventare una professione ed è quello che mi piacerebbe fare.
Ci tenevo a precisarlo per non passare per il solito ragazzino che pensa che creare un videogioco sia, appunto, un gioco anziché un vero e proprio lavoro, anche complesso.
happy.png


Quindi riassumendo ho bisogno dell'aiuto di qualcuno che mi indirizzi verso questo percorso, con gli argomenti iniziali e gli sviluppi (in generale) di essi sia in matematica, che in fisica.
 

abcdeeeeff

Utente Attivo
521
289
CPU
Ryzen 9 5900X
Dissipatore
Noctua NH-D15
Scheda Madre
MSI B550 Gaming Edge WiFi
HDD
WD Black SN850 1 TB
RAM
4x8GB crucial ballistix 3600 CL16 (OC a 3733)
GPU
Gigabyte HD 7950 (3080 in arrivo)
Audio
integrata nella MB
Monitor
Dell 2721DGF
PSU
Antec HCG 750W
Case
Corsair 4000D airflow
OS
Windows 10 + Arch Linux
Credo che sia meglio chiedere nella sezione game development Game Development
Usando qualche software pensato per fare giochi(unity engine per esempio), non c'è già la parte di fisica implementata?
 

DaleyGray

Nuovo Utente
24
0
Credo che sia meglio chiedere nella sezione game development Game Development
Usando qualche software pensato per fare giochi(unity engine per esempio), non c'è già la parte di fisica implementata?

Sì, anche molte altre funzioni quali la IA, suoni eccetera (almeno in UDK, di cui mi stavo interessando).
Il fatto è che il mio obiettivo principale in realtà sarebbe di arrivare a crearne uno di game engine (per adesso qualcosa di veramente semplice, per passare poi in un team di sviluppo serio in futuro) e non di usarne uno già fatto. Per cui creare con il "solo" aiuto di API quali, appunto, DirectX o OpenCL un motore grafico. :)
D'altronde se qualcuno non si prende in mano le questioni difficili useremmo tutti lo stesso game engine :lol:

P.S.: Se ho sbagliato sezione chiedo scusa, non avevo notato la sezione Game Devolpment. Se un moderatore può spostare la discussione gliene sarei grato.
 
Ultima modifica:

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Il fatto è che il mio obiettivo principale in realtà sarebbe di arrivare a crearne uno di game engine (per adesso qualcosa di veramente semplice, per passare poi in un team di sviluppo serio in futuro) e non di usarne uno già fatto. Per cui creare con il "solo" aiuto di API quali, appunto, DirectX o OpenCL un motore grafico. :)
D'altronde se qualcuno non si prende in mano le questioni difficili useremmo tutti lo stesso game engine :lol:
per quanto riguarda la matematica per il tridimensionale, fondamentalmente si tratta di algebra lineare e quindi vettori, matrici, operazioni su vettori e matrici. Queste conoscenze vengono poi applicate alle librerie grafiche come Directx e OpenGL (OpenCL è un linguaggio di computing ibrido GPGPU) che mediante operazioni matematiche su triangoli orientati nello spazio, renderizzano quello che tu percepisci come grafica 3D.
Le conoscenze necessarie per scrivere un game engine intero non sono assimilabili da un singolo comune mortale e per questo un game engine lo si scrive in tanti.
Se vuoi provare qualcosa di semplice, limitandoti all'engine grafico (una parte dei game engine), dovresti prenderti un libro di algebra lineare e capire BENE vettori, matrici, proiezioni, ortogonalità, ornonormalità ecc...
Dopodichè puoi provare ad applicare le conoscenze alla programmazione (C++ che devi conoscere già MOLTO bene) seguendo un libro come quello di Frank D. Luna "3D Game Programming with Directx 11" (che nelle prime sezioni del libro ripropone un sunto di calcolo vettoriale e matriciale). Io l'ho acquistato ma ti assicuro che non è per nulla semplice, pur essendo laureato in ingegneria informatica e avendo quindi visto fin troppa algebra :asd:
 
Ultima modifica:

DaleyGray

Nuovo Utente
24
0
Grazie mille Indeed :)
Prenderà bene nota di tutto ciò che hai detto, comunque ho confuso GL con CL, che figuraccia :cav:
Comunque ripeto che voglio affrontare questo percorso di studi in più e più anni e di tempo ne ho, quindi non ti preoccupare che non sono uno che taglia le cose a metà autoconvincendosi di saperle alla perfezione.
Comunque mi sembrava strano il poter creare un Engine senza un team (causa le varie e molteplici "materie" tirate in ballo), ma avevo visto la tesi di laurea di un ragazzo dell'università di Padova, mi sembra, messo online in pdf. Documento che per quanto ne so io, anche se molto (davvero molto) riassuntivo e generico mi sembra di facile comprensione (nei limiti del possibile) e interessante.

Visto che vi avrò lasciato l'acquolina in bocca dalla curiosità vi lascio il link, sperando non sia considerato spam :utonto:

http://tesi.cab.unipd.it/35105/1/Motore_Grafico_3D.pdf
Beh, si vede effettivamente che non è un lavoro superbo (o meglio al pari di quelli che usano case videoludiche serie, ma lui, poretto, era da solo e avrà avuto massimo 7 anni di esperienza ad esagerare
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Che coincidenza, anche io sono laureato a Padova!
Ho dato una letta veloce, la tesi ripercorre più o meno quello che puoi trovare nel libro che ti ho suggerito sopra, aggiungila pure al tuo portafoglio, mi sembra abbastanza buona (e deve esserlo se si è laureato con quella) :D
 

DaleyGray

Nuovo Utente
24
0
Ottimo allora, l'unica pecca è che, purtroppo, in famiglia non si fidano di aprire un conto corrente online e vedo dura comprare perciò il libro. Gli unici manuali da me acquistabili sono in italiano (e in libreria), ma tutti qua sappiamo che in italiano si trova poco riguardante l'ambito (almeno credo).

Mi metterò quindi a studiare algebra lineare (di materiale italiano anche online ce ne dovrebbe essere o comunque spulcierò in librerie), e finito il C passo al C++, quindi. Poi devo comprendere tutte le funzioni di un motore di rendering real-time (quindi luci, ombre e milioni di altre cose). Giusto?

Un'altra cosa: seguire il percorso sopra citato può andar bene anche se parto da 0 nell'ambito del rendering real-time (quello non real time ho avuto/sto avendo esperienze con 3DStudio Max e Maya e, tralasciando la modellazione, è fondamentale capire il rendering e le sue funzioni) o meglio: non ho avuto esperienze con altri game engine (anche se ho installato UDK) già fatti per il fatto che odio davvero troppo usare un software senza sapere bene cosa sto facendo e mi piace studiare partendo dalle basi (quindi i tutorial di UDK, che fra l'altro sono pochi, non li sopporto, come non sopporto nessun'altro tipo di tutorial, a meno che non spieghi bene ciò che si fa; anche perché quei tutorial non sono guide e non spiegano da dove partire per comprendere il funzionamento del programma)?
 

locic91

Nuovo Utente
5
0
Ottimo allora, l'unica pecca è che, purtroppo, in famiglia non si fidano di aprire un conto corrente online e vedo dura comprare perciò il libro. Gli unici manuali da me acquistabili sono in italiano (e in libreria), ma tutti qua sappiamo che in italiano si trova poco riguardante l'ambito (almeno credo).

Mi metterò quindi a studiare algebra lineare (di materiale italiano anche online ce ne dovrebbe essere o comunque spulcierò in librerie), e finito il C passo al C++, quindi. Poi devo comprendere tutte le funzioni di un motore di rendering real-time (quindi luci, ombre e milioni di altre cose). Giusto?

Un'altra cosa: seguire il percorso sopra citato può andar bene anche se parto da 0 nell'ambito del rendering real-time (quello non real time ho avuto/sto avendo esperienze con 3DStudio Max e Maya e, tralasciando la modellazione, è fondamentale capire il rendering e le sue funzioni) o meglio: non ho avuto esperienze con altri game engine (anche se ho installato UDK) già fatti per il fatto che odio davvero troppo usare un software senza sapere bene cosa sto facendo e mi piace studiare partendo dalle basi (quindi i tutorial di UDK, che fra l'altro sono pochi, non li sopporto, come non sopporto nessun'altro tipo di tutorial, a meno che non spieghi bene ciò che si fa; anche perché quei tutorial non sono guide e non spiegano da dove partire per comprendere il funzionamento del programma)?

Daley credo che con una postepay, facilmente reperibile alle Poste tu possa risolvere il problema del contocorrente online! :D
 

DaleyGray

Nuovo Utente
24
0
Ahahhah scusate la mia ignoranza ma essendo minorenne non mi ero mai interessato di acquisti online, paypal ecc...
 

wolf1792

Utente Attivo
324
53
CPU
Intel i5 2320
Scheda Madre
AsRock P67 Pro3
HDD
WD caviar blue 500Gb
RAM
8 Gb Vegeance low profile
GPU
ATI HD6850
Monitor
Tv Samsung 24" Full-HD
PSU
XFX 450W
Case
Cooler Master 330
OS
windows 8/Ubuntu 13.04
esiste la postepay junior, la fanno anche ai minorenni ;)
 

DaleyGray

Nuovo Utente
24
0
Ah, non lo sapevo... Comunque credo di aspettare un anno e farmi un conto corrente online. Finoad allora non so se vale la pena di fare la junior, chiederó a qualcun'altro in famiglia di farla :) Comunque senza andare troppo Off-Topic vi chiederei gentilmente se quacuno mi sa rispondere all mia ultima domanda :)
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Mi metterò quindi a studiare algebra lineare (di materiale italiano anche online ce ne dovrebbe essere o comunque spulcierò in librerie), e finito il C passo al C++, quindi. Poi devo comprendere tutte le funzioni di un motore di rendering real-time (quindi luci, ombre e milioni di altre cose). Giusto?
In questi casi, più che memorizzare le funzioni (che possono tranquillamente cambiare) è utile prima di tutto capire la logica di funzionamento del rendering, poi man mano che studi i singoli argomenti fai delle prove pratiche con il codice.
Un'altra cosa: seguire il percorso sopra citato può andar bene anche se parto da 0 nell'ambito del rendering real-time (quello non real time ho avuto/sto avendo esperienze con 3DStudio Max e Maya e, tralasciando la modellazione, è fondamentale capire il rendering e le sue funzioni) o meglio: non ho avuto esperienze con altri game engine (anche se ho installato UDK) già fatti per il fatto che odio davvero troppo usare un software senza sapere bene cosa sto facendo e mi piace studiare partendo dalle basi (quindi i tutorial di UDK, che fra l'altro sono pochi, non li sopporto, come non sopporto nessun'altro tipo di tutorial, a meno che non spieghi bene ciò che si fa; anche perché quei tutorial non sono guide e non spiegano da dove partire per comprendere il funzionamento del programma)?
Non ho ben capito la domanda, comunque un motore grafico già fatto tipicamente non ti è molto di aiuto nel capire come funzionano le cose, perchè tipicamente, come nel caso dell'UDK, non hai a disposizione il codice sorgente.
Se vuoi osservare da vicino il codice di un motore grafico avanzato, potresti dare una occhiata ai sorgenti di Ogre 3D, ma sono veramente complessi.
Nello stato attuale comunque sono ben pochi gli studi di game dev che creano il loro engine, tipicamente si prende un engine già fatto (Unreal, CryEngine...) e lo si modifica. Per farlo ovviamente gli studi devono acquistare la versione "full" dell'engine che costa anche decine di migliaia di euro fino anche a ben di più in relazione al tipo di progetto (la contrattazione sull'acquisto dell'engine full sono infatti private). Per intenderci, l'UDK è la versione "castrata" e priva di codice sorgente dell'engine Unreal, ed è distribuito con altre licenze più "indie-oriented" (tipicamente richiedono una percentuale sui guadagni).
 
Ultima modifica:

DaleyGray

Nuovo Utente
24
0
In questi casi, più che memorizzare le funzioni (che possono tranquillamente cambiare) è utile prima di tutto capire la logica di funzionamento del rendering, poi man mano che studi i singoli argomenti fai delle prove pratiche con il codice.

Va bene, farò così :)

Non ho ben capito la domanda, comunque un motore grafico già fatto tipicamente non ti è molto di aiuto nel capire come funzionano le cose, perchè tipicamente, come nel caso dell'UDK, non hai a disposizione il codice sorgente.
Se vuoi osservare da vicino il codice di un motore grafico avanzato, potresti dare una occhiata ai sorgenti di Ogre 3D, ma sono veramente complessi.
Nello stato attuale comunque sono ben pochi gli studi di game dev che creano il loro engine, tipicamente si prende un engine già fatto (Unreal, CryEngine...) e lo si modifica. Per farlo ovviamente gli studi devono acquistare la versione "full" dell'engine che costa anche decine di migliaia di euro fino anche a ben di più in relazione al tipo di progetto (la contrattazione sull'acquisto dell'engine full sono infatti private). Per intenderci, l'UDK è la versione "castrata" e priva di codice sorgente dell'engine Unreal, ed è distribuito con altre licenze più "indie-oriented" (tipicamente richiedono una percentuale sui guadagni).

Intendevo se si può partire dalla progettazione di un motore di rendering real-time senza aver avuto esperienze con altri motori di rendering già fatti come appunto UDK, Unreal Engine ecc...
Ma credo tu mi abbia risposto con "[...] non ti è molto di aiuto nel capire come funzionano le cose" :)
Inoltre ho visto che la licenza del CryEngine è di 1,2 milioni di dollari :asd:
Ed è insomma per il motivo che mi hai spiegato che volevo creare un game engine da zero (o almeno, come mi hai detto tu, una parte di esso).

Per ricapitolare:
_ALGEBRA LINEARE
_C++
_API (quali DIRECTX/OPENGL)
_RENDERING (con esercizi pratici che dovrò fare in c++)

E a questo punto quando sarò diventato davvero bravo studierò un po' il sorgente di Ogre3D per affinare le conoscenze e prendere magari spunto.

Un'ultima (credo) domanda da ignorantone: la differenza fra un framework (come XNA) e un game engine non mi è ancora molto chiara. Ho capito che entrambi mettono a disposizione un ambiente di lavoro per fare una determinata cosa, quindi una programmazione un po' "guidata" verso certi tipi di progetti (quali appunto videogiochi) con una struttura ben definita, non so se mi sono spiegato. Ma la loro differenza mi è ancora un po' sconosciuta. Se qualcuno me la può spiegare mi farebbe un grande piacere. Tutti gli articoli/topic sul web che ho letto dicono che vi è poca differenza ed è ormai soggettiva, ma se hanno nomi diversi credo che una differenza ci sarà...
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Xna è un framework microsoft di supporto alla creazione di games. Dico "di supporto" perchè di fatto non è un engine grafico ma una collezione di librerie che mettono a disposizione gli strumenti che più spesso sono richiesti nello sviluppo di un gioco.
Le XNA contengono per esempio librerie per la gestione del suono, degli input, ma anche librerie matematiche per lavorare con matrici e vettori.
Nel libro che ti ho menzionato sopra sono usate ma non perderci troppo tempo, XNA è un progetto che sta venendo abbandonato da microsoft (in realtà già windows 8 non le supporta più). Già le directx12 prevedono di rivedere totalmente il core delle librerie grafiche per ridurre l'overhead sulla CPU, e a quanto pare directx12 abbasserà molto il livello di astrazione e praticamente finirai con il costruirti da solo parte delle librerie grafiche (ciò favorirà solo i grandi studi che lavorano su engine grossi, e sempre meno i singoli sviluppatori e i team più piccoli).
Intanto pensa a studiare le basi di programmazione che quelle sono utili per tante altre cose, ti anticipo che per avere un livello di conoscenza C++ realmente valido e sufficiente per creare un engine non ti bastano 2 anni se parti da zero. C'è veramente tanta teoria informatica su cui sbattersi. Quando sarà ora, valuterai la situazione :)
 

DaleyGray

Nuovo Utente
24
0
Ne sono sicuro, studio informatica da 2 anni e come già ho ribadito (avendo 17 anni) ho tempo libero a non finire, in più frequento l'ITIS (Informatico) in cui vado molto bene grazie a questa mia passione e a casa continuo per i fatti miei molti argomenti che a scuola non faremo sicuramente mai, causa tempo e altre cose.
Inoltre ho intenzione di frequantare l'università fra 2 anni (sono alla fine ormai della terza), fare una laurea triennale in ingegneria e una magistrale da 2 (quella del PoliMI in game design and programming).
Tutto questo per dirti che non sono uno dei tanti che prende sotto gamba la difficoltà effettiva dello sviluppo dei videogiochi e dell'informatica più in generale, soprattutto perché in questi due anni (nella parte autodidatt a casa e non a scuola) ho affrontato tanti argomenti convinto di riuscire a capirli (nonostante sapevo di non avere i prerequisiti adatti), ma ho poi dovuto accettare la realtà e tornare a studiare ciò che potevo comprendere in base alle mie conoscenze e competenze. :)
Grazie mille della risposta Indeed, molto gentile e chiaro. Adesso vado a studiare insomma. Per qualsiasi cosa spero che l'utenza di TH non manchi :D
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili