Usar recursos en 3D en un juego o una aplicaciónUse 3D Assets in Your Game or App

En este artículo se describe cómo se puede utilizar Visual Studio para procesar recursos 3D (también llamados activos) e incluirlos en las compilaciones.This article describes how you can use Visual Studio to process 3D assets and include them in your builds.

Después de usar las herramientas de Visual Studio para crear recursos 3D, el paso siguiente consiste en utilizarlos en la aplicación.After you use the tools in Visual Studio to create 3D assets, the next step is to use them in your app. Pero antes de poder usarlos, los activos tienen que transformarse en un formato que DirectX pueda entender.But before you can use them, your assets have to be transformed into a format that DirectX can understand. Para ayudarle a transformar los recursos, Visual Studio proporciona personalizaciones de compilación para cada clase de recurso que puede generar.To help you transform your assets, Visual Studio provides build customizations for each kind of asset that it can produce. Para incluir los activos en la compilación, basta con configurar el proyecto para que use las personalizaciones de compilación, agregar los activos al proyecto y configurar los activos para que usen la personalización de compilación correcta.To include the assets in your build, all you have to do is configure your project to use the build customizations, add the assets to your project, and configure the assets to use the correct build customization. Después, puede cargar los activos en la aplicación y usarlos creando y rellenando los recursos de DirectX igual que haría en cualquier otra aplicación DirectX.After that, you can load the assets into your app and use them by creating and filling DirectX resources just like you would in any other DirectX app.

Configurar el proyectoConfigure your project

Para poder implementar los recursos 3D como parte de la compilación, Visual Studio tiene que conocer las clases de recursos que se desea implementar.Before you can deploy your 3D assets as part of your build, Visual Studio has to know about the kinds of assets that you want to deploy. Visual Studio ya conoce muchos tipos de archivo comunes, pero puesto que solo ciertas clases de aplicaciones utilizan recursos 3D, Visual Studio no supone que un proyecto compilará estas clases de archivos.Visual Studio already knows about many common file types, but because only certain kinds of apps use 3D assets, Visual Studio doesn't assume that a project will build these kinds of files. Puede indicar a Visual Studio que la aplicación usa estas clases de recursos mediante las personalizaciones de compilación (archivos que indican a Visual Studio cómo procesar los distintos tipos de archivos de una manera útil) proporcionadas para cada tipo de recurso.You can tell Visual Studio that your app uses these kinds of assets by using the build customizations—files that tell Visual Studio how to process different types of files in a useful way—that are provided for each asset type. Como estas personalizaciones se aplican por proyecto, basta con agregar las personalizaciones adecuadas al proyecto.Because these customizations are applied on a per-project basis, all you have to do is add the appropriate customizations to your project.

Para agregar las personalizaciones de compilación al proyectoTo add the build customizations to your project

  1. En el Explorador de soluciones, abra el menú contextual del proyecto y, después, elija Dependencias de compilación, Compilar personalizaciones.In Solution Explorer, open the shortcut menu for the project, and then choose Build Dependencies, Build Customizations. Aparece el cuadro de diálogo Archivos de personalizaciones de compilación de Visual C++.The Visual C++ Build Customizations Files dialog box is displayed.

  2. En Archivos de personalizaciones de compilación disponibles, active las casillas correspondientes a los tipos de recurso que quiere usar en el proyecto, como se describe en esta tabla:Under Available Build Customization Files, select the check boxes that correspond to the asset types that you want to use in your project, as described in this table:

    Tipo de activoAsset type Nombre de personalización de compilaciónBuild customization Name
    Texturas e imágenesTextures and images ImageContentTask(.targets, .props)ImageContentTask(.targets, .props)
    Modelos 3D3D Models MeshContentTask(.targets, .props)MeshContentTask(.targets, .props)
    SombreadoresShaders ShaderGraphContentTask(.targets, .props)ShaderGraphContentTask(.targets, .props)
  3. Elija el botón Aceptar .Choose the OK button.

Incluir recursos en la compilaciónInclude assets in your build

Ahora que el proyecto sabe cuáles son las diferentes clases de recursos 3D que desea usar, el paso siguiente consiste en indicarle qué archivos son recursos 3D y qué clases de recursos son.Now that your project knows about the different kinds of 3D assets that you want to use, the next step is to tell it which files are 3D assets, and which kinds of assets they are.

