Utilizzo delle risorse tridimensionali nel gioco o nell'app
In questo articolo viene descritto come utilizzare Visual Studio per elaborare risorse 3D e includerle nelle compilazioni.
Dopo avere utilizzato gli strumenti in Visual Studio per creare asset tridimensionali, è necessario utilizzarli nell'applicazione.Ma prima di poterli utilizzare, gli asset devono essere trasformati in un formato che DirectX può comprendere.Per trasformare le risorse, in Visual Studio sono disponibili personalizzazioni di compilazione per ogni tipo di risorsa che può essere prodotto.Per includere le risorse nella compilazione, è sufficiente configurare il progetto in modo da utilizzare le personalizzazioni di compilazione, aggiungere le risorse al progetto e configurarle in modo che utilizzino la personalizzazione di compilazione corretta.Successivamente, è possibile caricare gli asset nell'applicazione e utilizzarli creando e riempiendo le risorse DirectX come in qualsiasi altra applicazione DirectX.
Configurazione del progetto
Prima di poter distribuire gli asset 3D come parte della compilazione, Visual Studio deve conoscere i tipi di asset che si desidera distribuire.In Visual Studio sono già noti molti tipi di file comuni, ma dal momento che solo determinati tipi di applicazioni utilizzano le risorse 3D, Visual Studio non presuppone che un progetto sarà compilato in uno di questi tipi di file.È possibile indicare a Visual Studio che l'applicazione utilizza questi tipi di risorse utilizzando le personalizzazioni di compilazione che vengono fornite per ogni tipo di risorsa. Le personalizzazioni di compilazione sono dei file che indicano a Visual Studio come elaborare i diversi tipi di file in modo utile.Poiché queste personalizzazioni si applicano a livello di singolo progetto, l'unica operazione da effettuare consiste nell'aggiungere le personalizzazioni adatte al progetto.
Per aggiungere le personalizzazioni compilazioni al progetto
In Esplora soluzioni aprire il menu di scelta rapida del progetto e quindi scegliere Personalizzazioni compilazione.Verrà visualizzata la finestra di dialogo File di personalizzazione compilazioni di Visual C++.
È necessario aggiungere solo una volta queste personalizzazioni di compilazione a Visual Studio, se già sono state aggiunte, è possibile ignorare questo passaggio.
Scegliere il pulsante Trova esistente quindi passare alla directory di installazione di Visual Studio\Common7\IDE\Extensions\Microsoft\VSGraphics\, contenente le tre personalizzazioni compilazione che supportano la compilazione degli asset tridimensionali.Selezionare uno dei file di personalizzazione della compilazione, ad esempio ImageContentTask.targets, e quindi scegliere il pulsante Apri.Quando viene visualizzato il messaggio in cui viene chiesto se si desidera aggiungere la directory al percorso di ricerca di personalizzazioni di compilazione, fare clic su Sì.Tutte e tre le personalizzazioni della compilazione saranno disponibili.
Scegliere il pulsante Aggiorna elenco per aggiornare il controllo GridView File di personalizzazione compilazione disponibili.
Nel controllo GridView File di personalizzazione compilazioni disponibili selezionare le caselle di controllo corrispondenti ai tipi di risorsa che si desidera utilizzare nel progetto, come descritto nella tabella:
Tipo di asset
Nome personalizzazione compilazioni
Immagini e trame
ImageContentTask (con estensione targets, props)
Modelli 3D
MeshContentTask(.targets, .props)
Shader
ShaderGraphContentTask(.targets, .props)
Scegliere il pulsante OK.
Inclusione di risorse nella build
Ora che il progetto conosce i diversi tipi di risorse 3D che si desidera utilizzare, è necessario indicare quali file sono risorse 3D e i tipi di soluzioni sono.
Per aggiungere una risorsa alla compilazione
In Esplora soluzioni nel proprio progetto, aprire il menu di scelta rapida di un asset e quindi selezionare Proprietà.Verrà visualizzata la finestra di dialogo Pagina proprietà dell'asset.
Assicurarsi che le proprietà Configurazione e Piattaforma siano impostate sui valori a cui si desidera applicare le modifiche.
In Proprietà di configurazione scegliere Generale, quindi nella griglia delle proprietà, in Generale, impostare la proprietà Tipo di elemento sul tipo appropriato di elemento di pipeline di contenuto.Ad esempio, per un file di trama o di immagini, scegliere Pipeline contenuto immagine.
Importante Per impostazione predefinita, Visual Studio presuppone che molti tipi di file di immagine devono essere suddivisi in categorie utilizzando il tipo di elemento Immagine compilato in Visual Studio.Pertanto, è necessario modificare la proprietà Tipo di elemento di ogni immagine che si desidera elaborare tramite la pipeline del contenuto di immagine.Altri tipi di file di origine del contenuto della pipeline per i modelli 3D e impostazioni predefinite visive grafiche di shader a Tipo di elementocorretto.
Scegliere il pulsante OK.
Di seguito sono riportati i tre tipi di elementi di pipeline del contenuto e i tipi di file di output e di origine associati.
Tipo di elemento |
Tipi di file di risorse |
Formato del file di output |
---|---|---|
Pipeline contenuto immagine |
Portable Network Graphics (estensione png) JPEG (.jpg, .jpeg, .jpe, .jfif) Superficie di disegno diretta (.dds) Graphics Interchange Format (estensione gif) Bitmap (.bmp, .dib) Tagged Image File Format (.tif, .tiff) Targa (.tga) |
Superficie DirectDraw (con estensione dds) |
Pipeline del contenuto di mesh |
File di interscambio AutoDesk FBX (.fbx) File Collada DAE (.dae) File Wavefront OBJ (.obj) |
File di mesh tridimensionale (.cmo) |
Pipeline contenuto shader |
Visual Effect Graph (.dgsl) |
Output shader compilato (.cso) |
Configurazione delle proprietà della pipeline del contenuto dell'asset
È possibile impostare le proprietà della pipeline del contenuto di ciascun file di risorsa in modo che sia compilato in un modo specifico.
Per configurare le proprietà della pipeline del contenuto
In Esplora soluzioni nel proprio progetto aprire il menu di scelta rapida del file di risorsa e quindi scegliere Proprietà.Verrà visualizzata la finestra di dialogo Pagina proprietà dell'asset.
Assicurarsi che le proprietà Configurazione e Piattaforma siano impostate sui valori a cui si desidera applicare le modifiche.
In Proprietà di configurazione, scegliere il nodo di pipeline di contenuto, ad esempio Pipeline contenuto immagine per risorsa di immagine e trama, quindi nella griglia delle proprietà impostare le proprietà sui valori appropriati.Ad esempio, per generare le mipmap per un asset di trama in fase di compilazione, impostare la proprietà Genera MIP su Sì.
Scegliere il pulsante OK.
Configurazione della pipeline contenuto immagine
Quando si utilizza lo strumento della pipeline del contenuto di immagine per compilare una risorsa di trama, è possibile comprimere la trama in diversi modi, indicare se i livelli MIP devono essere generati in fase di compilazione e modificare il nome del file di output.
Proprietà |
Descrizione |
---|---|
Comprimi |
Specifica il tipo di compressione utilizzato per il file di output. Sono disponibili le seguenti opzioni:
Per informazioni sui formati di compressione supportati nelle diverse versioni di DirectX, vedere Guida alla programmazione per DXGI. |
Genera MIP |
Sì per generare una catena MIP completa in fase di compilazione e per includerla nel file di output; in caso contrario, No.Se No e il file di origine contiene già una catena mipmap, il file di output avrà una catena MIP; in caso contrario, il file di output non avrà alcuna catena MIP. |
Output del contenuto |
Specifica il nome del file di output.
Importante
La modifica dell'estensione del nome file di output non ha effetto sul formato del file.
|
Configurazione della pipeline del contenuto di mesh
Quando si utilizza lo strumento della pipeline del contenuto di mesh per compilare una risorsa di mesh, è possibile modificare il nome del file di output.
Proprietà |
Descrizione |
---|---|
Output del contenuto |
Specifica il nome del file di output.
Importante
La modifica dell'estensione del nome file di output non ha effetto sul formato del file.
|
Configurazione della pipeline contenuto shader
Quando si utilizza lo strumento della pipeline del contenuto di shader per compilare una risorsa di shader, è possibile modificare il nome del file di output.
Proprietà |
Descrizione |
---|---|
Output del contenuto |
Specifica il nome del file di output.
Importante
La modifica dell'estensione del nome file di output non ha effetto sul formato del file.
|
Caricamento e utilizzo di risorse 3D in fase di esecuzione
Utilizzo di trame e immagini
Direct3D fornisce funzioni per creare risorse di trama.In Direct3D 11, la libreria dell'utilità D3DX11 fornisce funzioni aggiuntive per creare risorse di trama e visualizzazioni di risorse direttamente dai file di immagine.Per ulteriori informazioni su come creare una risorsa di trama in Direct3D 11, vedere l'articolo relativo alle Trame.Per ulteriori informazioni su come utilizzare la raccolta D3DX11 per creare una risorsa di trama o una visualizzazione risorse da un file di immagine, vedere Procedura: Inizializzare una trama da un file.
Utilizzo di modelli 3D
Direct3D 11 non fornisce funzioni per creare risorse dai modelli tridimensionali.Al contrario, è necessario scrivere il codice che legge il file di modello 3D e crea i vertex buffer e index buffer che rappresentano il modello 3D e le risorse eventualmente richieste dal modello, ad esempio le trame o gli shader.
Utilizzo di shader
Il direct3d fornisce funzioni per creare risorse e associazione di shader relativi alla pipeline programmabile grafico.Per ulteriori informazioni su come creare una risorsa di shader in direct3d e associare alla pipeline, vedere Guida di programmazione per HLSL.
Nella pipeline di grafica programmabile ogni fase della pipeline deve fornire alla fase successiva della pipeline un risultato formattato in modo comprensibile.Poiché la finestra di Progettazione di shader può creare solo i pixel shader, questo significa che il metodo è attivo nell'applicazione per verificare che i dati che riceve siano nel formato previsto.Diverse fasi programmabili di shader si verificano prima del pixel shader ed eseguono trasformazioni geometriche: vertex shader, hull shader, domain shader e geometry shade.Anche la fase di tessellatura non programmabile si verifica prima del pixel shader.Indipendentemente da quale di queste fasi direttamente precede il pixel shader, deve fornire il risultato nel formato seguente:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float4 diffuse : COLOR;
float2 uv : TEXCOORD0;
float3 worldNorm : TEXCOORD1;
float3 worldPos : TEXCOORD2;
float3 toEye : TEXCOORD3;
float4 tangent : TEXCOORD4;
float3 normal : TEXCOORD5;
};
A seconda dei nodi della finestra di progettazione dello shader utilizzati nel relativo shader, potrebbe essere necessario fornire dati aggiuntivi nel formato in base alle seguenti definizioni:
Texture2D Texture1 : register( t0 );
Texture2D Texture2 : register( t1 );
Texture2D Texture3 : register( t2 );
Texture2D Texture4 : register( t3 );
Texture2D Texture5 : register( t4 );
Texture2D Texture6 : register( t5 );
Texture2D Texture7 : register( t6 );
Texture2D Texture8 : register( t7 );
TextureCube CubeTexture1 : register( t8 );
TextureCube CubeTexture2 : register( t9 );
TextureCube CubeTexture3 : register( t10 );
TextureCube CubeTexture4 : register( t11 );
TextureCube CubeTexture5 : register( t12 );
TextureCube CubeTexture6 : register( t13 );
TextureCube CubeTexture7 : register( t14 );
TextureCube CubeTexture8 : register( t15 );
SamplerState TexSampler : register( s0 );
cbuffer MaterialVars : register (b0)
{
float4 MaterialAmbient;
float4 MaterialDiffuse;
float4 MaterialSpecular;
float4 MaterialEmissive;
float MaterialSpecularPower;
};
cbuffer LightVars : register (b1)
{
float4 AmbientLight;
float4 LightColor[4];
float4 LightAttenuation[4];
float3 LightDirection[4];
float LightSpecularIntensity[4];
uint IsPointLight[4];
uint ActiveLights;
}
cbuffer ObjectVars : register(b2)
{
float4x4 LocalToWorld4x4;
float4x4 LocalToProjected4x4;
float4x4 WorldToLocal4x4;
float4x4 WorldToView4x4;
float4x4 UVTransform4x4;
float3 EyePosition;
};
cbuffer MiscVars : register(b3)
{
float ViewportWidth;
float ViewportHeight;
float Time;
};
Vedere anche
Attività
Procedura: esportare uno shader