Sdílet prostřednictvím


Použití 3D prostředků ve hře nebo aplikaci

Tento článek popisuje, jak můžete pomocí sady Visual Studio zpracovávat 3D prostředky a zahrnout je do sestavení.

Po použití nástrojů v sadě Visual Studio k vytvoření 3D prostředků je dalším krokem jejich použití ve vaší aplikaci. Než je ale budete moct použít, musí se vaše prostředky transformovat do formátu, kterému DirectX rozumí. Visual Studio poskytuje přizpůsobení sestavení pro každý druh prostředku, který může vytvořit, aby vám pomohl transformovat vaše prostředky. Pokud chcete zahrnout prostředky do sestavení, stačí nakonfigurovat projekt tak, aby používal přizpůsobení sestavení, přidal prostředky do projektu a nakonfigurovali prostředky tak, aby používaly správné přizpůsobení sestavení. Potom můžete prostředky načíst do aplikace a používat je tak, že vytvoříte a vyplníte prostředky DirectX stejně jako v jakékoli jiné aplikaci DirectX.

Konfigurace projektu

Před nasazením 3D prostředků v rámci sestavení musí Visual Studio vědět o typech prostředků, které chcete nasadit. Visual Studio už ví o mnoha běžných typech souborů, ale protože jen některé druhy aplikací používají 3D prostředky, Visual Studio nepředpokládá, že projekt sestaví tyto typy souborů. Můžete Visual Studio informovat, že vaše aplikace používá tyto druhy prostředků, pomocí přizpůsobení sestavení— souborů, které Visual Studio informují, jak efektivně zpracovávat různé typy souborů — které jsou k dispozici pro každý typ prostředku. Vzhledem k tomu, že se tato přizpůsobení použijí na základě jednotlivých projektů, stačí do projektu přidat příslušná přizpůsobení.

Přidání přizpůsobení sestavení do projektu

  1. V Průzkumníku řešeníotevřete místní nabídku projektu a pak zvolte Sestavení závislostí>Přizpůsobení sestavení.

    Zobrazí se dialogové okno Přizpůsobení sestavení souborů Visual C++.

  2. V části Dostupné soubory pro přizpůsobení kompilacezaškrtněte políčka u typů prostředků, které chcete použít ve svém projektu, jak je popsáno v následující tabulce:

    Typ aktiva Název úpravy sestavení
    Textury a obrázky ImageContentTask(.targets, .props)
    3D modely MeshContentTask(.targets, .props)
    Stínovače ShaderGraphContentTask(.targets, .props)

    Poznámka

    Visual Studio 2022 17.9.3 odebralo podporu editoru modelů a MeshContentTask kvůli obavám o bezpečnost v sadě Autodesk FBX SDK. Viz CVE-2023-27911.

  3. Zvolte tlačítko OK.

Zahrnout materiály do sestavení

Teď, když váš projekt ví o různých typech 3D prostředků, které chcete použít, je dalším krokem říct, které soubory jsou 3D prostředky a jaké druhy prostředků jsou.

Přidejte prostředek do svého sestavení

  1. V Průzkumníku řešeníve vašem projektu otevřete místní nabídku prostředku a pak zvolte Vlastnosti.

    Zobrazí se dialogové okno stránky vlastností prostředku .

  2. Ujistěte se, že vlastnosti konfigurace a platformy jsou nastavené na hodnoty, na které chcete aplikovat své změny.

  3. V části Vlastnosti konfiguracezvolte Obecnéa potom v mřížce vlastností v části Obecnénastavte vlastnost Typ položky na odpovídající typ položky kanálu obsahu. Například pro obrazový nebo texturový soubor zvolte Image Content Pipeline.

    Důležitý

    Visual Studio ve výchozím nastavení předpokládá, že mnoho druhů souborů obrázků by mělo být zařazeno do kategorií pomocí typu položky Obrázek, který je integrovaný do sady Visual Studio. Proto musíte změnit vlastnost typ položky u každého obrázku, který chcete zpracovat potrubím obsahu obrázku. Jiné typy zdrojových souborů v kanálu obsahu pro 3D modely a vizuální shadery jsou ve výchozím nastavení nastaveny na správný typ položky.

  4. Zvolte tlačítko OK.