Para agregar un activo a la compilaciónTo add an asset to your build

  1. En el Explorador de soluciones, en el proyecto, abra el menú contextual de un recurso y, después, elija Propiedades.In Solution Explorer, in your project, open the shortcut menu of an asset, and then choose Properties. Aparece el cuadro de diálogo Página de propiedades del recurso.The asset's Property Page dialog box is displayed.

  2. Asegúrese de que las propiedades Configuración y Plataforma se establecen en los valores a los que quiere que se apliquen los cambios.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. En Propiedades de configuración, elija General y, en la cuadrícula de propiedades, en General, establezca la propiedad Tipo de elemento en el tipo de elemento de canalización de contenido adecuado.Under Configuration Properties, choose General, and then in the property grid, under General, set the Item Type property to the appropriate content pipeline item type. Por ejemplo, para un archivo de imagen o de textura, elija Canalización de contenido de la imagen.For example, for an image or texture file, choose Image Content Pipeline.

    Importante

    De forma predeterminada, Visual Studio supone que muchas clases de archivos de imagen se deben categorizar mediante el tipo de elemento Imagen que está integrado en Visual Studio.By default, Visual Studio assumes that many kinds of image files should be categorized by using the Image item type that's built into Visual Studio. Por tanto, debe cambiar la propiedad Tipo de elemento de cada imagen que quiera que procese la canalización de contenido de la imagen.Therefore, you have to change the Item Type property of each image that you want to be processed by the image content pipeline. Otros tipos de archivos de código fuente de canalización de contenido para los modelos 3D y los gráficos del sombreador visual toman el valor predeterminado del Tipo de elemento correcto.Other types of content pipeline source files for 3D models and visual shader graphics default to the correct Item Type.

  4. Elija el botón Aceptar .Choose the OK button.

Estos son los tres tipos de elemento de canalización de contenido y los tipos de archivo de código fuente y de salida asociados.Here are the three content pipeline item types and their associated source and output file types.

Tipo de elementoItem Type Tipos de archivo de código fuenteSource file types Formato del archivo de salidaOutput file format
Canalización de contenido de la imagenImage Content Pipeline Portable Network Graphics (.png)Portable Network Graphics (.png)

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

DirectDraw Surface (.dds)Direct Draw Surface (.dds)

Formato de intercambio de gráficos (.gif)Graphics Interchange Format (.gif)

Mapa de bits (.bmp, .dib)Bitmap (.bmp, .dib)

Formato de archivo de imagen etiquetado (.tif, .tiff)Tagged Image File Format (.tif, .tiff)

Targa (.tga)Targa (.tga)
DirectDraw Surface (.dds)DirectDraw Surface (.dds)
Canalización de contenido de mallasMesh Content Pipeline Archivo de intercambio FBX de Autodesk (.fbx)AutoDesk FBX Interchange File (.fbx)

Archivo DAE de Collada (.dae)Collada DAE File (.dae)

Archivo OBJ de Wavefront (.obj)Wavefront OBJ File (.obj)
Archivo 3D de malla (.cmo)3D mesh file (.cmo)
Canalización de contenido del sombreadorShader Content Pipeline Gráfico de sombreador visual (.dgsl)Visual Shader Graph (.dgsl) Resultado del sombreador compilado (.cso)Compiled Shader Output (.cso)

Configurar las propiedades de la canalización de contenido de recursosConfigure asset content pipeline properties

Se pueden establecer las propiedades de la canalización de contenido de cada archivo de activo para que se compile de una manera determinada.You can set the content pipeline properties of each asset file so that it will be built in a specific way.

Para configurar las propiedades de la canalización de contenidoTo configure content pipeline properties

  1. En el Explorador de soluciones, en el proyecto, abra el menú contextual del archivo de recursos y, después, elija Propiedades.In Solution Explorer, in your project, open the shortcut menu for the asset file, and then choose Properties. Aparece el cuadro de diálogo Página de propiedades del recurso.The asset's Property Page dialog box is displayed.

  2. Asegúrese de que las propiedades Configuración y Plataforma se establecen en los valores a los que quiere que se apliquen los cambios.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. En Propiedades de configuración, elija el nodo de canalización de contenido (por ejemplo, Canalización de contenido de la imagen para los recursos de textura e imagen) y, después, establezca las propiedades en los valores adecuados en la cuadrícula de propiedades.Under Configuration Properties, choose the content pipeline node—for example, Image Content Pipeline for texture and image assets—and then in the property grid, set the properties to the appropriate values. Por ejemplo, para generar los mapas MIP para un recurso de textura en tiempo de compilación, establezca la propiedad Generar Mips en .For example, to generate mipmaps for a texture asset at build time, set the Generate Mips property to Yes.

  4. Elija el botón Aceptar .Choose the OK button.

Configuración de la canalización de contenido de imagenImage content pipeline configuration

