Il lavoro della content pipeline avviene tutto a tempo di compilazione. Gli importer e i processor vengono istanziati per ogni file del progetto content
quando compiliamo il progetto (Build > Build Solution
). Nella finestra Output, che ci mostra il risultato della compilazione, possiamo visualizzare il risultato della compilazione di tutti i nostri progetti.
Se un progetto XNA di gioco aveva una content reference, allora il relativo progetto content sarà stato compilato, e troveremo in Output il log di questa compilazione:
------ Rebuild All started: Project: Webcasts, Configuration: Debug x86 ------ Building large_font.spritefont -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentlarge_font.xnb Building small_font.spritefont -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentsmall_font.xnb Building BigFont.spritefont -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentBigFont.xnb Building font.spritefont -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentfont.xnb Building ship.dds -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentship.xnb Building starfield.dds -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentstarfield.xnb Building asteroid1.png -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentasteroid1.xnb Building B1_nebula01.jpg -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentB1_nebula01.xnb Building B1_nebula02.jpg -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentB1_nebula02.xnb Building B1_stars.jpg -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugContentB1_stars.xnb Webcasts -> D:CodeplexTFSXNA2009-2010WebcastsWebcastsWebcastsbinx86DebugWebcasts.exe ========== Rebuild All: 3 succeeded, 0 failed, 0 skipped ==========
Vediamo che nel progetto principale (Webcasts
) sono stati compilati tutti i files della content pipeline e, quando la compilazione di questi è terminata con successo, allora è stato prodotto l'eseguibile finale.
Risultati della compilazione
Una volta compilata la content pipeline, troviamo il risultato della compilazione nella cartella BINX86DEBUG
oppure BINX86RELEASE
, in cui l'eseguibile del nostro progetto è stato creato. Di default troveremo i nostri files compilati nella cartella Content, e ciascun file avrà estensione .xnb (XNa Binary). Questi files sono opachi, ossia contengono dati binari non facilmente leggibili senza conoscere il formato di serializzazione.
Modificare semplici opzioni
Possiamo modificare alcune opzioni della content pipeline che influenzano il modo in cui i file sono processati o importati. Tali opzioni sono disponibili espandendo il simbolo accanto al nome del content importer o del content processor.
Selezioniamo l'opzione desiderata, apparirà una tabella con una serie di righe (una per ogni proprietà modificabile) la cui prima cella è il nome della proprietà, mentre la seconda cella è il valore correntemente associato alla proprietà. Selezionando una cella qualsiasi di una proprietà comparirà in basso la descrizione della proprietà, con cui possiamo identificare l'effetto che ha il valore di questa proprietà rispetto all'importing o al processing del file.
Gli importer di default sono privi di proprietà modificabili, mentre alcuni processor di default ne hanno varie.
Parametri del ModelProcessor
Il model processor si occupa di trasformare una gerarchia di NodeContent
in un ModelContent
che sarà poi caricato in un Model disegnabile tramite il runtime di XNA.
I parametri disponibili nel ModelProcessor sono:
Parametro | Tipo | Descrizione | Valore di default |
---|---|---|---|
Color Key Color | colore | Colore che sarà usato come colore trasparente nelle textures del modello | Color.Magenta |
Color Key Enabled | booleano | Indica se il color keying è abilitato (per cui tutti i pixels il cui colore è uguale alla key avranno l'alpha impostata a 0 , ossia saranno resi trasparenti) |
true |
Generate Mipmaps | booleano | Indica se verranno generate delle mipmaps dalle textures del modello (per cui la texture sarà memorizzata a varie risoluzioni progressivamente sempre più piccole in modo da rendere più veloce il rendering di tale texture su una superficie di schermo molto piccola) | false |
Generate Tangent Frames | booleano | Indica se verranno generati i frames Tangente-Normale-Bitangente per ogni vertice del modello (per usarlo con uno shader che effettui normal mapping) | false |
Resize Textures to Power of Two | booleano | Indica se le textures del modello saranno ridimensionate alla più vicina Potenza di due per aumentare il numero di GPUs con cui il gioco sarà compatibile | false |
Scale | float | Rappresenta la scala che verrà applicata uniformemente al modello | 1.0 |
Swap Winding Order | booleano | Indica se l'ordine di memorizzazione degli indici dei triangoli va scambiato. Questo è utile per i modelli da disegnare "rovesciati", ossia visti dall'interno e non dall'esterno | false |
Texture Format | TextureProcessorOutputFormat | Un valore qualsiasi che rappresenta il formato in cui le textures del modello saranno memorizzate. Le textures possono essere lasciate intatte, convertite al formato Color oppure convertite nel formato compresso DXT Compressed | |
X Axis Rotation | intero | Gradi di rotazione da applicare ai vertici del modello intorno all'asse X | 0 |
Y Axis Rotation | intero | Gradi di rotazione da applicare ai vertici del modello intorno all'asse Y | 0 |
Z Axis Rotation | intero | Gradi di rotazione da applicare ai vertici del modello intorno all'asse Z | 0 |
Parametri dello SpriteFontTextureProcessor
Lo SpriteFontTextureProcessor
si occupa di trasformare una texture che contiene uno sprite font in uno SpriteFontContent
che sarà poi caricato in uno SpriteFont
disegnabile tramite SpriteBatch
dal runtime di XNA.
I parametri disponibili nello SpriteFontTextureProcessor
sono:
Parametro | Tipo | Descrizione | Valore di default |
---|---|---|---|
First Character | carattere | Un qualsiasi carattere che rappresenta il primo carattere dell'alfabeto rappresentato nella texture | spazio (' ') |
Parametri del Texture Processor
Il TextureProcessor
si occupa di elaborare una texture in modo che possa essere usata in uno shader, con uno SpriteBatch
o come skin di un modello dal runtime di XNA.
Tale processor viene automaticamente invocato dal ModelProcessor
per elaborarne le texture, per questo motivo i suoi parametri sono presenti anche nel ModelProcessor
. Vediamo quali sono, le relative descrizioni le troviamo nella tabella dei parametri del ModelProcessor
:
Parametro | Tipo | Default |
---|---|---|
Color Key Color | colore | Color.Magenta |
Color Key Enabled | booleano | true |
Generate Mipmaps | booleano | false |
Resize Textures to Power of Two | booleano | false |
Texture Format | TextureProcessorOutputFormat |