ArsLudica.org Forum

Effettua l'accesso o una nuova registrazione.

Inserisci il nome utente, la password e la durata della sessione.
Ricerca avanzata  

News:

Autore Topic: Sviluppo XNA  (Letto 6042 volte)

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Sviluppo XNA
« il: Febbraio 10, 2009, 18:28:20 »

Citazione da: Monopoli
Io non ho mai usato XNA Sad Al fondo c'e' DX. giusto?

E' una versione ulteriormente semplificata delle vecchie implementazioni ad oggetti di DX dei tempi andati. Su di essa poi sono stati introdotti di pattern architetturali standard ed ottimizzati per gestire rendering, multithreading, Live!, calcoli vettoriali, mesh, animazioni, pipeline grafiche programmabili, shader, xact, etc. Insomma, la solita roba di base.

Dulcis in fundo, c'è pure una pipeline dinamica e programmabile per gestire i content di gioco, con la possibilità di scrivere exporter ed importer, nonché di "scalare" i contenuti in base al target di release prescelto (es: downscale di texture e modelli (utilizzando i LOD, ad esempio) per deployare su Zune. La pipeline va molto oltre il content management diventando uno strumento di configurazione per qualsiasi cosa esista in codice e sia parametrizzabile (abbia delle proprietà get/set da manipolare). Esempio pratico: puoi gestirci l'intera timeline di uno shmup, con definizione di ondate, pattern degli avversari, etc...

Prossimamente la pipeline dinamica verrà estesa integreranno anche Silverlight/XAML (una versione moderna di Flash con supporto ad una sintassi a componenti XML-like dichiarativa) per la realizzazione di GUI graficamente e funzionalmente complesse senza bisogno di smazzarsi decine di migliaia di righe di codice, con relativo debug.
Su Windows è già possibile farlo.

Alcuni sono convinti che sia un semplice wrapper stile DX Managed, invece sono interfacce Managed che mappano API native, senza overhead. Altri sostengono che sia una versione semplificata di DX perché hanno tolto tutte le API non legate al gaming (mancano quasi tutte le modalità di rendering tipiche del CAD). Poi ci sono delle funzionalità aggiuntive, che per un programmatore C++ sembrano miracolose ma che sono semplicemente feature di base di .NET.