Následují tři typy položek kanálu obsahu a jejich přidružené typy zdrojových a výstupních souborů.

Typ položky Typy zdrojových souborů Formát výstupního souboru
kanál obsahu obrázku Přenosná síťová grafika (.png)

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

Přímá plocha kreslení (.dds)

Grafický výměnný formát (.gif)

Bitmap (.bmp, .dib)

Formát souboru s označeným obrazem (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
kanálu obsahu Mesh AutoDesk FBX Výměnný soubor (.fbx)

Soubor Collada DAE (.dae)

Wavefront OBJ objektový soubor (.obj)
soubor 3D sítě (.cmo)
kanálu obsahu shaderu Vizualní Shader Graf (.dgsl) Zkompilovaný výstup shaderu (.cso)

Konfigurace vlastností kanálu obsahu assetu

Vlastnosti kanálu obsahu jednotlivých souborů assetů můžete nastavit tak, aby byly sestaveny určitým způsobem.

Konfigurace vlastností kanálu obsahu

  1. V Průzkumníku řešenív projektu otevřete místní nabídku pro soubor assetu a pak zvolte Vlastnosti.

    Zobrazí se dialogové okno stránky vlastností prostředku.

  2. Ujistěte se, že vlastnosti konfigurace a platformy jsou nastavené na hodnoty, na které chcete změny použít.

  3. V části Vlastnosti konfiguracezvolte uzel kanálu obsahu (například kanál obsahu obrázku pro prostředky textury a obrázku) a potom v mřížce vlastností nastavte vlastnosti na odpovídající hodnoty. Pokud například chcete vygenerovat mipmapy pro texturový prostředek v době sestavení, nastavte vlastnost Generate Mips na Ano.

  4. Zvolte tlačítko OK.

Konfigurace kanálu obsahu obrázku

Pokud k sestavení prostředku textury použijete nástroj pro zpracování obsahu obrázků, můžete texturu zkomprimovat různými způsoby, určit, jestli se MIP úrovně mají generovat v době sestavení a změnit název výstupního souboru.

Vlastnost Popis
Komprimovat Určuje typ komprese, který se používá pro výstupní soubor.

Dostupné možnosti jsou:

- bez komprese
- BC1_UNORM komprese
- BC1_UNORM_SRGB komprese
- BC2_UNORM komprese
- BC2_UNORM_SRGB komprese
- BC3_UNORM komprese
- BC3_UNORM_SRGB komprese
- BC4_UNORM komprese
- BC4_SNORM komprese
- BC5_UNORM komprese
- BC5_SNORM komprese
- BC6H_UF16 komprese
- BC6H_SF16 komprese
- BC7_UNORM komprese
- BC7_UNORM_SRGB komprese

Informace o tom, které formáty komprese jsou podporovány v různých verzích rozhraní DirectX, naleznete v Průvodce programováním pro DXGI.
Převod na přednásobený alfa formát Ano převést obrázek na předem vynásobený alfa formát ve výstupním souboru; v opačném případě Ne. Změní se pouze výstupní soubor, zdrojový obrázek se nezmění.
vygenerovat Mips Ano pro generování úplného MIP řetězce v době sestavení a jeho zahrnutí do výstupního souboru; v opačném případě Ne. Pokud Žádnýa zdrojový soubor již obsahuje řetěz mipmap, bude výstupní soubor obsahovat řetězec MIP; v opačném případě nebude výstupní soubor obsahovat žádný řetěz MIP.
výstup obsahu Určuje název výstupního souboru. Důležité: Změna přípony názvu souboru výstupního souboru nemá žádný vliv na formát souboru.

Konfigurace zpracování obsahu mesh

Když k vytvoření síťového prostředku použijete nástroj pro zpracování obsahu síťových objektů, můžete změnit název výstupního souboru.

Vlastnost Popis
Výstup obsahu Určuje název výstupního souboru. Důležité: Změna přípony názvu souboru výstupního souboru nemá žádný vliv na formát souboru.

Konfigurace kanálu obsahu shaderu

Pokud k sestavení prostředku shaderu použijete nástroj pro kanál obsahu shaderu, můžete změnit název výstupního souboru.

Vlastnost Popis
Výstup obsahu Určuje název výstupního souboru. Důležité: Změna přípony názvu souboru výstupního souboru nemá žádný vliv na formát souboru.

Načítání a používání 3D objektů během chodu

Použití textur a obrázků

Direct3D poskytuje funkce pro vytváření prostředků textury. V Direct3D 11 poskytuje knihovna nástrojů D3DX11 další funkce pro vytváření texturových prostředků a zobrazení prostředků přímo ze souborů obrázků. Další informace o tom, jak vytvořit prostředek textury v Direct3D 11, naleznete v tématu textury. Další informace o tom, jak využít knihovnu D3DX11 k vytvoření texturového prostředku nebo zobrazení prostředku ze souboru obrázku, naleznete v části Jak inicializovat texturu ze souboru.

Použití 3D modelů

Direct3D 11 neposkytuje funkce pro vytváření prostředků z 3D modelů. Místo toho musíte napsat kód, který čte soubor 3D modelu a vytvoří vrcholové a indexové buffery, které představují 3D model a všechny potřebné zdroje, které model vyžaduje – například textury nebo shadery.

Použití shaderů

Direct3D poskytuje funkce pro vytváření prostředků shaderu a jejich vazbu s programovatelným grafickým kanálem. Další informace o tom, jak vytvořit prostředek stínování v Direct3D a svázat ho s výpočetním potrubím, najdete v Průvodce programováním pro HLSL.

V programovatelném grafickém kanálu musí každá fáze kanálu poskytnout další fázi kanálu výsledek, který je formátován způsobem, který dokáže pochopit. Vzhledem k tomu, že Návrhář shaderů může vytvářet pouze pixelové shadery, je na vaší aplikaci zajistit, aby data, která přijímáte, byla ve formátu, který očekává. Před shaderem pixelů dochází k několika programovatelným fázím shaderu a provádění geometrických transformací – shaderu vrcholu, shaderu trupu, shaderu domény a shaderu geometrie. Neprogramovatelná fáze tesselace také probíhá před shaderem pixelů. Bez ohledu na to, které z těchto fází přímo předchází shaderu pixelů, musí poskytnout výsledek v tomto formátu:

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

V závislosti na uzlech Návrháře shaderu, které používáte ve shaderu, můžete také podle těchto definic poskytnout další data ve formátu:

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;
};
Titul Popis
Postupy: Export textury obsahující mipmapy Popisuje, jak pomocí pipeline obsahu obrazu exportovat texturu, která obsahuje předem vypočítané mipmapy.
Jak na to: Export textury s předem násobenou alfa Popisuje, jak pomocí Image Content Pipeline exportovat texturu, která obsahuje předem vynásobené alfa hodnoty.
Postupy: Export textury pro použití s aplikacemi Direct2D nebo JavaScript Popisuje, jak pomocí kanálu obsahu obrázku exportovat texturu, kterou lze použít v aplikaci Direct2D nebo JavaScript.
Práce s 3D prostředky pro hry a aplikace Popisuje nástroje pro úpravy, které Sada Visual Studio poskytuje pro vytváření a manipulaci s 3D prostředky, mezi které patří textury a obrázky, 3D modely a shadery.
Postupy: Export shaderu Popisuje, jak exportovat shader z Návrháře shaderu.