Compartir a través de


Usar recursos 3D en tu juego o aplicación

En este artículo se describe cómo puede usar Visual Studio para procesar recursos 3D e incluirlos en las compilaciones.

Después de usar las herramientas de Visual Studio para crear recursos 3D, el siguiente paso es usarlos en la aplicación. Sin embargo, antes de poder usarlos, los recursos deben transformarse en un formato que DirectX pueda entender. Para ayudarle a transformar los recursos, Visual Studio proporciona personalizaciones de compilación para cada tipo de recurso que puede generar. Para incluir los recursos en su compilación, lo único que debe hacer es configurar su proyecto para usar las personalizaciones de compilación, agregar los recursos a su proyecto y configurar los recursos para usar la personalización de compilación correcta. Después, puedes cargar los recursos en la aplicación y usarlos creando y rellenando recursos de DirectX como lo harías en cualquier otra aplicación de DirectX.

Configuración del proyecto

Para poder implementar los recursos 3D como parte de la compilación, Visual Studio debe conocer los tipos de recursos que desea implementar. Visual Studio ya conoce muchos tipos de archivos comunes, pero porque solo ciertos tipos de aplicaciones usan recursos 3D, Visual Studio no supone que un proyecto compilará estos tipos de archivos. Puede indicar a Visual Studio que la aplicación usa estos tipos de recursos mediante las personalizaciones de compilación (archivos que indican a Visual Studio cómo procesar diferentes tipos de archivos de forma útil) que se proporcionan para cada tipo de recurso. Dado que estas personalizaciones se aplican por proyecto, todo lo que tiene que hacer es agregar las personalizaciones adecuadas al proyecto.

Para agregar las personalizaciones de compilación al proyecto

  1. En el Explorador de soluciones, abra el menú contextual del proyecto y luego elija Dependencias de compilación>Compilar personalizaciones.

    Aparece el cuadro de diálogo Archivos de personalizaciones de compilación de Visual C++.

  2. En Archivos de personalizaciones de compilación disponibles, active las casillas correspondientes a los tipos de recursos que quiere usar en el proyecto, como se describe en la siguiente tabla:

    Tipo de activo Nombre de personalización de compilación
    Texturas e imágenes ImageContentTask(.targets, .props)
    Modelos 3D MeshContentTask(.targets, .props)
    Sombreadores ShaderGraphContentTask(.targets, .props)

    Nota

    Visual Studio 2022 17.9.3 quitó la compatibilidad con el Editor de modelos y MeshContentTask debido a problemas de seguridad en el SDK de Autodesk FBX. Consulte CVE-2023-27911.

  3. Elija el botón Aceptar.

Incluir recursos en la compilación

Ahora que el proyecto conoce los diferentes tipos de recursos 3D que desea usar, el siguiente paso es indicarle qué archivos son recursos 3D y qué tipos de recursos son.

Para agregar un activo a la compilación

  1. En el Explorador de soluciones, en el proyecto, abra el menú contextual de un recurso y, después, elija Propiedades.

    Aparece el cuadro de diálogo Página de propiedades del recurso.

  2. Asegúrese de que las propiedades de Configuración de y de Plataforma de estén establecidas en los valores a los que desea que se apliquen los cambios.

  3. En Propiedades de configuración, elija Generaly, a continuación, en la cuadrícula de propiedades, bajo General, establezca la propiedad Tipo de elemento en el tipo de elemento de canalización de contenido apropiado. Por ejemplo, para un archivo de imagen o de textura, elija Canalización de contenido de la imagen.

    Importante

    De forma predeterminada, Visual Studio presupone que muchos tipos de archivos de imagen deben clasificarse mediante el Image tipo de elemento integrado en 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. 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.

  4. Elija el botón Aceptar.

A continuación se muestran los tres tipos de elementos de canalización de contenido y sus tipos de archivo de origen y salida asociados.

Tipo de elemento Tipos de archivo de origen Formato de archivo de salida
Canalización de contenido de la imagen Gráficos de red portátiles (.png)

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

DirectDraw Surface (.dds)

Formato de intercambio de gráficos (.gif)

Mapa de bits (.bmp, .dib)

