Freigeben über


Verwenden von 3D-Ressourcen in Ihrem Spiel oder Ihrer App

In diesem Artikel wird beschrieben, wie Sie 3D-Ressourcen mithilfe von Visual Studio verarbeiten und in Ihre Builds einschließen können.

Nachdem Sie die Tools in Visual Studio zum Erstellen von 3D-Ressourcen verwendet haben, besteht der nächste Schritt darin, sie in Ihrer App zu verwenden. Bevor Sie sie jedoch verwenden können, müssen Ihre Ressourcen in ein Format umgewandelt werden, das DirectX verstehen kann. Um Ihre Ressourcen zu transformieren, stellt Visual Studio Buildanpassungen für jede Art von Ressource bereit, die sie erzeugen kann. Um die Ressourcen in Ihren Build einzuschließen, müssen Sie ihr Projekt nur so konfigurieren, dass die Buildanpassungen verwendet werden, die Ressourcen zu Ihrem Projekt hinzugefügt und die Ressourcen so konfiguriert werden, dass die richtige Buildanpassung verwendet wird. Danach können Sie die Ressourcen in Ihre App laden und verwenden, indem Sie DirectX-Ressourcen wie in jeder anderen DirectX-App erstellen und ausfüllen.

Konfigurieren Des Projekts

Bevor Sie Ihre 3D-Ressourcen als Teil Ihres Builds bereitstellen können, muss Visual Studio über die Art von Ressourcen wissen, die Sie bereitstellen möchten. Visual Studio kennt bereits viele gängige Dateitypen, aber da nur bestimmte Arten von Apps 3D-Ressourcen verwenden, geht Visual Studio nicht davon aus, dass ein Projekt diese Arten von Dateien erstellt. Sie können Visual Studio mitteilen, dass Ihre App diese Arten von Ressourcen verwendet, indem Sie die Buildanpassungenverwenden – Dateien, die Visual Studio mitteilen, wie verschiedene Dateitypen auf nützliche Weise verarbeitet werden, die für jeden Ressourcentyp bereitgestellt werden. Da diese Anpassungen pro Projekt angewendet werden, müssen Sie dem Projekt nur die entsprechenden Anpassungen hinzufügen.

Hinzufügen von Buildanpassungen zu Ihrem Projekt

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt, und wählen Sie Buildabhängigkeiten>Buildanpassungen aus.

    Das Dialogfeld Buildanpassungsdateien in Visual C++ wird angezeigt.

  2. Aktivieren Sie unter Verfügbare Buildanpassungsdateien die Kontrollkästchen für die in der folgenden Tabelle beschriebenen Ressourcentypen, die Sie im Projekt verwenden möchten:

    Objekttyp Name der Buildanpassung
    Texturen und Bilder ImageContentTask(.targets, .props)
    3D-Modelle MeshContentTask(.targets, .props)
    Shader ShaderGraphContentTask(.targets, .props)

    Anmerkung

    Visual Studio 2022 17.9.3 hat die Unterstützung für den Modell-Editor und MeshContentTask aufgrund von Sicherheitsbedenken im FbX SDK von Autodesk entfernt. Siehe CVE-2023-27911.

  3. Klicken Sie auf die Schaltfläche OK.

Schließen Sie Ressourcen in Ihren Build ein

Da Ihr Projekt nun über die verschiedenen Arten von 3D-Ressourcen weiß, die Sie verwenden möchten, besteht der nächste Schritt darin, ihnen mitzuteilen, welche Dateien 3D-Ressourcen sind und welche Arten von Ressourcen sie sind.

Hinzufügen von Ressourcen zu Ihrem Build

  1. Öffnen Sie im Projektmappen-Explorer in Ihrem Projekt das Kontextmenü für eine Ressource, und wählen Sie dann Eigenschaften aus.

    Das Dialogfeld der Eigenschaftenseite des Objekts wird angezeigt.

  2. Stellen Sie sicher, dass die eigenschaften Configuration und Platform auf die Werte festgelegt sind, auf die Ihre Änderungen angewendet werden sollen.

  3. Wählen Sie unter KonfigurationseigenschaftenAllgemeinaus und legen Sie dann im Eigenschaftenraster unter Allgemeindie Elementtyp Eigenschaft auf den entsprechenden Inhaltspipelineelementtyp fest. Wählen Sie z. B. für eine Bild- oder Texturdatei Bildinhaltspipelineaus.

    Wichtig

    Standardmäßig geht Visual Studio davon aus, dass viele Arten von Bilddateien mithilfe des in Visual Studio integrierten elementtyps Image kategorisiert werden sollen. Daher müssen Sie die Eigenschaft des Elementtyps jedes Bilds ändern, das von der Bildinhaltspipeline verarbeitet werden soll. Andere Typen von Inhaltspipeline-Quelldateien für 3D-Modelle und visuelle Shadergrafiken werden standardmäßig auf den richtigen Elementtypfestgelegt.

  4. Klicken Sie auf die Schaltfläche OK.

