Dela via


Använda 3D-tillgångar i ditt spel eller din app

Den här artikeln beskriver hur du kan använda Visual Studio för att bearbeta 3D-tillgångar och inkludera dem i dina versioner.

När du har använt verktygen i Visual Studio för att skapa 3D-resurser är nästa steg att använda dem i din app. Men innan du kan använda dem måste dina tillgångar omvandlas till ett format som DirectX kan förstå. För att hjälpa dig att omvandla dina tillgångar tillhandahåller Visual Studio bygganpassningar för varje typ av tillgång som den kan producera. Om du vill inkludera tillgångarna i bygget behöver du bara konfigurera projektet för att använda bygganpassningarna, lägga till tillgångarna i projektet och konfigurera tillgångarna så att de använder rätt build-anpassning. Därefter kan du läsa in tillgångarna i din app och använda dem genom att skapa och fylla i DirectX-resurser precis som i andra DirectX-appar.

Konfigurera projektet

Innan du kan distribuera dina 3D-tillgångar som en del av bygget måste Visual Studio känna till de typer av tillgångar som du vill distribuera. Visual Studio känner redan till många vanliga filtyper, men eftersom endast vissa typer av appar använder 3D-tillgångar förutsätter Visual Studio inte att ett projekt skapar den här typen av filer. Du kan berätta för Visual Studio att din app använder den här typen av tillgångar med hjälp av skapa anpassningar– filer som talar om för Visual Studio hur olika typer av filer bearbetas på ett användbart sätt – som tillhandahålls för varje tillgångstyp. Eftersom de här anpassningarna tillämpas per projekt behöver du bara lägga till lämpliga anpassningar i projektet.

Så här lägger du till bygganpassningarna i projektet

  1. I Solution Exploreröppnar du snabbmenyn för projektet och väljer sedan Build Dependencies>Build Customizations.

    Dialogrutan Visual C++ Build Customizations Files visas.

  2. Under rubriken Tillgängliga build-anpassningsfilermarkerar du kryssrutorna som motsvarar de typer av resurser som du vill använda i projektet enligt beskrivningen i följande tabell.

    Tillgångstyp Skapa anpassningsnamn
    Texturer och bilder ImageContentTask(.targets, .props)
    3D-modeller MeshContentTask(.targets, .props)
    Shaders ShaderGraphContentTask(.targets, .props)

    Not

    Visual Studio 2022 17.9.3 tog bort stödet för modellredigeraren och MeshContentTask på grund av säkerhetsproblem i Autodesk FBX SDK. Se CVE-2023-27911.

  3. Välj knappen OK.

Inkludera tillgångar i bygget

Nu när projektet känner till de olika typer av 3D-tillgångar som du vill använda är nästa steg att berätta vilka filer som är 3D-tillgångar och vilka typer av tillgångar de är.

Så här lägger du till en tillgång i bygget

  1. I Solution Exploreröppnar du snabbmenyn för en tillgång i projektet och väljer sedan Egenskaper.

    Dialogrutan egenskapssida för tillgången visas.

  2. Kontrollera att egenskaperna Configuration och Platform är inställda på de värden som du vill att ändringarna ska gälla för.

  3. Under Konfigurationsegenskaperväljer du Allmäntoch i egenskapsrutnätet under Allmäntanger du egenskapen Objekttyp till lämplig typ av innehållspipelineobjekt. För en bild- eller strukturfil väljer du till exempel Bildinnehållspipeline.

    Viktig

    Visual Studio förutsätter som standard att många typer av bildfiler ska kategoriseras med hjälp av Bild objekttyp som är inbyggd i Visual Studio. Därför måste du ändra egenskapen objekttyp för varje bild som du vill bearbeta av bildinnehållspipelinen. Andra typer av källfiler för innehållspipelines för 3D-modeller och visuell skuggningsgrafik använder som standard rätt objekttyp.

  4. Välj knappen OK.

Följande är de tre typerna av innehållspipelineobjekt och deras associerade käll- och utdatafiltyper.

Objekttyp Källfiltyper Utdatafilformat
Bildinnehållspipeline Bärbar nätverksgrafik (.png)

JPEG (.jpg, .jpeg, .jpe, .jfif)

Direct Draw Surface (.dds)

Grafikinterchangeformat (.gif)

Bitmap (.bmp, .dib)