Formato de archivo de imagen etiquetado (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Canalización de contenido de mallas Archivo de intercambio FBX de Autodesk (.fbx)

Archivo DAE de Collada (.dae)

Archivo OBJ de Wavefront (.obj)
Archivo 3D de malla (.cmo)
Canalización de contenido del sombreador Gráfico de sombreador visual (.dgsl) Resultado del sombreador compilado (.cso)

Configurar las propiedades de la canalización de contenido de recursos

Puede establecer las propiedades de canalización de contenido de cada archivo de activo para que se compile de una manera específica.

Para configurar las propiedades de canalización de contenido

  1. En el Explorador de soluciones, en el proyecto, abra el menú contextual del archivo de recursos y, después, elija Propiedades.

    Aparece el cuadro de diálogo Página de propiedades del recurso.

  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.

  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. Por ejemplo, para generar los mapas MIP para un recurso de textura en tiempo de compilación, establezca la propiedad Generar Mips en .

  4. Elija el botón Aceptar.

Configuración de canalización de contenido de imágenes

Al usar la herramienta de canalización de contenido de imágenes para crear un recurso de textura, puede comprimir la textura de varias maneras, indicar si los niveles de MIP se deben generar en tiempo de compilación y cambiar el nombre del archivo de salida.

Propiedad Descripción
Compress Especifica el tipo de compresión que se usa para el archivo de salida.

Las opciones disponibles son:

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

Para obtener información sobre qué formatos de compresión se admiten en diferentes versiones de DirectX, consulte Guía de programación para DXGI.
Convertir a formato alfa premultiplicado para convertir la imagen al formato alfa premultiplicado en el archivo de salida, de lo contrario, No. Solo se cambia el archivo de salida, la imagen de origen no cambia.
Generar MIP para generar una cadena de MIP completa en tiempo de compilación e incluirla en el archivo de salida; de lo contrario, No. Si No, y el archivo de origen ya contiene una cadena de mapas mip, el archivo de salida tendrá una cadena MIP; de lo contrario, el archivo de salida no tendrá ninguna cadena MIP.
Salida de contenido Especifica el nombre del archivo de salida. Importante: Cambiar la extensión de nombre de archivo del archivo de salida no tiene ningún efecto en su formato de archivo.

Configuración de la canalización de contenido de mallas

Al usar la herramienta de canalización de contenido de malla para crear un recurso de malla, puede cambiar el nombre del archivo de salida.

Propiedad Descripción
Salida de contenido Especifica el nombre del archivo de salida. Importante: Cambiar la extensión de nombre de archivo del archivo de salida no tiene ningún efecto en su formato de archivo.

Configuración de canalización de contenido del sombreador

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.

Propiedad Descripción
Salida de contenido Especifica el nombre del archivo de salida. Importante: Cambiar la extensión de nombre de archivo del archivo de salida no tiene ningún efecto en su formato de archivo.

Carga y uso de recursos 3D en tiempo de ejecución

Uso de texturas e imágenes

Direct3D proporciona funciones para crear recursos de textura. En Direct3D 11, la biblioteca de utilidades D3DX11 proporciona funciones adicionales para crear recursos de textura y vistas de recursos directamente desde archivos de imagen. Para obtener más información sobre cómo crear un recurso de textura en Direct3D 11, consulte Textures. Para obtener más información sobre cómo usar la biblioteca D3DX11 para crear un recurso de textura o una vista de recursos a partir de un archivo de imagen, vea How to: Initialize a texture from a file.

Uso de modelos 3D

Direct3D 11 no proporciona funciones para crear recursos a partir de modelos 3D. En su lugar, tiene que escribir código que lea el archivo de modelo 3D y cree búferes de vértices e índices que representen el modelo 3D y los recursos que el modelo requiere, por ejemplo, texturas o sombreadores.

Usar sombreadores

Direct3D proporciona funciones para crear recursos de sombreador y enlazarlos a la canalización de gráficos programables. Para obtener más información sobre cómo crear un recurso de sombreador en Direct3D y enlazarlo a la canalización, consulte Guía de programación para HLSL.

En la canalización de gráficos programables, cada fase de la canalización debe proporcionar a la siguiente fase de la canalización un resultado con formato que pueda entender. Dado que el Diseñador de sombras solo puede crear sombreadores de píxeles, esto significa que depende de la aplicación asegurarse de que los datos que recibe están en el formato que espera. Varias etapas de sombreadores programables ocurren antes del sombreador de píxeles y realizan transformaciones geométricas: el sombreador de vértices, el sombreador de 'hull', el sombreador de dominio y el sombreador de geometría. La fase de teselación no programable también se produce antes del sombreador de píxeles. Independientemente de cuál de estas fases precede directamente al sombreador de píxeles, debe dar su resultado en este formato:

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, es posible que también tenga que proporcionar datos adicionales en el formato según estas definiciones:

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;
};
Título Descripción
Cómo exportar una textura que contiene mipmaps Describe cómo usar la canalización de contenido de imágenes para exportar una textura que contiene mapas mip precalculados.
Cómo: exportar una textura que tiene valores alfa previamente multiplicados Describe cómo usar la canalización de contenido de imágenes para exportar una textura que contiene valores alfa premultipados.
Cómo: Exportar una textura para su uso con aplicaciones Direct2D o JavaScript Describe cómo usar la canalización de contenido de imágenes para exportar una textura que se puede usar en una aplicación Direct2D o JavaScript.
Trabajar con recursos 3D para juegos y aplicaciones Describe las herramientas de edición que Visual Studio proporciona para crear y manipular recursos 3D, que incluyen texturas e imágenes, modelos 3D y sombreadores.
Cómo: exportar un sombreador Describe cómo exportar un sombreador desde el Diseñador de sombras.