Korzystanie z zasobów 3D w grze lub aplikacji
W tym artykule opisano, jak można używać programu Visual Studio do przetwarzania zasobów 3D i dołączania ich do kompilacji.
Po użyciu narzędzi w programie Visual Studio do tworzenia zasobów 3D następnym krokiem jest użycie ich w aplikacji. Jednak zanim będzie można ich używać, zasoby muszą zostać przekształcone w format, który może zrozumieć directX. Aby ułatwić przekształcanie zasobów, program Visual Studio udostępnia dostosowania kompilacji dla każdego rodzaju zasobu, który może wygenerować. Aby uwzględnić zasoby w kompilacji, wystarczy skonfigurować projekt tak, aby korzystał z dostosowań kompilacji, dodawać zasoby do projektu i konfigurować zasoby tak, aby używały poprawnego dostosowywania kompilacji. Następnie możesz załadować zasoby do aplikacji i użyć ich, tworząc i wypełniając zasoby DirectX tak samo jak w każdej innej aplikacji DirectX.
Konfigurowanie projektu
Przed wdrożeniem zasobów 3D w ramach kompilacji program Visual Studio musi wiedzieć o rodzajach zasobów, które chcesz wdrożyć. Program Visual Studio już wie o wielu typach plików, ale ponieważ tylko niektóre rodzaje aplikacji używają zasobów 3D, program Visual Studio nie zakłada, że projekt utworzy tego rodzaju pliki. Możesz poinformować program Visual Studio, że aplikacja korzysta z tego rodzaju zasobów przy użyciu dostosowania kompilacji— plików, które informują program Visual Studio, jak przetwarzać różne typy plików w przydatny sposób — które są udostępniane dla każdego typu zasobu. Ponieważ te dostosowania są stosowane dla poszczególnych projektów, wystarczy dodać odpowiednie dostosowania do projektu.
Aby dodać niestandardowe ustawienia kompilacji do projektu
W Eksploratorze rozwiązań otwórz menu kontekstowe dla projektu, a następnie wybierz Build Dependencies (Zależności kompilacji)>Build Customizations (Dostosowania kompilacji).
Zostanie wyświetlone okno dialogowe Pliki dostosowywania kompilacji Visual C++.
W obszarze Dostępne pliki dostosowywania kompilacjizaznacz pola wyboru odpowiadające typom zasobów, które mają być używane w projekcie, zgodnie z opisem w poniższej tabeli:
Typ zasobu Nazwa dostosowania w kompilacji Tekstury i obrazy ImageContentTask(.targets, .props) Modele 3D ZadanieZawartościSiatki(.cele, .właściwości) Shadery ShaderGraphContentTask(.targets, .props) Notatka
Program Visual Studio 2022 17.9.3 usunął obsługę edytora modeli i usługi MeshContentTask ze względu na obawy dotyczące zabezpieczeń w zestawie Autodesk FBX SDK. Zobacz CVE-2023-27911.
Wybierz przycisk OK.
Uwzględnij zasoby w kompilacji
Teraz, gdy projekt wie o różnych rodzajach zasobów 3D, których chcesz użyć, następnym krokiem jest określenie, które pliki są elementami zawartości 3D i rodzajami zasobów.
Aby dodać element zawartości do kompilacji
W Eksploratorze rozwiązań , w swoim projekcie, otwórz menu skrótów dla zasobu, a następnie wybierz opcję Właściwości.
Zostanie wyświetlone okno dialogowe strony właściwości zasobu .
Upewnij się, że właściwości Konfiguracja i Platforma są ustawione na wartości, do których mają zostać zastosowane zmiany.
W obszarze Właściwości konfiguracji wybierz Ogólne, a następnie w siatce właściwości, w obszarze Ogólne, ustaw właściwość Typ elementu na odpowiedni typ elementu potoku zawartości. Na przykład w przypadku pliku obrazu lub tekstury wybierz pozycję Potok zawartości obrazu.
Ważny
Domyślnie program Visual Studio zakłada, że wiele rodzajów plików obrazów powinno być kategoryzowane przy użyciu Image typu elementu wbudowanego w program Visual Studio. W związku z tym należy zmienić właściwość Typ elementu każdego obrazu, który ma zostać przetworzony przez potok zawartości obrazu. Inne typy plików źródłowych potoku treści dla modeli 3D i shaderów wizualnych są domyślnie ustawione na poprawny typ elementu.
Wybierz przycisk OK.
Poniżej przedstawiono trzy typy elementów potoku zawartości oraz skojarzone z nimi typy plików źródłowych i wyjściowych.
Typ elementu | Typy plików źródłowych | Format pliku wyjściowego |
---|---|---|
potok zawartości obrazu | Przenośna grafika sieciowa (.png) JPEG (.jpg, .jpeg, .jpe, .jfif) Direct Draw Surface (.dds) Format wymiany grafiki (.gif) Mapa bitowa (.bmp, .dib) Format oznakowanego pliku obrazu (.tif, .tiff) Targa (.tga) |
Powierzchnia DirectDraw (.dds) |
potok zawartości Mesh | AutoDesk FBX Plik Wymiany (.fbx) Plik Collada DAE (.dae) Plik Wavefront OBJ (.obj) |
Plik siatki 3D (.cmo) |
Potok zawartości shaderów | Visual Shader Graph (.dgsl) | Skompilowany wynik shadera (.cso) |
Konfigurowanie właściwości przepływu zawartości zasobu
Można ustawić parametry potoku zawartości dla każdego pliku zasobu, aby został utworzony w określony sposób.
Aby skonfigurować właściwości przepływu zawartości
W Eksploratorze rozwiązań w projekcie otwórz menu skrótów dla pliku zasobu, a następnie wybierz pozycję Właściwości.
Pojawia się okno dialogowe strony właściwości zasobu .
Upewnij się, że właściwości Configuration i Platform są ustawione na wartości, do których mają zostać zastosowane zmiany.
W obszarze właściwości konfiguracji wybierz węzeł potoku zawartości (na przykład Potok zawartości obrazu dla zasobów tekstury i obrazu), a następnie w siatce właściwości ustaw właściwości na odpowiednie wartości. Aby na przykład wygenerować mipmapy dla zasobu tekstury w czasie kompilacji, ustaw właściwość Generate Mips (Generuj mipsy) na Tak.
Wybierz przycisk OK.
Konfiguracja potoku treści graficznych
Gdy używasz narzędzia potoku zawartości obrazu do tworzenia elementu zawartości tekstury, możesz skompresować teksturę na różne sposoby, wskazać, czy poziomy MIP powinny być generowane w czasie kompilacji i zmienić nazwę pliku wyjściowego.
Własność | Opis |
---|---|
Kompresuj | Określa typ kompresji używany dla pliku wyjściowego. Dostępne opcje to: - brak kompresji - BC1_UNORM kompresja - BC1_UNORM_SRGB kompresji - kompresja BC2_UNORM kompresja - BC2_UNORM_SRGB - kompresji BC3_UNORM - BC3_UNORM_SRGB kompresja - BC4_UNORM kompresja - kompresji BC4_SNORM - BC5_UNORM compression kompresja - BC5_SNORM - BC6H_UF16 kompresja - kompresji BC6H_SF16 - kompresji BC7_UNORM - kompresji BC7_UNORM_SRGB Aby uzyskać informacje o tym, które formaty kompresji są obsługiwane w różnych wersjach programu DirectX, zobacz Programming Guide for DXGI. |
Konwertowanie na wstępnie pomnożony format alfa | Tak; aby przekonwertować obraz na wstępnie pomnożony format alfa w pliku wyjściowym; w przeciwnym razie Nie. Tylko plik wyjściowy jest zmieniany, obraz źródłowy pozostaje niezmieniony. |
Generowanie Mips | Tak w celu wygenerowania pełnego łańcucha MIP w czasie kompilacji i dołączenia go do pliku wyjściowego; w przeciwnym razie Nie. Jeśli Nie, a plik źródłowy zawiera już łańcuch mipmap, plik wyjściowy będzie miał łańcuch MIP; w przeciwnym razie plik wyjściowy nie będzie miał łańcucha MIP. |
Wyjście zawartości | Określa nazwę pliku wyjściowego. Ważne: Zmiana rozszerzenia nazwy pliku wyjściowego nie ma wpływu na jego format pliku. |
Konfiguracja potoku zawartości usługi Mesh
Kiedy korzystasz z narzędzia do przetwarzania zawartości siatki, aby utworzyć zasób siatki, możesz zmienić nazwę pliku wyjściowego.
Własność | Opis |
---|---|
wynik zawartości | Określa nazwę pliku wyjściowego. Ważne: Zmiana rozszerzenia nazwy pliku wyjściowego nie ma wpływu na jego format pliku. |
Konfiguracja potoku cieniowania treści
Gdy używasz narzędzia potoku zawartości cieniowania do kompilowania elementu zawartości cieniującego, możesz zmienić nazwę pliku wyjściowego.
Własność | Opis |
---|---|
Wyjście Zawartości | Określa nazwę pliku wyjściowego. Ważne: Zmiana rozszerzenia nazwy pliku wyjściowego nie ma wpływu na jego format pliku. |
Ładowanie i używanie zasobów 3D w czasie wykonywania
Używanie tekstur i obrazów
Funkcja Direct3D umożliwia tworzenie zasobów tekstury. W wersji Direct3D 11 biblioteka narzędzi D3DX11 udostępnia dodatkowe funkcje do tworzenia zasobów tekstury i widoków zasobów bezpośrednio z plików obrazów. Aby uzyskać więcej informacji na temat tworzenia zasobu tekstury w programie Direct3D 11, zobacz Textures. Aby uzyskać więcej informacji na temat używania biblioteki D3DX11 do tworzenia zasobu tekstury lub widoku zasobu z pliku obrazu, zobacz Instrukcje: inicjowanie tekstury z pliku.
Korzystanie z modeli 3D
Funkcja Direct3D 11 nie zapewnia funkcji tworzenia zasobów na podstawie modeli 3D. Zamiast tego należy napisać kod, który odczytuje plik modelu 3D i tworzy bufory wierzchołków i indeksów reprezentujące model 3D oraz wszelkie zasoby wymagane przez model — na przykład tekstury lub shadery.
Używanie cieniowania
Funkcja Direct3D umożliwia tworzenie zasobów cieniowania i wiązanie ich z programowalnym potokiem grafiki. Aby uzyskać więcej informacji na temat tworzenia zasobu shaderów w Direct3D i jego powiązania z potokiem, zobacz Przewodnik programowania dla HLSL.
W programowalnym potoku graficznym każdy etap musi przekazać następnemu etapowi wynik sformatowany w sposób, który jest dla niego zrozumiały. Ponieważ projektant cieniowania może tworzyć tylko cieniowanie pikseli, oznacza to, że aplikacja musi mieć pewność, że odbierane dane są w oczekiwanym formacie. Przed cieniatorem pikseli występuje kilka programowalnych etapów cieniowania, podczas których wykonywane są przekształcenia geometryczne — cieniowanie wierzchołków, cieniowanie powłoki, cieniowanie domeny i cieniowanie geometrii. Etap nieprogramowalnej teselacji występuje również przed pikselowym cieniowaniem. Niezależnie od tego, który z tych etapów bezpośrednio poprzedza cieniowanie pikseli, musi on podać jego wynik w tym formacie:
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;
};
W zależności od węzłów Projektanta Shaderów używanych w shaderze, możesz także potrzebować podać dodatkowe dane w formacie zgodnym z tymi definicjami.
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;
};
Tematy pokrewne
Tytuł | Opis |
---|---|
Jak eksportować teksturę zawierającą mipmapy | Opisuje, jak użyć potoku zawartości obrazu do eksportowania tekstury zawierającej wstępnie skompilowane mapy mip. |
Jak wyeksportować teksturę z premultipleksowanym kanałem alfa | Opisuje sposób korzystania z potoku przetwarzania obrazu do eksportowania tekstury zawierającej wstępnie zmnóżkowane wartości alfa. |
Instrukcje: eksportowanie tekstury do użycia z aplikacjami Direct2D lub JavaScript | Opisuje, jak używać potoku zawartości obrazu do eksportowania tekstury, która może być używana w aplikacji Direct2D lub JavaScript. |
Praca z zasobami 3D dla gier i aplikacji | Opisuje narzędzia do edycji zapewniane przez program Visual Studio do tworzenia i manipulowania elementami zawartości 3D, które obejmują tekstury i obrazy, modele 3D i cieniowania. |
Jak eksportować shader | Opisuje sposób eksportowania shaderów z Projektanta Shaderów. |