Delen via


3D-assets gebruiken in uw game of app

In dit artikel wordt beschreven hoe u Visual Studio kunt gebruiken om 3D-assets te verwerken en op te nemen in uw builds.

Nadat u de hulpprogramma's in Visual Studio hebt gebruikt om 3D-assets te maken, is de volgende stap het gebruik ervan in uw app. Maar voordat u ze kunt gebruiken, moeten uw assets worden omgezet in een indeling die DirectX kan begrijpen. Om u te helpen uw assets te transformeren, biedt Visual Studio bouwaanpassingen voor elk soort asset dat het kan produceren. Als u de assets in uw build wilt opnemen, hoeft u alleen maar uw project te configureren voor het gebruik van de buildaanpassingen, het toevoegen van de assets aan uw project en het configureren van de assets voor het gebruik van de juiste buildaanpassing. Daarna kunt u de assets in uw app laden en gebruiken door DirectX-resources te maken en in te vullen, net zoals in elke andere DirectX-app.

Uw project configureren

Voordat u uw 3D-assets kunt implementeren als onderdeel van uw build, moet Visual Studio weten welke soorten assets u wilt implementeren. Visual Studio kent al veel gangbare bestandstypen, maar omdat alleen bepaalde soorten apps gebruikmaken van 3D-assets, gaat Visual Studio er niet van uit dat een project dit soort bestanden zal bouwen. U kunt Visual Studio vertellen dat uw app gebruikmaakt van dit soort assets met behulp van de buildaanpassingen, bestanden die Visual Studio vertellen hoe u verschillende typen bestanden op een handige manier kunt verwerken, die voor elk assettype worden geleverd. Omdat deze aanpassingen per project worden toegepast, hoeft u alleen de juiste aanpassingen aan uw project toe te voegen.

Om de build-aanpassingen toe te voegen aan uw project

  1. Open in Solution Explorerhet snelmenu voor het project en kies vervolgens Build Dependencies>Build Customizations.

    Het dialoogvenster Visual C++ Build Customizations Files wordt weergegeven.

  2. Schakel onder Beschikbare bouwaanpassingsbestandende selectievakjes in die overeenkomen met de soorten middelen die u in uw project wilt gebruiken, zoals in de volgende tabel beschreven.

    Assettype Naam van build-aanpassing
    Patronen en afbeeldingen ImageContentTask(.targets, .props)
    3D-modellen MeshContentTask(.targets, .props)
    Shaders ShaderGraphContentTask(.targets, .props)

    Notitie

    Visual Studio 2022 17.9.3 heeft de ondersteuning voor de Model Editor en MeshContentTask verwijderd vanwege beveiligingsproblemen in de Autodesk FBX SDK. Zie CVE-2023-27911.

  3. Kies de knop OK.

Assets opnemen in uw build

Nu uw project weet wat de verschillende soorten 3D-assets zijn die u wilt gebruiken, is de volgende stap het vertellen welke bestanden 3D-assets zijn en welke soorten assets ze zijn.

Een asset toevoegen aan uw build

  1. Open in Solution Explorerin uw project het snelmenu van een asset en kies vervolgens Eigenschappen.

    Het dialoogvenster Eigenschappenpagina van de asset verschijnt.

  2. Zorg ervoor dat de eigenschappen Configuration en Platform zijn ingesteld op de waarden waarop u de wijzigingen wilt toepassen.

  3. Kies onder Configuratie-eigenschappenAlgemeenen stel in het eigenschappenraster onder Algemeende eigenschap Itemtype in op het juiste itemtype voor de inhoudspijplijn. Kies bijvoorbeeld voor een afbeeldings- of patroonbestand Afbeeldingsinhoudspijplijn.

    Belangrijk

    In Visual Studio wordt standaard ervan uitgegaan dat veel soorten afbeeldingsbestanden moeten worden gecategoriseerd met behulp van het afbeeldingstype itemtype dat is ingebouwd in Visual Studio. Daarom moet u de eigenschap Item Type wijzigen van elke afbeelding die u wilt laten verwerken door de beeldinhoudverwerkingslijn. Andere typen bronbestanden in de inhoudspijplijn voor 3D-modellen en visuele shaders hebben standaard het correcte Itemtype.

  4. Kies de knop OK.