Ovviamente tutto questo lo si può lasciare Managed (ormai l'overhead è quasi nullo e l'ottimizzazione adattativa di .NET spesso rende meglio sui loop di gioco molto complessi di quanto non faccia un'ottimizzazione nativa automatica), oppure precompilare in nativo ahead of time prima di fare il publish del pacchetto (XBOX/Zune) o al momento dell'installazione (Windows).
« Ultima modifica: Febbraio 10, 2009, 18:38:10 da z.e.r.o »
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: XNA e DirectX
« Risposta #1 il: Febbraio 10, 2009, 18:37:42 »

Per smanettarci serve questo:

Visual C# Express 2008 (dovrebbe funzionare anche con Visual C++ Express 2008 ma supporta solo modalità Managed, col C# la programmazione è più naturale, essendo la sintassi di riferimento per tutto .NET)

E poi l'XNA Game Studio 3, un plug in del Visual Studio, che trovi qui:

http://www.microsoft.com/downloads/details.aspx?familyid=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&displaylang=en

Per reference implementation (prototipi di gioco di riferimento, non tutti aggiornati all'ultima versione) e tutorial vari, puoi far rierimento al creator's club di Microsoft.

http://creators.xna.com
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #2 il: Febbraio 10, 2009, 18:42:56 »

Fico :D

Curiosita': funziona anche con visual studio 2008 full? immagino di si :)

Stasera me lo scarico e ci faccio space invaders, che e' il mio gioco di test per tutto :D
L'ho fatto pure con l'engine di codemasters per imparare ad usarlo :D
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #3 il: Febbraio 10, 2009, 18:51:03 »

Si funziona anche col 2008 ma io per XNA preferisco l'Express per via della leggerezza maggiore, visto che tanto il 90% del resto delle feature diventa inutile.

Ho scoperto che c'è uno shmup stile Galaga nei tutorial (guarda la guida nella sezione extended tutorial).

Affiancato al Curve Editor che scarichi da creator's club (in pratica una GUI per interagire con l'oggetto Curve di XNA che fa le interpolazioni di Bezier) mi ha dato una dritta non da poco per quel problema che avevo per la creazione dei pattern di movimento.

Se ti servono un po' di mesh di prova c'è un paccone di quelli di dark basic con un bel po' di asset che può essere scaricato dal sito di Visual Studio Express (vai nella sezione gaming).

Sullo stesso sito c'è anche la versione free di quel prodotto commerciale che genera le texture proceduralmente con una GUI simile a quella per generare gli effetti audio digitali nei software di sintesi sonora. Veramente figo!
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #4 il: Febbraio 15, 2009, 17:20:23 »

In questi giorni sto guardicchiando i tutorial di XNA presenti sul sito. Un po' prolissi (11 minuti per copiare dei file :D) però intravedo le potenzialità.

Se qualcuno qui l'ha già usato, vorrei capire se è possibile fare questo:
- vorrei poter controllare la pipeline per fare una prepassata con solo Z-Buffer, una con le normali ed una con il colore, per fare un po' di effetti interessanti (particelle finto volumetriche, deferred lighting e così via). Si ha un controllo del genere sulla sua pipeline?
- Ho cercato un engine per la fisica, ma non ho trovato molto, a parte un wrapper di physics non ufficiale e una versione di Newton physics solo per Windows.
qualcuno sa se ci sono degli engine fisici compatibili con XNA?
- Esiste qualcosa per le GUI? Qualcosa di semplice e solido? Non voglio perderci troppo tempo.
- Se faccio delle cose in mutithreading usando le robe di .NET, su X360 userà correttamente i core, non saturando quello su cui gira il sistema operativo? Posso avere controllo a basso livello su questo lato?
- Se volessi fare dello streaming di dati, avrei bisogno di preallocare dei buffer, con controllo preciso della loro dimensione per la gestione del caso peggiore. Ho un controllo approfondito sulla memoria con .NET oppure è assolutamente impredicibile come in Java?

Grazie a chi risponderà :D (che mi sa che sarà z.e.r.o. :D)
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #5 il: Febbraio 15, 2009, 19:28:05 »

Ok prima delusione: caricando un modello3d ti carica anche le texture.
Questo apre un mondo intero di problemi pazzeschi, che da anni ed anni sono stati risolti mettendo i materiali fuori dalle mesh.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #6 il: Febbraio 15, 2009, 19:30:46 »

Avevo trovato una sfilza di motivi per non usare xna per studiare, ma me li sono dimenticati tutti :D

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #7 il: Febbraio 15, 2009, 19:36:24 »

Avevo trovato una sfilza di motivi per non usare xna per studiare, ma me li sono dimenticati tutti :D

Questa cosa delle texture me l'ha fatto accantonare completamente. Domani vedo si può evitare il caricamento delle texture.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #8 il: Febbraio 15, 2009, 19:39:07 »

Iniziamo dalle cose semplici.

Presumo che tu sappia come funziona il threading della 360, faccio lo stesso una intro per gli altri.

X360 ha 3 core, ognuno supporta 2 thread hardware., quindi il core 0 gestisce i thread 0 e 1, il core 1 i thread 2 e 3 e così via.
XNA riserva i thread 0 e 2 per sé (rendering pipeline ed il resto, grosso modo), gli altri 4 thread sono ad uso e consumo esclusivo del gioco. Il gioco parte sempre dal thread 1.

L'allocazione sui thread hardware rimanenti è fatta in round robin, quindi se uno ha meno di 4 task in esecuzione parallela può contare sempre sul fatto che ognuno di essi viaggi su un thread dedicato, senza troppi problemi.

Se devi fare cose strane, puoi gestire i thread manualmente, settando la loro ProcessorAffinity manualmente.

Se fai pooling, devi considerare alcune cose (che sicuramente sai), come il fatto che, non appena un thread va in cache miss, la X360 switcha thread, sperando che ci sia qualcosa di utile da fare altrove, mentre il core che ha missato fa il fetch.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #9 il: Febbraio 15, 2009, 19:52:08 »

Ok prima delusione: caricando un modello3d ti carica anche le texture.
Questo apre un mondo intero di problemi pazzeschi, che da anni ed anni sono stati risolti mettendo i materiali fuori dalle mesh.

Le texture le puoi caricare anche manualmente. E' l'importer di default che carica tutto insieme. Sul manuale ci sono anche i tutorial per caricare texture manualmente.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #10 il: Febbraio 15, 2009, 20:13:09 »

Ok prima delusione: caricando un modello3d ti carica anche le texture.
Questo apre un mondo intero di problemi pazzeschi, che da anni ed anni sono stati risolti mettendo i materiali fuori dalle mesh.

Le texture le puoi caricare anche manualmente. E' l'importer di default che carica tutto insieme. Sul manuale ci sono anche i tutorial per caricare texture manualmente.

Sono un pochino più contento. Mi puoi indicare i tutorial? :)
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #11 il: Febbraio 15, 2009, 20:21:34 »

