VS85 Team's profileXNALearnersBlogListsGuestbook Tools Help

Blog


    1/23/2008

    Primi passi con la Content Pipeline

    Versione inglese

    Ciao a tutti! Sono Giuseppe Maggiore, e in questo tutorial vi illustrero' uno degli aspetti meno blasonati, seppur tra i piu' importanti, di XNA. Costruiremo un compilatore di contenuti personalizzato, o per dirla in inglese una Custom Content Pipeline. Lo scopo e' quello di costruire un assembly (una dll) contenente una serie di classi e oggetti che vanno a precondizionare i file di contenuto in modo da semplificarne il caricamento nel nostro gioco. Suona complicato? In effetti di primo acchito puo' sembrare un po' un eccesso andare a complicare qualcosa di immediato e banale come importare file nel proprio gioco. A onor del vero pero', bisogna dire che c'e' ben di piu' sotto la superficie: prima di tutto, questa architettura e' pensata per astrarre il caricamento di file in tutto XNA, soprattutto considerata l'XBox. Caricare files potrebbe essere immediato sotto Windows, ma non necessariamente la stessa cosa si applica all'XBox 360. Inoltre, tenete presente che non esiste un caricamento diretto dei file di gioco, perche' un minimo di processing sara' sempre e comunque necessario per convertire i bits grezzi in una rappresentazione significativa in classi. Il diagramma con cui rompiamo il problema in sotto problemi e' questo:

    image

    Un artista o un designer crea il file di contenuto. Tale file viene caricato dall'importer nel suo formato ancora non elaborato, e passato al processor che carica i dati in una classe dopo averli interpretati. Il processor passa i dati al writer, che li salva direttamente dalla classe in un formato di dati intermedio: un file .xnb. Quando il gioco viene lanciato, il file .xnb sara' ricaricato direttamente (o al piu' una versione un po' rifinita pronta per il rendering) attraverso il reader. La soluzione di Visual Studio contenente un gioco con un custom processor e' simile a quella in figura:

    image

    il primo progetto e' la custom pipeline, che infatti contiene importer, processor, writer e reader. L'altro progetto, il gioco vero e proprio, contiene due riferimenti all'assembly della custom pipeline: uno per il tempo di compilazione dei contenuti, che usa importer-processor e writer, l'altro per il tempo di esecuzione del gioco, che usa il reader. Nel progetto dei contenuti del gioco vediamo anche un file di estensione .custom, l'estensione personalizzata che la nostra content pipeline gestisce.

    I sorgenti sono online qui, mentre il video del tutorial si trova da quest'altra parte. Includo anche una versione embedded dello stesso video per chi non potesse/volesse scaricarlo:

     

    Comments (13)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    When the<a href="http://www.batteryfast.com.au/dell/latitude-cs-series.htm dell latitude cs series battery
    When the<a href="http://www.batteryfast.com.au/dell/xps-m1530.htm dell xps m1530 battery
    When the<a href="http://www.batteryfast.com.au/dell/tk330.htm dell tk330 battery
    When the<a href="http://www.batteryfast.com.au/hp/pavilion-dv4.htm hp pavilion dv4 battery
    When the<a href="http://www.batteryfast.com.au/hp/pavilion-dv5.htm hp pavilion dv5 battery
    When the<a href="http://www.batteryfast.com.au/hp/pavilion-dv6.htm hp pavilion dv6 battery
    When the<a href="http://www.batteryfast.com.au/hp/ks524aa.htm hp ks524aa battery
    When the<a href="http://www.batteryfast.com.au/hp/pavilion-zd7000.htm hp pavilion zd7000 battery
    When the<a href="http://www.batteryfast.com.au/hp/338794-001.htm hp 338794-001 battery
    When the<a href="http://www.batteryfast.com.au/hp/f1739a.htm hp f1739a battery
    When the<a href="http://www.batteryfast.com.au/hp/f2019a.htm hp f2019a battery
    When the<a href="http://www.batteryfast.com.au/hp/f2024.htm hp f2024 battery
    When the<a href="http://www.batteryfast.com.au/hp/f4486a.htm hp f4486a battery
    When the<a href="http://www.batteryfast.com.au/hp/f4486b.htm hp f4486b battery
    When the<a href="http://www.batteryfast.com.au/compaq/354126-001.htm compaq 354126-001 battery
    When the<a href="http://www.batteryfast.com.au/compaq/405231-001.htm compaq 405231-001 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/pa3384u-1bas.htm toshiba pa3384u-1bas battery
    When the<a href="http://www.batteryfast.com.au/toshiba/satellite-a60.htm toshiba satellite a60 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/satellite-a65.htm toshiba satellite a65 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/satellite-pro-a60.htm toshiba satellite pro a60 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/pabas073.htm toshiba pabas073 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/pabas075.htm toshiba pabas075 battery
    When the<a href="http://www.batteryfast.com.au/hp/nx6120.htm hp nx6120 battery
    When the<a href="http://www.batteryfast.com.au/hp/nc6100.htm hp nc6100 battery
    When the<a href="http://www.batteryfast.com.au/hp/nc6120.htm hp nc6120 battery
    When the<a href="http://www.batteryfast.com.au/hp/nc6230.htm hp nc6230 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/satellite-m50.htm toshiba satellite m50 battery
    When the<a href="http://www.batteryfast.com.au/uniwill/255-3s4400-g1l1.htm uniwill 255-3s4400-g1l1 battery
    When the<a href="http://www.batteryfast.com.au/hp/hstnn-db17.htm hp hstnn-db17 battery
    When the<a href="http://www.batteryfast.com.au/sony/vgp-bps2b.htm sony vgp-bps2b battery
    When the<a href="http://www.batteryfast.com.au/sony/vgp-bps2c.htm sony vgp-bps2c battery
    When the<a href="http://www.batteryfast.com.au/toshiba/pa3399u-1brs.htm toshiba pa3399u-1brs battery
    When the<a href="http://www.batteryfast.com.au/acer/batbl50l6.htm acer batbl50l6 battery
    When the<a href="http://www.batteryfast.com.au/hp/dv9600.htm hp dv9600 battery
    When the<a href="http://www.batteryfast.com.au/hp/presario-x1300.htm hp presario x1300 battery
    When the<a href="http://www.batteryfast.com.au/asus/a42-m6.htm asus a42-m6 battery
    When the<a href="http://www.batteryfast.com.au/asus/a42-m6-silver.htm asus a42-m6 silver battery
    When the<a href="http://www.batteryfast.com.au/asus/a3000.htm asus a3000 battery
    When the<a href="http://www.batteryfast.com.au/toshiba/satellite-a100.htm toshiba satellite a100 battery
    When the<a href="http://www.batteryfast.com.au/acer/bat30n3l.htm acer bat30n3l battery
    When the<a href="http://www.batteryfast.com.au/dell/nt379.htm dell nt379 battery
    When the<a href="http://www.batteryfast.com/compaq/presario-c700.htm compaq presario c700 battery
    When the<a href="http://www.batteryfast.com.au/dell/d620.htm dell d620 battery
    When the<a href="http://www.batteryfast.com.au/dell/d630.htm dell d630 battery
    When the<a href="http://www.batteryfast.com.au/dell/312-039.htm dell 312-039 battery
    4 days ago
    http://www.shopgogo.ca/dell/inspiron-9300.htm dell inspiron 9300 battery
    http://www.shopgogo.ca/hp/dv8000.htm hp dv8000 battery
    http://www.shopgogo.ca/hp/dv1000.htm hp dv1000 battery
    http://www.shopgogo.ca/hp/dv4000.htm hp dv4000 battery
    http://www.shopgogo.ca/hp/r3000.htm hp r3000 battery
    http://www.shopgogo.ca/dell/inspiron-mini-9.htm dell inspiron mini 9 battery
    http://www.shopgogo.ca/dell/inspiron-9400.htm dell inspiron 9400 battery
    http://www.shopgogo.ca/acer/aspire-5520.htm acer aspire 5520 battery
    http://www.shopgogo.ca/acer/aspire-5920.htm acer aspire 5920 battery
    http://www.shopgogo.ca/dell/inspiron-6400.htm dell inspiron 6400 battery
    http://www.shopgogo.ca/ibm/thinkpad-x60.htm ibm thinkpad x60 battery
    http://www.shopgogo.ca/ibm/thinkpad-x60s.htm ibm thinkpad x60s battery
    http://www.shopgogo.ca/hp/zt3000.htm hp zt3000 battery
    http://www.shopgogo.ca/hp/pavilion-zv5000.htm hp pavilion zv5000 battery
    http://www.shopgogo.ca/hp/pavilion-zv6000.htm hp pavilion zv6000 battery
    http://www.shopgogo.ca/hp/pavilion-zd8000.htm hp pavilion zd8000 battery
    http://www.shopgogo.ca/hp/pavilion-zx5000.htm hp pavilion zx5000 battery
    http://www.shopgogo.ca/hp/presario-v4000.htm hp presario v4000 battery
    http://www.shopgogo.ca/hp/presario-v2000.htm hp presario v2000 battery
    http://www.shopgogo.ca/hp/presario-m2000.htm hp presario m2000 battery
    http://www.shopgogo.ca/compaq/presario-v4000.htm compaq presario v4000 battery
    http://www.shopgogo.ca/compaq/presario-v2000.htm compaq presario v2000 battery
    http://www.shopgogo.ca/compaq/presario-v3000.htm compaq presario v3000 battery
    http://www.shopgogo.ca/compaq/presario-v6000.htm compaq presario v6000 battery
    http://www.shopgogo.ca/compaq/presario-c700.htm compaq presario c700 battery
    http://www.shopgogo.ca/dell/fk890.htm dell fk890 battery
    http://www.shopgogo.ca/toshiba/pa3593u-1bas.htm toshiba pa3593u-1bas battery
    http://www.shopgogo.ca/hp/m2000.htm hp m2000 battery
    http://www.shopgogo.ca/hp/338794-001.htm hp 338794-001 battery
    http://www.shopgogo.ca/hp/395789-001.htm hp 395789-001 battery
    http://www.shopgogo.ca/compaq/116314-001.htm compaq 116314-001 battery
    http://www.shopgogo.ca/toshiba/satellite-a70.htm toshiba satellite a70 battery
    http://www.shopgogo.ca/compaq/319411-001.htm compaq 319411-001 battery
    http://www.shopgogo.ca/hp/346970-001.htm hp 346970-001 battery
    http://www.shopgogo.ca/hp/367759-001.htm hp 367759-001 battery
    http://www.shopgogo.ca/laptop battery
    http://www.shopgogo.ca/laptop batteries
    4 days ago
    Aug. 30
    Picture of Anonymous
    Apr. 10
    VS85 Teamwrote:
    @Giovanni Luca: Bene, bene! Come hai visto negli ultimi giorni sono usciti ben 2 nuovi tutorial (input e windows form) e a breve dovrebbero uscirne altri due (audio e testo). Grazie dei complimenti e continua a seguirci!
     
    Giulia Costantini
    Mar. 17
    salve ragazzi ottimo lavoro ho scaricato da 2 giorni XNA e devo dire che mis ot divertendo a metterci le mani in pasta :D
    sono anche riuscito a caricare dei miei modelli fatti con blender,non vedo l'ora che i tutorial continuino cosi potrò usare le vostre implementazioni.
    Mar. 15
    VS85 Teamwrote:
    Allora: i prossimi tutorials saranno input e testo, seguito da audio e quindi il nostro primo gioco completo di tutte le sue parti, in cui carichiamo modelli creati con SoftImage.
     
    Quindi ci saranno alcune estensioni al gioco (menu, stato di gioco, attivatori, integrazione con python) e magari anche l'integrazione del riconoscimento vocale.
     
    A seguire cominceremo a buttarci sugli shaders cominciando con normal mapping (normal mapping == bump mapping, per la cronaca :) ) fino all'illuminazione con deferred shading e alle ombre dinamiche basate su shadow mapping. Da li, non ho proprio idea di dove andremo :). Probabilmente parleremo di MS GLEE e reti neurali, alcuni effetti speciali (acqua in primis) e se fosse il caso e avessimo tempo toccheremo anche il tema AI con algoritmi genetici. Fisica non credo proprio...
     
    Pero' andiamoci piano perche' abbiamo appena concluso la sessione di esami, quindi ora ci toccano un paio di settimane di relax e poi riprendiamo!!!
    Feb. 19
    Alexwrote:
    Certo, i modelli li puoi fare con 3dsmax... ma quì stiamo parlando di come funziona XNA in tutti i suoi aspetti partendo dalle basi... che poi i modelli uno se li faccia con questo o quel programma è irrilevante.
    Gli argomenti che hai segnalato riguardano tutto il settore pratico... se permetti un pò di teoria ci vuole. Anche io sono all'inizio, anzi, meno che all'inizio... però voglio capire i concetti teorici prima di tuffarmi nella pratica.

    Comunque te l'ha confermato Giulia nel commento precedente, saranno trattati molti degli argomenti che ti interessano come l'input, l'audio, le collisioni, ecc.

    Anzi, ne approfitto... si può fare una previsione di uscita sulla prossima pubblicazione? E cosa riguarderà?
    Feb. 19
    Picture of Anonymous
    (nessun nome) wrote:


     Sono d’accordo sul fatto che i tutorial debbano avere una difficoltà crescente e partire dalle basi. Ci mancherebbe altro!
    Quello a cui pensavo riguardava la creazione di modelli in runtime che secondo me sarà poco utilizzata nella creazione di un videogioco 3D, ammenochè non nascondano una qualche importanza che al momento ignoro. I modelli per un gioco sono di norma creati con 3DS Max o simili. Perchè devo creare una sfera scrivendo codice che mi confonde ulteriormente le cose quando la posso importare? Sicuramente (immagino) lo fate per spiegare meglio come lavora XNA. O magari usando oggetti creati in runtime si risparmia memoria di qualche tipo, ma in realtà i modelli base non li userò mai e dovrò comunque importare oggetti creati con modellatori.
    Magari sbaglio eh, io sono alle prime armi come tutti i lettori quì.

    Se posso fare una lista di argomenti che vorrei trovare nei tutorial sono, in ordine:

    1 - Come dividere il progetto in diversi file .cs. (Ho notato che i progetti delle demo più complesse sono divisi in file .cs, ognuno che riguarda un oggetto o un argomento. Questo rende il codice meno incasinato e più comprensibile).
    2 - Importazione di oggetti .X (Come posso importare sia l'oggetto che il materiale con tutte le texture anche su più canali? Così usando il "render to texture" potrei anche evitare tante luci ed ombre in realtime.. E la suddivisione in mesh come funziona? Poi, magari più avanti con i tutorial, i bones e le animazioni...).

    3 – Menù e fasi di gioco..( Come posso dire al gioco che quando parte deve visualizzare tale schermata o magari caricare tale filmato e non partire con il rendering del gioco..)
    4 - Luci  (non si possono "attivare" direttamente le luci che inserisco nel file .X nel 3DS?  Questo renderebbe la cosa molto più immediata).
    5 - Input (da tastiera e da JoyXbox è abbastanza intuitivo, ma se io volessi usare un semplice joypad del PC? Non si può?!)
    6 - Collisioni (in primis quella con il piano di gioco, rilevando l'altezza e l'orientamento della normale...)
    7 - Ombre ..
    8 - Fisica (Rimbalzi, gravità...)
    9 - Sonoro..
    10 - Effetti vari (Fuoco, laser, fumo ecc...)
    11 - Normal Maps e Bump Mapping (chiedo troppo?:))
    12 - IA..
    13 - Pubblicazione finale..(Ma sarà sempre necessario che l'utente debba installare XNA sul proprio computer per far girare un gioco in XNA?)

    Feb. 18
    VS85Teamwrote:
    Ciao, vorrei confermare quanto detto nel precedente commento: le basi si trovano nei primi tutorial che abbiamo postato; manca ancora qualche argomento che inseriremo a breve (testo, input, audio). Poi mostreremo la scrittura di un piccolo gioco completo, in cui vedremo per esempio le collisioni.
    Per quanto riguarda invece luci e ombre, queste fanno parte dei tutorial "avanzati", che cominceremo a postare quando avremo completato con quelli di base.
    Per quanto riguarda la domanda sulle matrici: le matrici View e Projection sono uniche (definiscono dove sta la telecamera e il campo visivo); invece la matrice World e' collegata ad ogni singolo oggetto e ne definisce la posizione nello spazio, la rotazione, la scala, ecc.. Se ancora non ti sembra chiaro, prova a leggere qui: http://www.gameprog.it/?resource=1132, dove si trova una versione "scritta" del nostro tutorial.
    A presto!
     
    Giulia
    Feb. 10
    Alexwrote:
    ho finito adesso di guardare questo tutorial (ieri avevo guardato i primi 4)... davvero molto bello e istruttivo. Mi è piaciuto un sacco.
    Feb. 10
    Alexwrote:
    ma... guarda che le basi sono proprio quelle che si trovano nei primi 4 tutorial.
    Tu non vuoi le basi, vuoi conoscere argomenti molto molto avanzati, cosa che naturalmente non potevano inserire nei tutorial per beginner. Ma se elimini le tappe iniziali rischi di non capirci nulla e fare le cose solo meccanicamente.

    Invece loro sono stati bravi ad inserire nei primi 4 tutorial le spiegazioni di base per incominciare a capire non solo xna nella pratica ma anche come funziona in linea teorica. Il codice deve servire solo a stampare bene i concetti esposti... poi, capita la teoria una usa le conoscene come meglio crede... il codice pronto non serve a molto se non sai come usarlo.

    Attenzione! Non sto dicendo che stai chiedendo la pappina già pronta. Sto dicendo che il rischio, senza avere le conoscenze di base, è quello.

    Questo è quello che penso io, poi ognuno fa come vuole... ci mancherebbe.
    Feb. 10
    Picture of Anonymous
    (nessun nome) wrote:
    Salve, volevo chiedervi se era possibile avere un tutorial base per XNA. E per base intendo proprio "terra terra":).
    Mettiamo conto che l'utente a cui debba essere destinato il tutorial abbia solo un infarinatura sulla programmazione in generale, conoscendo le istruzioni base ma che sia alle prime armi con un progetto XNA.

    In pratica, dopo un po di prove, le domande che mi sono posto sono :
    Come posso inserire luci ed ombre? Le devo mettere nel file FBX?
    effect.View, effect.Projection, effect.World..sono cose che devo definire su ogni modello? Perchè se la telecamera è una?
    Come posso determinare le collisioni? Devo estrarre il Vector3 di una mesh ed usare le BoundingSphere? E se la mesh si trova all'interno di un modello con più mesh, come faccio? 

    Non per criticare i vostri tutorial che sono davvero ben fatti, ma credo che certi argomenti non li affronterò mai, sicuramente non fino a quando non avrò capito le basi.

    Ciao e buon lavoro!

    Feb. 8

    Trackbacks

    The trackback URL for this entry is:
    http://vs85team.spaces.live.com/blog/cns!B49FFA0EB319A219!235.trak
    Weblogs that reference this entry
    • None