Cuando se utiliza la herramienta de canalización de contenido de la imagen para compilar un activo de textura, se puede comprimir la textura de varias maneras, indicar si se deben generar niveles de MIP en tiempo de compilación y cambiar el nombre del archivo de salida.When you use the image content pipeline tool to build a texture asset, you can compress the texture in various ways, indicate whether MIP levels should be generated at build time, and change the name of the output file.

PropertyProperty DescriptionDescription
CompressCompress Especifica el tipo de compresión que se utiliza para el archivo de salida.Specifies the compression type that's used for the output file.

Las opciones disponibles son:The available options are:

- Sin compresión- No Compression
- Compresión BC1_UNORM- BC1_UNORM compression
- Compresión BC1_UNORM_SRGB- BC1_UNORM_SRGB compression
- Compresión BC2_UNORM- BC2_UNORM compression
- Compresión BC2_UNORM_SRGB- BC2_UNORM_SRGB compression
- Compresión BC3_UNORM- BC3_UNORM compression
- Compresión BC3_UNORM_SRGB- BC3_UNORM_SRGB compression
- Compresión BC4_UNORM- BC4_UNORM compression
- Compresión BC4_SNORM- BC4_SNORM compression
- Compresión BC5_UNORM- BC5_UNORM compression
- Compresión BC5_SNORM- BC5_SNORM compression
- Compresión BC6H_UF16- BC6H_UF16 compression
- Compresión BC6H_SF16- BC6H_SF16 compression
- Compresión BC7_UNORM- BC7_UNORM compression
- Compresión BC7_UNORM_SRGB- BC7_UNORM_SRGB compression

Para obtener información sobre qué formatos de compresión se admiten en las diferentes versiones de DirectX, vea la Guía de programación para DXGI.For information about which compression formats are supported in different versions of DirectX, see Programming Guide for DXGI.
Convertir a formato alpha premultiplicadoConvert to pre-multiplied alpha format para convertir la imagen al formato alfa premultiplicado en el archivo de salida, de lo contrario, No.Yes to convert the image to pre-multiplied alpha format in the output file; otherwise, No. Solo se cambia el archivo de salida, la imagen original no se cambia.Only the output file is changed, the source image is unchanged.
Generar MIPGenerate Mips para generar una cadena completa de mapas MIP en tiempo de compilación e incluirla en el archivo de salida; de lo contrario, No.Yes to generate a full MIP chain at build time and include it in the output file; otherwise, No. Si es No y el archivo de código fuente ya contiene una cadena de mapas MIP, el archivo de salida tendrá una cadena de mapas MIP; de lo contrario, el archivo de salida no tendrá ninguna cadena de mapas MIP.If No, and the source file already contains a mipmap chain, then the output file will have a MIP chain; otherwise, the output file will have no MIP chain.
Salida de contenidoContent Output Especifica el nombre del archivo de salida.Specifies the name of the output file. Importante: Cambiar la extensión del nombre del archivo de salida no tiene ningún efecto sobre el formato del archivo.Important: Changing the file name extension of the output file has no effect on its file format.

Configuración de la canalización de contenido de mallasMesh content pipeline configuration

Cuando se utiliza la herramienta de canalización de contenido de mallas para compilar un activo de malla, se puede cambiar el nombre del archivo de salida.When you use the mesh content pipeline tool to build a mesh asset, you can change the name of the output file.

PropertyProperty DescriptionDescription
Salida de contenidoContent Output Especifica el nombre del archivo de salida.Specifies the name of the output file. Importante: Cambiar la extensión del nombre del archivo de salida no tiene ningún efecto sobre el formato del archivo.Important: Changing the file name extension of the output file has no effect on its file format.

Configuración de la canalización de contenido del sombreadorShader content pipeline configuration

Cuando se utiliza la herramienta de canalización de contenido del sombreador para compilar un activo de sombreador, se puede cambiar el nombre del archivo de salida.When you use the shader content pipeline tool to build a shader asset, you can change the name of the output file.

PropertyProperty DescriptionDescription
Salida de contenidoContent Output Especifica el nombre del archivo de salida.Specifies the name of the output file. Importante: Cambiar la extensión del nombre del archivo de salida no tiene ningún efecto sobre el formato del archivo.Important: Changing the file name extension of the output file has no effect on its file format.

Cargar y usar recursos 3D en tiempo de ejecuciónLoad and use 3D assets at run time

Utilizar texturas e imágenesUse textures and images

