Usare asset 3D nel gioco o nell'app
Questo articolo descrive come usare Visual Studio per elaborare gli asset 3D e includerli nelle compilazioni.
Dopo aver usato gli strumenti in Visual Studio per creare asset 3D, il passaggio successivo consiste nell'usarli nell'app. Tuttavia, prima di poterli usare, gli asset devono essere trasformati in un formato comprensibile da DirectX. Per aiutarti a trasformare i tuoi asset, Visual Studio offre personalizzazioni di compilazione per ogni tipo di asset che può produrre. Per includere gli asset nella compilazione, è necessario configurare il progetto in modo da usare le personalizzazioni della compilazione, aggiungere gli asset al progetto e configurare gli asset in modo da usare la personalizzazione corretta della compilazione. Successivamente, è possibile caricare gli asset nell'app e usarli creando e riempiendo risorse DirectX esattamente come in qualsiasi altra app DirectX.
Configurare il progetto
Prima di poter distribuire gli asset 3D come parte della compilazione, Visual Studio deve conoscere i tipi di asset da distribuire. Visual Studio conosce già molti tipi di file comuni, ma poiché solo determinati tipi di app usano asset 3D, Visual Studio non presuppone che un progetto crei questi tipi di file. È possibile indicare a Visual Studio che l'app usa questi tipi di asset usando le personalizzazioni di compilazione : file che indicano a Visual Studio come elaborare diversi tipi di file in modo utile, forniti per ogni tipo di asset. Poiché queste personalizzazioni vengono applicate per ogni progetto, è sufficiente aggiungere le personalizzazioni appropriate al progetto.
Per aggiungere le personalizzazioni della compilazione al tuo progetto
In Esplora soluzioniapri il menu di scelta rapida per il progetto, e quindi seleziona Dipendenze di compilazione>Personalizzazioni di compilazione.
Viene visualizzata la finestra di dialogo file di personalizzazione della compilazione di Visual C++.
Nei File di personalizzazione della compilazione disponibili, selezionare le caselle di controllo corrispondenti ai tipi di asset da usare nel progetto, come descritto nella tabella seguente:
Tipo di asset Nome personalizzazione compilazione Trame e immagini ImageContentTask(.targets, .props) Modelli 3D MeshContentTask(.targets, .props) Shader ShaderGraphContentTask(.targets, .props) Nota
Visual Studio 2022 17.9.3 ha rimosso il supporto per l'editor di modelli e MeshContentTask a causa di problemi di sicurezza in Autodesk FBX SDK. Vedere CVE-2023-27911.
Scegliere il pulsante OK.
Includere gli asset nella compilazione
Ora che il progetto conosce i diversi tipi di asset 3D da usare, il passaggio successivo consiste nel indicare quali file sono asset 3D e quali tipi di asset sono.
Per aggiungere un asset al build
Nella Esplora soluzioni, nel tuo progetto, apri il menu di scelta rapida di un asset e quindi scegli Proprietà.
Viene visualizzata la finestra di dialogo della pagina delle proprietà dell'asset.
Assicurarsi che le proprietà di configurazione e Platform siano impostate sui valori a cui applicare le modifiche.
In Proprietà della configurazione, scegliere Impostazioni generalie quindi, nella griglia delle proprietà, in Impostazioni generali, impostare la proprietà Tipo di elemento sul tipo di elemento della pipeline di contenuti appropriato. Ad esempio, per un file di immagine o trama, scegliere Pipeline di Contenuto delle Immagini.
Importante
Per impostazione predefinita, Visual Studio presuppone che molti tipi di file di immagine debbano essere classificati usando il tipo di elemento immagine integrato in Visual Studio. È pertanto necessario modificare la proprietà tipo di elemento di ogni immagine che si desidera elaborare nella pipeline del contenuto dell'immagine. Altri tipi di file di origine della pipeline di contenuto per i modelli 3D e la grafica degli shader visivi impostano predefinito il corretto Tipo di Elemento.
Scegliere il pulsante OK.
Di seguito sono riportati i tre tipi di elemento della pipeline di contenuto e i relativi tipi di file di origine e output associati.
Tipo di elemento | Tipi di file di origine | Formato del file di output |
---|---|---|
Pipeline del contenuto dell'immagine | Grafica di rete portabile (.png) JPEG (.jpg, .jpeg, .jpe, .jfif) Superficie di disegno diretta (.dds) Formato interscambio grafico (.gif) Bitmap (.bmp, .dib) Formato file immagine con tag (.tif, .tiff) Targa (.tga) |
DirectDraw Surface (.dds) |
Pipeline dei contenuti mesh | File Interscambio Autodesk FBX (.fbx) Collada DAE File (.dae) File Wavefront OBJ (.obj) |
File mesh 3D (cmo) |
pipeline di contenuto shader | Grafico dello shader visivo (.dgsl) | Output dello shader compilato (.cso) |
Configurare le proprietà della pipeline dei contenuti degli asset
È possibile impostare le proprietà della pipeline di contenuto di ogni file di asset in modo che venga compilato in modo specifico.
Per configurare le proprietà della pipeline del contenuto
In Esplora soluzioni, nel tuo progetto, apri il menu di scelta rapida per il file delle risorse e poi scegli Proprietà.
Appare la finestra di dialogo della pagina delle proprietà dell'asset.
Assicurarsi che le proprietà di Configuration e Platform siano impostate sui valori a cui applicare le modifiche.
In Proprietà di Configurazione, scegliere il nodo della Pipeline di Contenuto (ad esempio, Pipeline di Contenuto Immagine per risorse di texture e immagine) e quindi nella griglia delle proprietà impostare le proprietà sui valori appropriati. Ad esempio, per generare mipmap per un asset di trama in fase di compilazione, impostare la proprietà Genera Mips su Sì.
Scegliere il pulsante OK.
Configurazione della pipeline dei contenuti immagine
Quando si usa lo strumento della pipeline del contenuto dell'immagine per creare un asset di trama, è possibile comprimere la trama in vari 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. Le opzioni disponibili sono: - nessuna compressione - BC1_UNORM compressione - compressione BC1_UNORM_SRGB - compressione BC2_UNORM - compressione BC2_UNORM_SRGB - compressione BC3_UNORM - compressione BC3_UNORM_SRGB - compressione BC4_UNORM - compressione BC4_SNORM - BC5_UNORM compressione - compressione BC5_SNORM - BC6H_UF16 compressione - compressione BC6H_SF16 - compressione BC7_UNORM - compressione BC7_UNORM_SRGB Per informazioni sui formati di compressione supportati in versioni diverse di DirectX, vedere Programming Guide for DXGI. |
Convertire in formato alfa pre-moltiplicato | Sì per convertire l'immagine in formato alfa pre-moltiplicato nel file di output; in caso contrario, No. Viene modificato solo il file di output, l'immagine di origine rimane invariata. |
genera MIPS | Sì per generare una catena MIP completa durante la fase di compilazione e includerla nel file di output; altrimenti, No. Se Noe 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: Modifica dell'estensione del nome file del file di output non ha alcun effetto sul relativo formato di file. |
Configurazione della pipeline di contenuto mesh
Quando si utilizza lo strumento della pipeline dei contenuti mesh per creare un asset mesh, è possibile modificare il nome del file di output.
Proprietà | Descrizione |
---|---|
output del contenuto | Specifica il nome del file di output. Importante: Modifica dell'estensione del nome file del file di output non ha alcun effetto sul relativo formato di file. |
Configurazione della pipeline dei contenuti shader
Quando si usa lo strumento della pipeline del contenuto dello shader per creare un asset shader, è possibile modificare il nome del file di output.
Proprietà | Descrizione |
---|---|
Produzione del Contenuto | Specifica il nome del file di output. Importante: Modifica dell'estensione del nome file del file di output non ha alcun effetto sul relativo formato di file. |
Caricare e usare asset 3D in fase di esecuzione
Usare trame e immagini
Direct3D fornisce funzioni per la creazione di risorse di texture. In Direct3D 11, la libreria di utilità D3DX11 fornisce funzioni aggiuntive per la creazione di risorse texture e viste delle risorse direttamente dai file di immagine. Per ulteriori informazioni su come creare una risorsa texture in Direct3D 11, vedere Trame. Per ulteriori informazioni su come utilizzare la libreria D3DX11 per creare una risorsa di texture o una vista di risorsa da un file di immagine, vedere Come inizializzare una texture da un file.
Usare modelli 3D
Direct3D 11 non fornisce funzioni per la creazione di risorse da modelli 3D. È invece necessario scrivere codice che legge il file del modello 3D e crea buffer di vertici e indici che rappresentano il modello 3D e le risorse richieste dal modello, ad esempio trame o shader.
Utilizzare shader
Direct3D fornisce funzioni per creare risorse shader e associarle alla pipeline grafica programmabile. Per altre informazioni su come creare una risorsa shader in Direct3D e associarla alla pipeline, vedere la guida alla programmazione per HLSL.
Nella pipeline grafica programmabile, ogni fase della pipeline deve assegnare alla fase successiva della pipeline un risultato formattato in modo che possa comprendere. Poiché lo Shader Designer può creare solo pixel shader, spetta alla tua app garantire che i dati ricevuti siano nel formato previsto. Diverse fasi programmabili dello shader si verificano prima del pixel shader ed eseguono trasformazioni geometriche, ovvero il vertex shader, lo hull shader, il domain shader e lo shader geometry shader. Anche la fase di tassellatura non programmabile si verifica prima del pixel shader. Indipendentemente da quale di queste fasi precede direttamente il pixel shader, deve dare il suo risultato in questo formato:
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 di Progettazione shader usati nello shader, potrebbe anche essere necessario fornire dati aggiuntivi nel formato in base a queste 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;
};
Argomenti correlati
Titolo | Descrizione |
---|---|
Procedura: Esportare una trama contenente mipmap | Viene descritto come usare la pipeline di contenuto immagine per esportare una trama contenente mipmap precompilate. |
Procedura: Esportare una texture con alfa premoltiplicata | Viene descritto come usare la pipeline di contenuto immagine per esportare una trama contenente valori alfa premoltiplicati. |
Procedura: Esportare una trama da usare con app Direct2D o JavaScript | Descrive come usare la pipeline di contenuto immagine per esportare una trama che può essere usata in un'app Direct2D o JavaScript. |
Uso degli asset 3D per giochi e app | Descrive gli strumenti di modifica forniti da Visual Studio per la creazione e la modifica di asset 3D, che includono trame e immagini, modelli 3D e shader. |
Procedura: Esportare un shader | Descrive come esportare uno shader dallo Shader Designer. |