Hieronder volgen de drie typen inhoudspijplijnitems en de bijbehorende bron- en uitvoerbestandstypen.

Itemtype Bronbestandstypen Uitvoerbestandsindeling
Afbeeldingeninhoudspijplijn Portable Network Graphics (.png)

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

Direct Draw Surface (.dds)

Grafisch Uitwisselingsformaat (.gif)

Bitmap (.bmp, .dib)

Tagged Image File Format (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Mesh-inhoudspijplijn AutoDesk FBX Interchange File (.fbx)

Collada DAE-bestand (.dae)

Wavefront OBJ-bestand (.obj)
3D mesh-bestand (.cmo)
Shader-inhoudspijplijn Visual Shader Graph (.dgsl) Gecompileerde shader-uitvoer (.cso)

Configureren van eigenschappen van de assetcontentpijplijn

U kunt de eigenschappen van de inhoudspijplijn van elk assetbestand zo instellen dat het op een specifieke manier wordt gebouwd.

Eigenschappen van inhoudspijplijn configureren

  1. Open in Solution Explorerin uw project het snelmenu voor het assetbestand en kies Eigenschappen.

    Het dialoogvenster van de eigenschappenpagina van de asset verschijnt.

  2. Zorg ervoor dat de eigenschappen Configuration en Platform zijn ingesteld op de waarden waarop u de wijzigingen wilt toepassen.

  3. Kies onder Configuratie-eigenschappenhet knooppunt voor de inhoudspijplijn (bijvoorbeeld Afbeeldingsinhoudspijplijn voor patronen en afbeeldingsassets) en stel vervolgens in het eigenschappenraster de eigenschappen in op de juiste waarden. Als u bijvoorbeeld tijdens het bouwen mipmaps wilt genereren voor een textuureigenschap, stelt u de eigenschap Mips genereren in op Ja.

  4. Kies de knop OK.

Configuratie van beeldinhoudspijplijn

Wanneer u het hulpprogramma voor de pijplijn voor afbeeldingsinhoud gebruikt om een patroonasset te bouwen, kunt u het patroon op verschillende manieren comprimeren, aangeven of MIP-niveaus moeten worden gegenereerd tijdens de build en de naam van het uitvoerbestand wijzigen.

Eigenschap Beschrijving
comprimeren Hiermee geeft u het compressietype op dat wordt gebruikt voor het uitvoerbestand.

De beschikbare opties zijn:

- Geen compressie
- BC1_UNORM compressie
- BC1_UNORM_SRGB compressie
- BC2_UNORM compressie
- BC2_UNORM_SRGB compressie
- BC3_UNORM compressie
- BC3_UNORM_SRGB compressie
- BC4_UNORM compressie
- BC4_SNORM compressie
- BC5_UNORM compressie
- BC5_SNORM compressie
- BC6H_UF16 compressie
- BC6H_SF16 compressie
- BC7_UNORM compressie
- BC7_UNORM_SRGB compressie

Zie Programmeerhandleiding voor DXGIvoor informatie over welke compressie-indelingen worden ondersteund in verschillende versies van DirectX.
Converteren naar vooraf vermenigvuldigde alfa-indeling Ja om de afbeelding te converteren naar een vooraf vermenigvuldigde alfa-indeling in het uitvoerbestand; anders Geen. Alleen het uitvoerbestand is gewijzigd, de bronafbeelding is ongewijzigd.
Mips-genereren Ja- om tijdens de build een volledige MIP-keten te genereren en op te nemen in het uitvoerbestand; anders Geen. Als Geenen het bronbestand al een mipmap-keten bevat, heeft het uitvoerbestand een MIP-keten; anders heeft het uitvoerbestand geen MIP-keten.
InhoudsUitvoer Hiermee geeft u de naam van het uitvoerbestand. Belangrijk: Het wijzigen van de bestandsnaamextensie van het uitvoerbestand heeft geen invloed op de bestandsindeling.

Configuratie van meshcontentpijplijn

Wanneer u het hulpprogramma voor mesh-inhoudspijplijn gebruikt om een mesh-asset te bouwen, kunt u de naam van het uitvoerbestand wijzigen.

Eigenschap Beschrijving
inhoudsuitvoer Hiermee geeft u de naam van het uitvoerbestand. Belangrijk: Het wijzigen van de bestandsnaamextensie van het uitvoerbestand heeft geen invloed op de bestandsindeling.

Configuratie van shader-inhoudspijplijn

Wanneer u het hulpprogramma voor de shader-inhoudspijplijn gebruikt om een shader-asset te maken, kunt u de naam van het uitvoerbestand wijzigen.

Eigendom Beschrijving
Inhoudsuitvoer Hiermee geeft u de naam van het uitvoerbestand. Belangrijk: Het wijzigen van de bestandsnaamextensie van het uitvoerbestand heeft geen invloed op de bestandsindeling.

3D-assets laden en gebruiken tijdens runtime

Patronen en afbeeldingen gebruiken

Direct3D biedt functies voor het maken van textuurbronnen. In Direct3D 11 biedt de D3DX11-hulpprogrammabibliotheek aanvullende functies voor het maken van tekstuurresources en resourceweergaven direct vanuit afbeeldingsbestanden. Zie Texturesvoor meer informatie over het maken van een patroonresource in Direct3D 11. Zie voor meer informatie over het gebruik van de D3DX11-bibliotheek om een textuurbron of bronnenweergave te maken vanuit een afbeeldingsbestand Hoe te: Een textuur initialiseren vanuit een bestand.

3D-modellen gebruiken

Direct3D 11 biedt geen functies voor het maken van resources van 3D-modellen. In plaats daarvan moet u code schrijven die het 3D-modelbestand leest en hoekpunt- en indexbuffers maakt die het 3D-model vertegenwoordigen en alle resources die het model nodig heeft, bijvoorbeeld texturen of shaders.

Shaders gebruiken

Direct3D biedt functies voor het maken van shader-resources en het binden ervan aan de programmeerbare grafische pijplijn. Zie Programmeerhandleiding voor HLSL-voor meer informatie over het maken van een shader-resource in Direct3D en deze aan de pijplijn binden.

In de programmeerbare grafische pijplijn moet elke fase van de pijplijn de volgende fase van de pijplijn een resultaat geven dat is opgemaakt op een manier die kan worden begrepen. Omdat de Shader Designer alleen pixel-shaders kan maken, betekent dit dat het aan uw app is om ervoor te zorgen dat de gegevens die worden ontvangen, de gewenste indeling hebben. Verschillende programmeerbare arceringsfasen vinden plaats vóór de pixel-shader en voeren geometrische transformaties uit: de vertex-shader, de hull-shader, de domein-shader en de geometrie-shader. De niet-programmeerbare tesselatiefase vindt ook plaats vóór de pixel-shader. Ongeacht welke van deze fasen direct voorafgaat aan de pixel-shader, moet het resultaat in deze indeling worden weergegeven:

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

Afhankelijk van de Shader Designer-knooppunten die u in uw shader gebruikt, moet u mogelijk ook aanvullende gegevens in de indeling opgeven op basis van deze definities:

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 Beschrijving
Procedure: een patroon met mipmaps exporteren Hierin wordt beschreven hoe u de pijplijn voor afbeeldingsinhoud gebruikt om een patroon te exporteren dat vooraf samengestelde mipmaps bevat.
Procedure: Een patroon exporteren met vooraf gedefinieerde alfa- Hierin wordt beschreven hoe u de Image Content Pipeline gebruikt om een textuur te exporteren die voorgemultipliceerde alfawaarden bevat.
Procedure: Een patroon exporteren voor gebruik met Direct2D- of JavaScript-apps Hierin wordt beschreven hoe u de pijplijn voor afbeeldingsinhoud gebruikt om een patroon te exporteren dat kan worden gebruikt in een Direct2D- of JavaScript-app.
Werken met 3D-assets voor games en apps Hierin worden de bewerkingshulpprogramma's beschreven die Visual Studio biedt voor het maken en bewerken van 3D-assets, waaronder patronen en afbeeldingen, 3D-modellen en shaders.
Procedure: een shader exporteren Hierin wordt beschreven hoe u een shader exporteert vanuit de Shader Designer.