- vorrei poter controllare la pipeline per fare una prepassata con solo Z-Buffer, una con le normali ed una con il colore, per fare un po' di effetti interessanti (particelle finto volumetriche, deferred lighting e così via). Si ha un controllo del genere sulla sua pipeline?
Non sono un espertone di grafica 3d spinta, quindi non so se c'è tutto quello che cerchi, ma con XNA la pipeline la controlli tramite gli Effect che carichi ed invochi quando fai il rendering. Gli effect sono una commistione di classi e shader. Fossi in te inizierei da li e mi definirei uno o più effect che facciano ciò che vuoi.

- Ho cercato un engine per la fisica, ma non ho trovato molto, a parte un wrapper di physics non ufficiale e una versione di Newton physics solo per Windows. qualcuno sa se ci sono degli engine fisici compatibili con XNA?
Io ho giochicchiato con questa, è il port di Bullet per XNA:
http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=Managed%20Bullet%20Physics%20Library&referringTitle=Home

Bullet è una libreria fisica che viene usata anche per giochi commerciali

Questa è una libreria che supporta la soft body:

http://walaber.com/index.php?action=showitem&id=16

Tempo fa mi hanno suggerito anche questa, ma non l'ho nemmeno aperta per guardarla:

http://www.bepu-games.com/BEPUphysics/

Questa invece è ancora in embrione:

http://www.codeplex.com/JigLibX

- Esiste qualcosa per le GUI? Qualcosa di semplice e solido? Non voglio perderci troppo tempo.
Dipende dalla GUI, molti elementi di base (menù, schermate di configurazione, HUD, pannelli di debug) sono definiti nelle reference implementation, se vuoi qualcosa di più complesso ci sono diverse librerie che supportano windowing e immediate mode, ma sono tutte, IMHO, troppo complesse o verbose. Se è per tool & roba simile, sappi che su windows puoi abilitare XNA nei contesti grafici di WPF, creando GUI flash-like che supportano databinding (associare proprietà degli oggetti a stati o elementi della GUI) integrate con i motori 3D XNA. Dalla prossima versione dovrebbe essere possibile anche per 360, visto che WPF Mobile è imminente.

- Se volessi fare dello streaming di dati, avrei bisogno di preallocare dei buffer, con controllo preciso della loro dimensione per la gestione del caso peggiore. Ho un controllo approfondito sulla memoria con .NET oppure è assolutamente impredicibile come in Java?
Che intendi per controllo approfondito? Che intendi per impredicibile come Java?
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #12 il: Febbraio 15, 2009, 20:25:44 »

Ti volevo mandare delle presentazioni ma sono IMMENSE, fortunatamente stanno quasi tutte qui:

http://msdn.microsoft.com/en-us/xna/aa937787.aspx

Ci sono un sacco di risposte ai tuoi interrogativi sulla gestione della memoria, guarda in basso, le presentazioni del 2006.

Per le texture sto verificando una cosa, la soluzione dovrebbe essere banale.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #13 il: Febbraio 15, 2009, 21:07:10 »

Per controllo approfondito intendo:

alloco questo buffer che conterrà al massimo N mesh grandi al massimo N Kb (tra index e vertex buffer).
Quando carico la mesh, la carico in quei buffer.
Immagino che in qualche modo di possa, ma però ho un terribile dubbio.

Il tutto mi suona un po' come "se vuoi fare le figate, devi farti tutto da te e non usare niente di quello che c'è già".
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #14 il: Febbraio 15, 2009, 21:13:04 »

Guardati bene il capitolo Content Pipeline, c'è tutto quello che serve per capire come funziona il caricamento degli asset e come intervenire sul processing dei contenuti e dello streaming.

Il tuo problema è che XNA preottimizza tutti i content. Utilizzando il ModelContentProcessor di default, non puoi fare a meno di caricare anche le texture, visto che il sistema ottimizza lo streaming in quel modo.

Ma si può cambiare.

Scriviti un ContentProcessor custom che derivi dal ModelContentProcessor. In realtà non devi fare quasi nulla, tranne customizzarti il metodo processmaterials, per non mettere una ExternalReference alla texture. In questo modo XNA non la caricherà da sola, ma caricherà solo le informazioni dei materiali (sempre se ti servono).

I processor si chiamano in cascata per ogni content associato a quello che stai caricando, quindi ti puoi sbizzarrire.

Per le Texture, ti basta utilizzare il content processor di default, che ti instanzia una Texture2D o Texture3D a seconda delle tue necessità e quando ti serve.

In questo modo ti puoi gestire le texture, gli effetti e le tecniche manualmente durante il rendering.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"
 

Pagina creata in 0.017 secondi con 15 interrogazioni al database.