Nachfolgend sind die drei Inhaltspipelineelementtypen und die zugehörigen Quell- und Ausgabedateitypen aufgeführt.

Elementtyp Quelldateitypen Ausgabedateiformat
Bildinhaltspipeline Portable Network Graphics (.png)

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

Direct Draw Surface (.dds)

Grafik-Austauschformat (.gif)

Bitmap (.bmp, .dib)

Tagged Image File Format (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Gitterinhaltspipeline AutoDesk FBX-Austauschdatei (.fbx)

Collada-DAE-Datei (.dae)

Wavefront-OBJ-Datei (.obj)
3D-Gitterdatei (.cmo)
Shaderinhaltspipeline Visual Shader-Diagramm (.dgsl) Compiled Shader Output (.cso)

Konfigurieren von Eigenschaften der Ressourceninhaltspipeline

Sie können die Eigenschaften der Inhaltspipeline jeder Objektdatei so festlegen, dass sie auf eine bestimmte Weise erstellt wird.

So konfigurieren Sie Eigenschaften der Inhaltspipeline

  1. Öffnen Sie im Projektmappen-Explorer in Ihrem Projekt das Kontextmenü für die Ressourcendatei, und wählen Sie dann Eigenschaften aus.

    Das Dialogfeld der Eigenschaftsseite des Objekts wird angezeigt.

  2. Stellen Sie sicher, dass die eigenschaften Configuration und Platform auf die Werte festgelegt sind, auf die Ihre Änderungen angewendet werden sollen.

  3. Wählen Sie unter Konfigurationseigenschaftenden Knoten der Inhaltspipeline aus (z. B. Bildinhaltspipeline für Textur- und Bildressourcen), und legen Sie dann im Eigenschaftenraster die Eigenschaften auf die entsprechenden Werte fest. Um beispielsweise Mipmaps für eine Texturressource zum Zeitpunkt der Erstellung zu generieren, legen Sie die Eigenschaft MIPS generieren auf Ja fest.

  4. Klicken Sie auf die Schaltfläche OK.

Konfiguration der Bildinhaltspipeline

Wenn Sie das Tool der Bildinhaltspipeline zum Erstellen eines Texture-Assets verwenden, können Sie die Textur auf verschiedene Arten komprimieren, festlegen, ob MIP-Ebenen zur Erstellungszeit generiert werden sollen, und den Namen der Ausgabedatei ändern.

Eigentum Beschreibung
Komprimieren Gibt den Komprimierungstyp an, der für die Ausgabedatei verwendet wird.

Die verfügbaren Optionen sind:

- keine Komprimierung
- BC1_UNORM-Komprimierung
- BC1_UNORM_SRGB-Komprimierung
- BC2_UNORM-Komprimierung
- BC2_UNORM_SRGB-Komprimierung
- BC3_UNORM-Komprimierung
- BC3_UNORM_SRGB-Komprimierung
- BC4_UNORM-Komprimierung
- BC4_SNORM-Komprimierung
- BC5_UNORM-Komprimierung
- BC5_SNORM-Komprimierung
- BC6H_UF16-Komprimierung
- BC6H_SF16-Komprimierung
- BC7_UNORM-Komprimierung
- BC7_UNORM_SRGB-Komprimierung

Informationen dazu, welche Komprimierungsformate in verschiedenen Versionen von DirectX unterstützt werden, finden Sie im Programmierhandbuch für DXGI-.
In vorab multipliziertes Alphaformat konvertieren Ja, um das Bild in das vorab multiplizierte Alphaformat in der Ausgabedatei zu konvertieren; andernfalls Keine. Nur die Ausgabedatei wird geändert, das Quellbild ist unverändert.
Generieren von MIPS Ja, um eine vollständige MIP-Kette zum Zeitpunkt der Erstellung zu generieren und in die Ausgabedatei einzuschließen; andernfalls Nein. Wenn Nound die Quelldatei bereits eine Mipmap-Kette enthält, weist die Ausgabedatei eine MIP-Kette auf; andernfalls enthält die Ausgabedatei keine MIP-Kette.
Inhaltsausgabe Gibt den Namen der Ausgabedatei an. Wichtig: Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Konfiguration der Gitterinhaltspipeline

Wenn Sie das Gitterinhaltspipelinetool zum Erstellen einer Gitterressource verwenden, können Sie den Namen der Ausgabedatei ändern.

Eigentum Beschreibung
Inhaltsausgabe Gibt den Namen der Ausgabedatei an. Wichtig: Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Konfiguration der Shaderinhaltspipeline

Wenn Sie das Shaderinhaltspipelinetool zum Erstellen einer Shaderressource verwenden, können Sie den Namen der Ausgabedatei ändern.

Eigentum Beschreibung
Inhaltsausgabe Gibt den Namen der Ausgabedatei an. Wichtig: Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Laden und verwenden von 3D-Objekten zur Laufzeit

Verwenden von Texturen und Bildern

Direct3D stellt Funktionen zum Erstellen von Texturressourcen bereit. In Direct3D 11 bietet die Hilfsbibliothek D3DX11 zusätzliche Funktionen zum Erstellen von Texturressourcen und Ressourcenansichten direkt aus Bilddateien. Weitere Informationen zum Erstellen einer Texturressource in Direct3D 11 finden Sie unter Texturen. Weitere Informationen zur Verwendung der D3DX11-Bibliothek zum Erstellen einer Texturressource oder Ressourcenansicht aus einer Bilddatei finden Sie unter How to: Initialize a texture from a file.

Verwenden von 3D-Modellen

Direct3D 11 bietet keine Funktionen zum Erstellen von Ressourcen aus 3D-Modellen. Stattdessen müssen Sie Code schreiben, der die 3D-Modelldatei liest, und Vertex- und Indexpuffer erstellt, die das 3D-Modell und alle Ressourcen darstellen, die das Modell benötigt, z. B. Texturen oder Shader.

Verwenden von Shadern

Direct3D stellt Funktionen zum Erstellen von Shaderressourcen bereit und bindet sie an die programmierbare Grafikpipeline. Weitere Informationen zum Erstellen einer Shaderressource in Direct3D und zum Binden an die Pipeline finden Sie im Programmierhandbuch für HLSL-.

In der programmierbaren Grafikpipeline muss jede Phase der Pipeline der nächsten Phase der Pipeline ein Ergebnis übergeben, das so formatiert ist, dass es verstanden wird. Da der Shader-Designer nur Pixelshader erstellen kann, bedeutet dies, dass es bis zu Ihrer App liegt, um sicherzustellen, dass die empfangenen Daten im erwarteten Format vorliegen. Mehrere programmierbare Shaderphasen treten vor dem Pixelshader auf und führen geometrische Transformationen durch– den Vertex-Shader, den Hull-Shader, den Domänen-Shader und den Geometrie-Shader. Die nicht programmierbare Tessellationsphase tritt auch vor dem Pixelshader auf. Unabhängig davon, welche dieser Phasen direkt vor dem Pixelshader steht, muss es sein Ergebnis in diesem Format geben:

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

Abhängig von den Shader-Designer-Knoten, die Sie in Ihrem Shader verwenden, müssen Sie möglicherweise auch zusätzliche Daten im Format gemäß den folgenden Definitionen bereitstellen:

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 Beschreibung
Anleitung: Eine Textur exportieren, die Mipmaps enthält Beschreibt die Verwendung der Bildinhaltspipeline zum Exportieren einer Textur, die vorkompilierte Mipmaps enthält.
Exportieren von umfangreichen Texturformaten mithilfe der Pipeline für Bildinhalte in Visual Studio Beschreibt, wie die Bildinhaltspipeline zum Exportieren einer Textur verwendet wird, die prämultiplizierte Alphawerte enthält.
Anleitung: Eine Textur für die Verwendung mit Direct2D- oder JavaScript-Apps exportieren Beschreibt, wie Die Bildinhaltspipeline zum Exportieren einer Textur verwendet wird, die in einer Direct2D- oder JavaScript-App verwendet werden kann.
Arbeiten mit 3D-Ressourcen für Spiele und Apps Beschreibt die Bearbeitungstools, die Visual Studio zum Erstellen und Bearbeiten von 3D-Ressourcen bereitstellt, einschließlich Texturen und Bildern, 3D-Modellen und Shadern.
Anleitung: Ein Shader exportieren Beschreibt, wie ein Shader aus dem Shader-Designer exportiert wird.