Verwenden von 3D-Objekten in Spielen oder Apps

In diesem Artikel wird beschrieben, wie Sie Visual Studio verwenden können, um 3D-Ressourcen zu verarbeiten und in Ihre Builds zu integrieren.

Nachdem Sie 3D-Ressourcen mit den Tools von Visual Studio erstellt haben, besteht der nächste Schritt darin, sie in Ihrer App zu verwenden.Bevor Sie sie jedoch verwenden können, müssen sie in ein Format umgewandelt werden, dass von DirectX unterstützt wird.Um Sie bei der Umwandlung Ihrer Ressourcen zu unterstützen, stellt Visual Studio Buildanpassungen für jede Art von Ressource bereit, die es erzeugen kann.Um die Ressourcen in Ihrem Build zu integrieren, müssen Sie einfach nur Ihr Projekt für die Verwendung der Buildanpassungen konfigurieren, die Ressourcen dem Projekt hinzufügen und die Ressourcen so konfigurieren, dass die richtige Buildanpassung verwendet wird.Danach können Sie die Ressourcen in die App laden und sie verwenden. Dazu erstellen und füllen Sie DirectX-Ressourcen so, wie Sie es in jeder anderen DirectX-App tun würden.

Konfigurieren des Projekts

Bevor Sie die 3D-Ressourcen als Teil des Builds bereitstellen können, muss Visual Studio mitgeteilt werden, welche Arten von Ressourcen Sie bereitstellen möchten.Visual Studio kennt bereits viele gängige Dateitypen. Da aber nur bestimmte Arten von Apps 3D-Ressourcen verwenden, kann Visual Studio nicht wissen, dass ein Projekt mit diesen Arten von Dateien erstellt wird.Sie können Visual Studio mitteilen, dass die App diese Arten von Ressourcen verwendet, indem Sie die Buildanpassungen nutzen. Dies sind Dateien, die Visual Studio darüber informieren, wie die verschiedenen Dateitypen sinnvoll verarbeitet werden, die für jeden Ressourcentyp bereitgestellt werden.Da diese Anpassungen projektweise angewendet werden, müssen Sie einfach nur die entsprechenden Anpassungen dem Projekt hinzufügen.

So fügen Sie die Buildanpassungen dem Projekt hinzu

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt, und wählen Sie Buildanpassungen aus.Das Dialogfeld Buildanpassungsdateien in Visual C++ wird angezeigt.

  2. Sie müssen diese Buildanpassungen nur einmal zu Visual Studio hinzufügen. Wenn Sie sie bereits hinzugefügt haben, können Sie diesen Schritt überspringen.

    Wählen Sie die Schaltfläche Vorhandenes Element suchen aus, und navigieren Sie dann zum Visual Studio-Installationsverzeichnis\Common7\IDE\Extensions\Microsoft\VSGraphics\, das die drei Buildanpassungen enthält, die die Erstellung von 3D-Ressourcen unterstützen.Wählen Sie eine der Buildanpassungsdateien aus, z. B. "ImageContentTask.targets", und klicken Sie auf die Schaltfläche Öffnen.Wenn Sie gefragt werden, ob Sie das Verzeichnis dem Buildanpassungs-Suchpfad hinzufügen möchten, wählen Sie Schaltfläche Ja aus.Dadurch werden alle drei der Buildanpassungen verfügbar.

  3. Wählen Sie die Schaltfläche Liste aktualisieren aus, um das Rasteransichtssteuerelement Verfügbare Buildanpassungsdateien zu aktualisieren.

  4. Aktivieren Sie im Rasteransichtssteuerelement Verfügbare Buildanpassungsdateien die Kontrollkästchen, die den Ressourcentypen, die Sie im Projekt verwenden möchten, wie in dieser Tabelle beschrieben entsprechen:

    Ressourcentyp

    Name der Buildanpassung

    Texturen und Bilder

    ImageContentTask(.targets, .props)

    3D-Modelle

    MeshContentTask(.targets, .props)

    Shader

    ShaderGraphContentTask(.targets, .props)

  5. Klicken Sie auf die Schaltfläche OK.

