Používání 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ů. Sadě Visual Studio můžete říct, že vaše aplikace používá tyto druhy prostředků pomocí přizpůsobení sestavení – souborů, které sadě Visual Studio říkají, jak zpracovávat různé typy souborů užitečným způsobem – které jsou k dispozici pro jednotlivé typy prostředků. 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ík řešení otevřete místní nabídku projektu a pak zvolte Vlastní nastavení sestavení závislostí>.

    Zobrazí se dialogové okno Soubory přizpůsobení sestavení visual C++.

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

    Typ majetku Název vlastního nastavení sestavení
    Textury a obrázky ImageContentTask(.targets, .props)
    3D modely MeshContentTask(.targets, .props)
    Shadery ShaderGraphContentTask(.targets, .props)
  3. Zvolte tlačítko OK.

Zahrnutí prostředků 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řidání prostředku do sestavení

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

    Zobrazí se dialogové okno Stránka vlastností prostředku.

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

  3. V části Vlastnosti konfigurace zvolte 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 soubor s texturou nebo obrázku zvolte Kanál obsahu obrázku.

    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 image , který je integrovaný do sady Visual Studio. Proto musíte změnit vlastnost Typ položky každého obrázku, který chcete zpracovat kanálem obsahu obrázku. Jiné typy zdrojových souborů kanálu obsahu pro 3D modely a grafiku vizuálního shaderu jsou výchozí pro 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 Portable Network Graphics (.png)

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

Direct Draw Surface (.dds)

Graphics Interchange Format (.gif)

Bitmap (.bmp, .dib)

Tagged Image File Format (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Kanál obsahu mesh Soubor FBX Interchange AutoDesk (.fbx)

Soubor DAE collada (.dae)

Soubor WAVEFRONT OBJ (.obj)
3D mesh file (.cmo)
Kanál obsahu shaderu Visual Shader Graph (.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ík řešení otevřete v projektu místní nabídku pro soubor assetu a pak zvolte Vlastnosti.

    Zobrazí se dialogové okno Stránka 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 konfigurace zvolte 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 kanálu obsahu obrázku, můžete texturu zkomprimovat různými způsoby, určit, jestli se úrovně MIP 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é jsou následující možnosti:

- Bez komprese
- 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

Informace o tom, které formáty komprese jsou podporovány v různých verzích rozhraní DirectX, naleznete v části Průvodce programováním pro DXGI.
Převod na přednásobený alfa formát Ano , pokud chcete převést obrázek na předem vynásobený alfa formát ve výstupním souboru, jinak ne. Změní se pouze výstupní soubor, zdrojový obrázek se nezmění.
Generování mips Ano , pokud chcete vygenerovat úplný řetěz MIP v době sestavení a zahrnout ho do výstupního souboru, jinak ne. Pokud ne a zdrojový soubor už obsahuje řetěz mipmap, bude mít výstupní soubor řetězec MIP. V opačném případě výstupní soubor nebude mít žá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 jeho formát souboru.

Konfigurace kanálu obsahu mesh

Když k vytvoření síťového prostředku použijete nástroj kanálu obsahu mesh, 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 jeho 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 jeho formát souboru.

Načítání a používání 3D prostředků za běhu

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 pomocí knihovny D3DX11 vytvořit prostředek textury nebo zobrazení prostředků ze souboru obrázku, naleznete v tématu Postupy: Inicializace textury 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ří vyrovnávací paměti vrcholu a indexu, které představují 3D model a všechny prostředky, 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 shaderu v Direct3D a svázat ho s kanálem, najdete v průvodci 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ář shaderu může vytvářet pouze pixelové shadery, znamená to, že je v aplikaci, aby data, která přijímá, 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 tessellation se vyskytuje také 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;
};
Titulek Popis
Postupy: Export textury obsahující mipmapy Popisuje, jak pomocí kanálu obsahu obrázku exportovat texturu, která obsahuje předem připravené mipmapy.
Postupy: Export textury s přednásobeným alfa Popisuje, jak pomocí kanálu obsahu obrázku exportovat texturu, která obsahuje předem připravené 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.