Taggat bildfilformat (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Mesh-innehållspipeline AutoDesk FBX Utbytesfil (.fbx)

Collada DAE-fil (.dae)

Wavefront OBJ-fil (.obj)
3D mesh-fil (.cmo)
Skuggningsinnehållspipeline Visual Shader Graph (.dgsl) Kompilerade skuggningsutdata (.cso)

Konfigurera egenskaper för tillgångsinnehållspipeline

Du kan ange egenskaperna för innehållspipeline för varje tillgångsfil så att den skapas på ett visst sätt.

Så här konfigurerar du egenskaper för innehållspipeline

  1. Öppna snabbmenyn för resursfilen i Solution Exploreroch välj sedan Egenskaper.

    Dialogrutan egenskapssida för tillgången visas.

  2. Kontrollera att egenskaperna Configuration och Platform är inställda på de värden som du vill att ändringarna ska gälla för.

  3. Under Konfigurationsegenskaperväljer du noden innehållspipeline (till exempel pipeline för bildinnehåll för struktur- och bildtillgångar) och anger sedan egenskaperna till lämpliga värden i egenskapsrutnätet. Om du till exempel vill generera mipmaps för en strukturtillgång vid byggtiden anger du egenskapen Generate Mips till Ja.

  4. Välj knappen OK.

Konfiguration av bildinnehållspipeline

När du använder pipelineverktyget för bildinnehåll för att skapa en strukturtillgång kan du komprimera strukturen på olika sätt, ange om MIP-nivåer ska genereras vid byggtiden och ändra namnet på utdatafilen.

Egenskap Beskrivning
Komprimera Anger den komprimeringstyp som används för utdatafilen.

De tillgängliga alternativen är:

- Ingen komprimering
- BC1_UNORM komprimering
- BC1_UNORM_SRGB komprimering
- BC2_UNORM kompression
- BC2_UNORM_SRGB komprimering
- BC3_UNORM komprimering
- BC3_UNORM_SRGB Komprimering
- BC4_UNORM komprimering
- BC4_SNORM komprimering
- BC5_UNORM komprimering
- BC5_SNORM kompression
- BC6H_UF16 komprimering
- BC6H_SF16 komprimering
- BC7_UNORM komprimering
- BC7_UNORM_SRGB komprimering

Information om vilka komprimeringsformat som stöds i olika versioner av DirectX finns i Programmeringsguide för DXGI.
Konvertera till förmultipliserat alfaformat Ja att konvertera bilden till förmultiplikerat alfaformat i utdatafilen; annars Nej. Endast utdatafilen ändras, källbilden är oförändrad.
Generera mips Ja att generera en fullständig MIP-kedja vid byggtiden och inkludera den i utdatafilen; Annars Nej. Om Ingen, och källfilen redan innehåller en mipmap-kedja, har utdatafilen en MIP-kedja. annars har utdatafilen ingen MIP-kedja.
Innehållsutmatning Anger namnet på utdatafilen. Viktigt: Att ändra filnamnstillägget för utdatafilen påverkar inte filformatet.

Konfiguration av mesh-innehållspipeline

När du använder verktyget mesh content pipeline för att skapa en mesh-tillgång kan du ändra namnet på utdatafilen.

Egenskap Beskrivning
Innehållsutmatning Anger namnet på utdatafilen. Viktigt: Att ändra filnamnstillägget för utdatafilen påverkar inte filformatet.

Konfiguration av skuggningsinnehållspipeline

När du använder shader-pipelineverktyget för att bygga en shader-resurs kan du ändra namnet på utdatafilen.

Egenskap Beskrivning
innehållsresultat Anger namnet på utdatafilen. Viktigt: Att ändra filnamnstillägget för utdatafilen påverkar inte filformatet.

Läsa in och använda 3D-objekt under körning

Använda texturer och bilder

Direct3D innehåller funktioner för att skapa strukturresurser. I Direct3D 11 innehåller D3DX11-verktygsbiblioteket ytterligare funktioner för att skapa strukturresurser och resursvyer direkt från bildfiler. Mer information om hur du skapar en strukturresurs i Direct3D 11 finns i Texturer. Mer information om hur du använder D3DX11-biblioteket för att skapa en strukturresurs eller resursvy från en bildfil finns i Så här: Initiera en struktur från en fil.

Använda 3D-modeller

Direct3D 11 tillhandahåller inte funktioner för att skapa resurser från 3D-modeller. I stället måste du skriva kod som läser 3D-modellfilen och skapar hörn- och indexbuffertar som representerar 3D-modellen och alla resurser som modellen kräver, till exempel texturer eller skuggningar.

Använda skuggningar

Direct3D innehåller funktioner för att skapa skuggningsresurser och binda dem till den programmerbara grafikpipelinen. Mer information om hur du skapar en skuggningsresurs i Direct3D och binder den till pipelinen finns i Programmeringsguide för HLSL-.

I den programmerbara grafikpipelinen måste varje steg i pipelinen ge nästa steg i pipelinen ett resultat som är formaterat på ett sätt som det kan förstå. Eftersom Shader Designer bara kan skapa pixelskuggare innebär det att det är upp till din app att se till att de data som den tar emot är i det format som den förväntar sig. Flera programmerbara skuggningssteg inträffar före pixelskuggningen och utför geometriska transformeringar – hörnskuggan, skrovskuggaren, domänskuggaren och geometriskuggningen. Det icke-programmerbara tessellationssteget inträffar också före pixelskuggningen. Oavsett vilket av dessa steg som direkt föregår pixelskuggningen måste det ge resultatet i det här formatet:

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;
};

Beroende på de Shader Designer-noder som du använder i skuggningen kan du också behöva ange ytterligare data i formatet enligt dessa definitioner:

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;
};
Titel Beskrivning
Så här exporterar du en struktur som innehåller mipmaps Beskriver hur du använder bildinnehållspipelinen för att exportera en textur som innehåller förberäknade mipmaps.
Så här exporterar du en textur som har förmultiplicerad alfa Beskriver hur du använder bildinnehållspipelinen för att exportera en textur som innehåller premultiplicerade alfavärden.
Så här exporterar du en struktur för användning med Direct2D- eller JavaScript-appar Beskriver hur du använder pipelinen för bildinnehåll för att exportera en struktur som kan användas i en Direct2D- eller JavaScript-app.
Arbeta med 3D-tillgångar för spel och appar Beskriver redigeringsverktygen som Visual Studio tillhandahåller för att skapa och manipulera 3D-tillgångar, som omfattar texturer och bilder, 3D-modeller och skuggningar.
Så här exporterar du en skuggning Beskriver hur du exporterar en skuggning från Shader Designer.