Integrieren der Ressourcen im Build

Nachdem dem Projekt nun die verschiedenen Arten von 3D-Ressourcen, die Sie verwenden möchten, mitgeteilt wurden, besteht der nächste Schritt darin, Informationen darüber zu liefern, welche Dateien 3D-Ressourcen sind und welcher Art von Ressourcen sie sind.

So fügen Sie eine Ressource dem Build hinzu

  1. Öffnen Sie im Projektmappen-Explorer in Ihrem Projekt das Kontextmenü für eine Ressource, und wählen Sie Eigenschaften aus.Das Dialogfeld Eigenschaftenseite für die Ressource wird angezeigt.

  2. Stellen Sie sicher, dass die Eigenschaften Konfiguration und Plattform auf die Werte festgelegt werden, für die Ihre Änderungen gelten sollen.

  3. Wählen Sie unter Konfigurationseigenschaften die Option Allgemein. Legen Sie dann im Eigenschaftenraster unter Allgemein die Eigenschaft Elementtyp auf den entsprechenden Inhaltspipeline-Elementtyp fest.Wählen Sie z. B. für eine Bild- oder Texturdatei Pipeline für Bildinhalte aus.

    Wichtiger HinweisWichtig

    Standardmäßig geht Visual Studio davon aus, dass viele Arten Bilddateien anhand des Elementtyps Bild kategorisiert werden sollen, der in Visual Studio integriert ist.Deshalb müssen Sie die Eigenschaft Elementtyp jedes der Bilder ändern, die durch die Bildinhaltspipeline verarbeitet werden sollen.Für andere Typen von Inhaltspipeline-Quelldateien für 3D-Modelle und visuelle Shader-Grafiken wird standardmäßig der richtige Elementtyp vorgeschlagen.

  4. Klicken Sie auf die Schaltfläche OK.

Nachstehend sind die drei Pipelineelementtypen und ihre zugeordneten Quell- und Ausgabedateitypen aufgeführt.

Elementtyp

Typen der Quelldatei

Format der Ausgabedatei

Bildinhaltspipeline

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)

Mesh-Inhaltspipeline

AutoDesk-FBX-Austauschdatei (.fbx)

Collada DAE-Datei (.dae)

Wavefront-OBJ-Datei (.obj)

3D-Mesh-Datei (.cmo)

Shader-Inhaltspipeline

Visual Shader-Diagramm (.dgsl)

Compiled Shader Output (.cso)

Konfigurieren der Eigenschaften von Ressourceninhaltspipelines

Sie können die Eigenschaften der Inhaltspipeline für jede Ressourcendatei festlegen, sodass diese auf eine bestimmte Weise erstellt wird.

So konfigurieren Sie Inhaltspipelineeigenschaften

  1. Öffnen Sie im Projektmappen-Explorer in Ihrem Projekt das Kontextmenü für die Ressourcendatei, und wählen Sie Eigenschaften aus.Das Dialogfeld Eigenschaftenseite für die Ressource wird angezeigt.

  2. Stellen Sie sicher, dass die Eigenschaften Konfiguration und Plattform auf die Werte festgelegt werden, für die Ihre Änderungen gelten sollen.

  3. Wählen Sie unter Konfigurationseigenschaften den Inhaltspipelineknoten aus, z. B. Bildinhaltspipeline für Textur- und Bildressourcen. 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.

Hh972446.collapse_all(de-de,VS.110).gifKonfiguration der Bildinhaltspipeline

Wenn Sie zur Erstellung einer Texturressource das Tool für Bildinhaltspipelines verwenden, können Sie die Textur auf verschiedene Arten komprimieren. Und Sie können angeben, ob MIP-Ebenen zum Zeitpunkt der Erstellung generiert werden sollen, und den Namen der Ausgabedatei angeben.

Eigenschaft

Beschreibung

Komprimieren

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