Direct3D proporciona funciones para crear recursos de textura.Direct3D provides functions for creating texture resources. En Direct3D 11, la biblioteca de utilidades D3DX11 proporciona funciones adicionales para crear recursos de texturas y vistas de recursos de textura directamente a partir de archivos de imagen.In Direct3D 11, the D3DX11 utility library provides additional functions for creating texture resources and resource views directly from image files. Para más información sobre cómo crear un recurso de textura en Direct3D 11, vea Texturas.For more information about how to create a texture resource in Direct3D 11, see Textures. Para más información sobre cómo usar la biblioteca D3DX11 para crear un recurso de textura o una vista de recursos de textura a partir de un archivo de imagen, vea Cómo: Inicializar una textura desde un archivo.For more information about how to use the D3DX11 library to create a texture resource or resource view from an image file, see How to: Initialize a Texture From a File.

Usar modelos 3DUse 3D models

Direct3D 11 no proporciona funciones para crear recursos a partir de modelos 3D.Direct3D 11 does not provide functions for creating resources from 3D models. En su lugar, tiene que escribir código que lea el archivo del modelo 3D y cree búferes de vértices y de índices que representen el modelo 3D y cualquier recurso que requiera el modelo, como texturas o sombreadores.Instead, you have to write code that reads the 3D model file and creates vertex and index buffers that represent the 3D model and any resources that the model requires—for example, textures or shaders.

Usar sombreadoresUse shaders

Direct3D proporciona funciones para crear recursos de sombreador y enlazarlos a la canalización programable de gráficos.Direct3D provides functions for creating shader resources and binding them to the programmable graphics pipeline. Para más información sobre cómo crear un recurso de sombreador en Direct3D y enlazarlo a la canalización, vea la guía de programación para HLSL.For more information about how to create a shader resource in Direct3D and bind it to the pipeline, see Programming Guide for HLSL.

En la canalización programable de gráficos, cada fase de la canalización debe aportar a la siguiente fase de la canalización un resultado con formato de forma que se pueda entender.In the programmable graphics pipeline, each stage of the pipeline must give the next stage of the pipeline a result that's formatted in a way that it can understand. Puesto que el Diseñador de sombras solo puede crear sombreadores de píxeles, esto significa que depende de la aplicación el garantizar que los datos que recibe están en el formato que se espera.Because the Shader Designer can only create pixel shaders, this means that it's up to your app to ensure that the data that it receives is in the format that it expects. Hay varias fases del sombreador programables que tienen lugar antes que el sombreador de píxeles y que realizan transformaciones geométricas: el sombreador de vértices, el sombreador de casco, el sombreador de dominios y el sombreador de geometría.Several programmable shader stages occur before the pixel shader and perform geometric transformations—the vertex shader, the hull shader, the domain shader, and the geometry shader. La fase de teselación no programable también tiene lugar antes que el sombreador de píxeles.The non-programmable tessellation stage also occurs before the pixel shader. Independientemente de cuál de estas fases preceda directamente al sombreador de píxeles, debe facilitar su resultado en este formato:No matter which of these stages directly precedes the pixel shader, it must give its result in this format:

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

En función de los nodos del Diseñador de sombras que use en el sombreador, puede que tenga que proporcionar también datos adicionales en el formato adecuado según estas definiciones:Depending on the Shader Designer nodes that you use in your shader, you might also have to provide additional data in the format according to these definitions:

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;
};
TitleTitle DescriptionDescription
Cómo: Exportar una textura que contiene mapas MIPHow to: Export a Texture that Contains Mipmaps Describe cómo utilizar la canalización de contenido de la imagen para exportar una textura que contiene mapas MIP calculados previamente.Describes how to use the Image Content Pipeline to export a texture that contains precomputed mipmaps.
Cómo: Exportar una textura que tiene alfa premultiplicadoHow to: Export a Texture that has Premultiplied Alpha Describe cómo utilizar la canalización de contenido de imagen para exportar una textura que contiene valores alfa multiplicados previamente.Describes how to use the Image Content Pipeline to export a texture that contains premultiplied alpha values.
Cómo: Exportar una textura para usarla con aplicaciones de Direct2D o JavascriptHow to: Export a Texture for Use with Direct2D or Javascipt Apps Describe cómo utilizar la canalización de contenido de la imagen para exportar una textura que se puede utilizar en una aplicación de Direct2D o JavaScript.Describes how to use the Image Content Pipeline to export a texture that can be used in a Direct2D or JavaScript app.
Trabajar con recursos en 3D para juegos y aplicacionesWorking with 3D Assets for Games and Apps Describe las herramientas de edición que proporciona Visual Studio para crear y manipular recursos 3D, que incluyen texturas e imágenes, modelos 3D y sombreadores.Describes the editing tools that Visual Studio provides for creating and manipulating 3D assets, which include textures and images, 3D models, and shaders.
Cómo: Exportar un sombreadorHow to: Export a Shader Describe cómo exportar un sombreador desde el Diseñador de sombras.Describes how to export a shader from the Shader Designer.