Die folgenden Optionen sind verfügbar:

  • 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 darüber, welche Komprimierungsformate von den verschiedenen Versionen von DirectX unterstützt werden, finden Sie unter Programmierhandbuch für DXGI.

MIPS generieren

Ja, um eine vollständige MIP-Kette zum Zeitpunkt der Erstellung zu generieren und in die Ausgabedatei einzuschließen; andernfalls Nein.Falls Sie Nein wählen und die Quelldatei bereits eine Mipmap-Kette enthält, verfügt die Ausgabedatei über eine MIP-Kette; andernfalls hat die Ausgabedatei keine MIP-Kette.

Inhaltsausgabe

Gibt den Namen der Ausgabedatei an.

Wichtiger HinweisWichtig
Das Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Hh972446.collapse_all(de-de,VS.110).gifKonfiguration der Mesh-Inhaltspipeline

Wenn Sie das Tool für Mesh-Inhaltspipelines verwenden, um eine Meshressource zu erstellen, können Sie den Namen der Ausgabedatei ändern.

Eigenschaft

Beschreibung

Inhaltsausgabe

Gibt den Namen der Ausgabedatei an.

Wichtiger HinweisWichtig
Das Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Hh972446.collapse_all(de-de,VS.110).gifKonfiguration der Shader-Inhaltspipeline

Wenn Sie das Tool für Shader-Inhaltspipelines verwenden, um eine Shader-Ressource zu erstellen, können Sie den Namen der Ausgabedatei ändern.

Eigenschaft

Beschreibung

Inhaltsausgabe

Gibt den Namen der Ausgabedatei an.

Wichtiger HinweisWichtig
Das Ändern der Dateinamenerweiterung der Ausgabedatei hat keine Auswirkungen auf das Dateiformat.

Laden und Verwenden von 3D-Ressourcen zur Laufzeit

Hh972446.collapse_all(de-de,VS.110).gifVerwenden von Texturen und Bildern

Direct3D stellt Funktionen zum Erstellen von Texturressourcen bereit.In Direct3D 11 bietet die Dienstbibliothek D3DX11 zusätzliche Funktionen für das Erstellen von Texturressourcen und Ressourcenansichten direkt aus Bilddateien.Weitere Informationen darüber, wie Sie eine Texturressource in Direct3D 11 erstellen, finden Sie unter Textures.Weitere Informationen dazu, wie Sie die Bibliothek D3DX11 verwendet, um eine Texturressource oder eine Ressourcenansicht aus einer Bilddatei zu erstellen, finden Sie unter Gewusst wie: Initialisieren Sie eine Textur aus einer Datei.

Hh972446.collapse_all(de-de,VS.110).gifVerwenden von 3D-Modellen

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

Hh972446.collapse_all(de-de,VS.110).gifVerwenden von Shadern

Direct3D stellt Funktionen zum Erstellen von Shaderressourcen und -Bindung sie zur programmierbaren Graphikpipeline bereit.Weitere Informationen darüber, wie Sie eine Shaderressource in Direct3D erstellt und der - Pipeline binden, finden Sie unter 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, das es verstanden wird.Da der Shader-Designer nur Pixel-Shader erstellen kann, bedeutet dies, dass Ihre App sicherstellen muss, dass die Daten, die sie erhält, im erwarteten Format vorliegen.Einige programmierbare Shader-Phasen treten vor dem Pixel-Shader auf und führen geometrische Umwandlungen durch – darunter Vertex-Shader, Hull-Shader, Domain-Shader und Geometrie-Shader.Die nicht programmierbare Mosaikphase tritt ebenfalls vor dem Pixel-Shader auf.Unabhängig davon, welche dieser Phasen direkt vor dem Pixel-Shader stattfindet, muss sie ihr Ergebnis in diesem Format übergeben:

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 im Shader verwenden, müssen Sie möglicherweise auch zusätzliche Daten in einem Format entsprechend diesen 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;
};

Siehe auch

Aufgaben

Gewusst wie: Exportieren eines Shaders

Weitere Ressourcen

Arbeiten mit 3D-Objekten für Spiele und Apps