게임 또는 응용 프로그램에 3차원 자산 사용Using 3-D Assets in Your Game or App

이 문서에서는 Visual StudioVisual Studio에서 3-D 자산을 처리하여 빌드에 포함하는 방법에 대해 설명합니다.This article describes how you can use Visual StudioVisual Studio to process 3-D assets and include them in your builds.

Visual StudioVisual Studio에서 도구를 사용하여 3-D 자산을 만들면 그 다음 단계는 만든 자산을 앱에서 사용하는 것입니다.After you use the tools in Visual StudioVisual Studio to create 3-D assets, the next step is to use them in your app. 자산을 사용하려면 DirectX가 인식할 수 있는 형식으로 변환해야 합니다.But before you can use them, your assets have to be transformed into a format that DirectX can understand. 자산 변환을 지원하기 위해 Visual StudioVisual Studio에서는 생성할 수 있는 각 종류의 자산에 대해 빌드 사용자 지정을 제공합니다.To help you transform your assets, Visual StudioVisual Studio provides build customizations for each kind of asset that it can produce. 빌드에 자산을 포함하려면 빌드 사용자 지정을 사용하도록 프로젝트를 구성하고 프로젝트에 자산을 추가하며 올바른 빌드 사용자 지정을 사용하도록 자산을 구성하기만 하면 됩니다.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. 그런 다음 앱으로 자산을 로드한 후 다른 모든 DirectX 앱에서 하는 것처럼 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.

프로젝트 구성Configuring your project

3-D 자산을 빌드의 일부로 배포하려면 Visual StudioVisual Studio에서 사용자가 배포하려는 자산의 종류를 알아야 합니다.Before you can deploy your 3-D assets as part of your build, Visual StudioVisual Studio has to know about the kinds of assets that you want to deploy. Visual StudioVisual Studio에서는 이미 여러 일반 파일 형식을 알고 있지만 특정 종류의 앱에서만 3-D 자산을 사용하므로 Visual StudioVisual Studio에서는 프로젝트가 이러한 종류의 파일을 빌드할 것이라고 가정하지 않습니다. already knows about many common file types, but because only certain kinds of apps use 3-D assets, Visual StudioVisual Studio doesn't assume that a project will build these kinds of files. 각 자산 형식에 대해 제공되는 빌드 사용자 지정(Visual StudioVisual Studio에 여러 형식의 파일을 유용한 방식으로 처리하는 방법을 알려주는 파일)을 사용하여 사용자 앱에서 이러한 종류의 자산을 사용한다고 Visual StudioVisual Studio에 알릴 수 있습니다.You can tell Visual StudioVisual Studio that your app uses these kinds of assets by using the build customizations—files that tell Visual StudioVisual Studio how to process different types of files in a useful way—that are provided for each asset type. 이러한 사용자 지정은 프로젝트 단위로 적용되므로 프로젝트에 적절한 사용자 지정을 추가하기만 하면 됩니다.Because these customizations are applied on a per-project basis, all you have to do is add the appropriate customizations to your project.

프로젝트에 빌드 사용자 지정을 추가하려면To add the build customizations to your project

  1. 솔루션 탐색기에서 프로젝트에 대한 바로 가기 메뉴를 열고 빌드 종속성, 빌드 사용자 지정을 차례로 선택합니다.In Solution Explorer, open the shortcut menu for the project, and then choose Build Dependencies, Build Customizations. Visual C++ 빌드 사용자 지정 파일 대화 상자가 표시됩니다.The Visual C++ Build Customizations Files dialog box is displayed.

  2. 사용 가능한 빌드 사용자 지정 파일에서 다음 테이블에서 설명한 대로 프로젝트에서 사용하려는 자산 형식에 해당하는 확인란을 선택합니다.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:

    자산 형식Asset type 빌드 사용자 지정 이름Build customization Name
    질감 및 이미지Textures and images ImageContentTask(.targets, .props)ImageContentTask(.targets, .props)
    3-D 모델3-D Models MeshContentTask(.targets, .props)MeshContentTask(.targets, .props)
    셰이더Shaders ShaderGraphContentTask(.targets, .props)ShaderGraphContentTask(.targets, .props)
  3. 확인 단추를 선택합니다.Choose the OK button.

빌드에 자산 포함Including assets in your build

이제 프로젝트에서는 사용자가 사용하려는 여러 종류의 3-D 자산에 대해 알고 있으므로 그 다음으로는 어떤 파일이 3-D 파일이고 이러한 파일이 어떤 종류의 자산인지 프로젝트에 알립니다.Now that your project knows about the different kinds of 3-D assets that you want to use, the next step is to tell it which files are 3-D assets, and which kinds of assets they are.

빌드에 자산을 추가하려면To add an asset to your build

  1. 솔루션 탐색기의 프로젝트에서 자산의 바로 가기 메뉴를 연 다음 속성을 선택합니다.In Solution Explorer, in your project, open the shortcut menu of an asset, and then choose Properties. 자산의 속성 페이지 대화 상자가 표시됩니다.The asset's Property Page dialog box is displayed.

  2. 구성플랫폼 속성이 변경 내용을 적용하려는 값으로 설정되어 있는지 확인합니다.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. 구성 속성 아래에서 일반을 선택한 다음, 속성 표의 일반 아래에서 항목 형식 속성을 적절한 현재 파이프라인 항목 형식으로 설정합니다.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. 예를 들어 이미지 또는 질감 파일의 경우 이미지 콘텐츠 파이프라인을 선택합니다.For example, for an image or texture file, choose Image Content Pipeline.

    중요

    기본적으로 Visual StudioVisual Studio에서는 Visual StudioVisual Studio에 기본 제공되는 이미지 항목 형식을 사용하여 여러 종류의 이미지 파일을 분류한다고 가정합니다.By default, Visual StudioVisual Studio assumes that many kinds of image files should be categorized by using the Image item type that's built into Visual StudioVisual Studio. 따라서 이미지 콘텐츠 파이프라인에서 처리하려는 각 이미지의 항목 형식 속성을 변경해야 합니다.Therefore, you have to change the Item Type property of each image that you want to be processed by the image content pipeline. 3차원 모델과 시각적 셰이더 그래픽에 대한 다른 형식의 콘텐츠 파이프라인 원본 파일은 기본적으로 올바른 항목 형식으로 설정됩니다.Other types of content pipeline source files for 3-D models and visual shader graphics default to the correct Item Type.

  4. 확인 단추를 선택합니다.Choose the OK button.

    다음은 3가지 콘텐츠 파이프라인 항목 형식, 관련 소스 및 출력 파일 형식입니다.Here are the three content pipeline item types and their associated source and output file types.

항목 형식Item Type 원본 파일 형식Source file types 출력 파일 형식Output file format
이미지 콘텐츠 파이프라인Image Content Pipeline Portable Network Graphics(.png)Portable Network Graphics (.png)

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

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

Graphics Interchange Format(.gif)Graphics Interchange Format (.gif)

Bitmap(.bmp, .dib)Bitmap (.bmp, .dib)

Tagged Image File Format(.tif, .tiff)Tagged Image File Format (.tif, .tiff)

Targa(.tga)Targa (.tga)
DirectDraw Surface(.dds)DirectDraw Surface (.dds)
메시 콘텐츠 파이프라인Mesh Content Pipeline AutoDesk FBX 교환 파일(.fbx)AutoDesk FBX Interchange File (.fbx)

Collada DAE 파일(.dae)Collada DAE File (.dae)

Wavefront OBJ 파일(.obj)Wavefront OBJ File (.obj)
3-D 메시 파일(.cmo)3-D mesh file (.cmo)
셰이더 콘텐츠 파이프라인Shader Content Pipeline 시각적 셰이더 그래프(.dgsl)Visual Shader Graph (.dgsl) 컴파일된 셰이더 출력(.cso)Compiled Shader Output (.cso)

자산 콘텐츠 파이프라인 속성 구성Configuring asset content pipeline properties

특정 방식으로 빌드할 수 있도록 각 자산 파일의 콘텐츠 파이프라인 속성을 설정할 수 있습니다.You can set the content pipeline properties of each asset file so that it will be built in a specific way.

콘텐츠 파이프라인 속성을 구성하려면To configure content pipeline properties

  1. 솔루션 탐색기의 프로젝트에서 자산 파일의 바로 가기 메뉴를 연 다음 속성을 선택합니다.In Solution Explorer, in your project, open the shortcut menu for the asset file, and then choose Properties. 자산의 속성 페이지 대화 상자가 표시됩니다.The asset's Property Page dialog box is displayed.

  2. 구성플랫폼 속성이 변경 내용을 적용하려는 값으로 설정되어 있는지 확인합니다.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. 구성 속성 아래에서 콘텐츠 파이프라인 노드(예: 질감 및 이미지 자산에 대한 이미지 콘텐츠 파이프라인)를 선택한 다음, 속성 표에서 속성을 적절한 값으로 설정합니다.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. 예를 들어 빌드 시간에 질감 자산에 대한 MIP 맵을 생성하려면 MIP 생성 속성을 로 설정합니다.For example, to generate mipmaps for a texture asset at build time, set the Generate Mips property to Yes.

  4. 확인 단추를 선택합니다.Choose the OK button.

이미지 콘텐츠 파이프라인 구성Image content pipeline configuration

이미지 콘텐츠 파이프라인 도구를 사용하여 질감 자산을 빌드하는 경우 다양한 방법으로 질감을 압축하고 빌드 시 MIP 수준을 생성해야 할지 여부를 나타내고 출력 파일의 이름을 변경할 수 있습니다.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.

속성Property 설명Description
압축Compress 출력 파일에 사용할 압축 형식을 지정합니다.Specifies the compression type that's used for the output file.

사용 가능한 옵션은 다음과 같습니다.The available options are:

- 압축 안 함- No Compression
- BC1_UNORM 압축- BC1_UNORM compression
- BC1_UNORM_SRGB 압축- BC1_UNORM_SRGB compression
- BC2_UNORM 압축- BC2_UNORM compression
- BC2_UNORM_SRGB 압축- BC2_UNORM_SRGB compression
- BC3_UNORM 압축- BC3_UNORM compression
- BC3_UNORM_SRGB 압축- BC3_UNORM_SRGB compression
- BC4_UNORM 압축- BC4_UNORM compression
- BC4_SNORM 압축- BC4_SNORM compression
- BC5_UNORM 압축- BC5_UNORM compression
- BC5_SNORM 압축- BC5_SNORM compression
- BC6H_UF16 압축- BC6H_UF16 compression
- BC6H_SF16 압축- BC6H_SF16 compression
- BC7_UNORM 압축- BC7_UNORM compression
- BC7_UNORM_SRGB 압축- BC7_UNORM_SRGB compression

다른 버전의 DirectX에서 지원되는 압축 형식에 대한 자세한 내용은 DXGI 프로그래밍 가이드를 참조하세요.For information about which compression formats are supported in different versions of DirectX, see Programming Guide for DXGI.
미리 곱한 알파 형식으로 변환Convert to pre-multiplied alpha format 이미지를 출력 파일에서 미리 곱한 알파 형식으로 변환하려면 를 선택하고, 그렇지 않으면 아니요를 선택합니다.Yes to convert the image to pre-multiplied alpha format in the output file; otherwise, No. 출력 파일만 변경되고 원본 이미지는 그대로 남습니다.Only the output file is changed, the source image is unchanged.
MIP 생성Generate Mips 빌드 시간에 전체 MIP 체인을 생성한 다음 출력 파일에 포함하려면 를 선택하고, 그렇지 않으면 아니요를 선택합니다.Yes to generate a full MIP chain at build time and include it in the output file; otherwise, No. 아니요이고 이미 원본 파일에 MIP 맵 체인이 포함되어 있는 경우 출력 파일에 MIP 체인이 있게 됩니다. 그렇지 않으면 출력 파일에 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.
콘텐츠 출력Content Output 출력 파일의 이름을 지정합니다.Specifies the name of the output file. 중요: 출력 파일의 확장명을 변경하더라도 파일 형식에는 아무런 영향을 주지 않습니다.Important: Changing the file name extension of the output file has no effect on its file format.

메시 콘텐츠 파이프라인 구성Mesh content pipeline configuration

메시 콘텐츠 파이프라인 도구를 사용하여 메시 자산을 빌드하는 경우 출력 파일의 이름을 변경할 수 있습니다.When you use the mesh content pipeline tool to build a mesh asset, you can change the name of the output file.

속성Property 설명Description
콘텐츠 출력Content Output 출력 파일의 이름을 지정합니다.Specifies the name of the output file. 중요: 출력 파일의 확장명을 변경하더라도 파일 형식에는 아무런 영향을 주지 않습니다.Important: Changing the file name extension of the output file has no effect on its file format.

셰이더 콘텐츠 파이프라인 구성Shader content pipeline configuration

셰이더 콘텐츠 파이프라인 도구를 사용하여 셰이더 자산을 빌드하는 경우 출력 파일의 이름을 변경할 수 있습니다.When you use the shader content pipeline tool to build a shader asset, you can change the name of the output file.

속성Property 설명Description
콘텐츠 출력Content Output 출력 파일의 이름을 지정합니다.Specifies the name of the output file. 중요: 출력 파일의 확장명을 변경하더라도 파일 형식에는 아무런 영향을 주지 않습니다.Important: Changing the file name extension of the output file has no effect on its file format.

런타임에 3-D 자산 로드 후 사용Loading and using 3-D assets at run time

질감 및 이미지 사용Using textures and images

Direct3D에서는 질감 리소스를 만들기 위한 기능을 제공합니다.Direct3D provides functions for creating texture resources. Direct3D 11에서 D3DX11 유틸리티 라이브러리는 이미지 파일에서 직접 질감 리소스 및 리소스 뷰를 만들 수 있는 추가 기능을 제공합니다.In Direct3D 11, the D3DX11 utility library provides additional functions for creating texture resources and resource views directly from image files. Direct3D 11에서 질감 리소스를 만드는 방법에 대한 자세한 내용은 질감을 참조하세요.For more information about how to create a texture resource in Direct3D 11, see Textures. D3DX11 라이브러리를 사용하여 이미지 파일에서 질감 리소스 또는 리소스 뷰를 만드는 방법에 대한 자세한 내용은 방법: 파일에서 질감 초기화를 참조하세요.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.

3-D 모델 사용Using 3-D models

Direct3D 11은 3-D 모델에서 리소스를 만드는 기능을 제공하지 않습니다.Direct3D 11 does not provide functions for creating resources from 3-D models. 대신 3-D 모델 파일을 읽고 모델에 필요한 3-D 모델 및 모든 리소스(예: 질감 또는 셰이더)를 나타내는 꼭짓점 및 인덱스 버퍼를 만드는 코드를 작성해야 합니다.Instead, you have to write code that reads the 3-D model file and creates vertex and index buffers that represent the 3-D model and any resources that the model requires—for example, textures or shaders.

셰이더 사용Using shaders

Direct3D에서는 셰이더 리소스를 만들어 프로그래밍 가능한 그래픽 파이프라인으로 바인딩하기 위한 기능을 제공합니다.Direct3D provides functions for creating shader resources and binding them to the programmable graphics pipeline. Direct3D에서 셰이더 리소스를 만들고 파이프라인에 바인딩하는 방법에 대한 자세한 내용은 HLSL 프로그래밍 가이드를 참조하세요.For more information about how to create a shader resource in Direct3D and bind it to the pipeline, see Programming Guide for HLSL.

프로그래밍 가능한 그래픽 파이프라인에서 파이프라인의 각 단계는 파이프라인에서 인식할 수 있는 방식으로 형식이 지정된 결과를 파이프라인의 다음 단계에 지정해야 합니다.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. 셰이더 디자이너는 픽셀 셰이더만 만들 수 있으므로 셰이더 디자이너에서 수신한 데이터가 예상한 형식인지는 앱에서 확인해야 합니다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. 프로그래밍 가능한 여러 셰이더 단계(예: 꼭짓점 셰이더, 헐 셰이더, 도메인 셰이더 및 기하 셰이더)는 픽셀 셰이더 이전에 실행되고 기하학적 변환을 수행합니다.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. 프로그래밍할 수 없는 공간 분할(tessellation) 단계 또한 픽셀 셰이더 이전에 실행됩니다.The non-programmable tessellation stage also occurs before the pixel shader. 이러한 단계 중 어떤 단계가 픽셀 셰이더 바로 이전에 오는지와 상관없이 다음과 같은 형식으로 결과를 제공해야 합니다.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;  
};  

셰이더에서 사용하는 셰이더 디자이너 노드에 따라 다음 정의에 따른 형식으로 추가 데이터를 제공해야 합니다.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;  
};  
제목Title 설명Description
방법: 밉 맵을 포함하는 질감 내보내기How to: Export a Texture that Contains Mipmaps 이미지 콘텐츠 파이프라인을 사용하여 미리 계산된 Mip 맵이 포함된 질감을 내보내는 방법에 대해 설명합니다.Describes how to use the Image Content Pipeline to export a texture that contains precomputed mipmaps.
방법: 미리 증가된 알파를 사용하는 질감 내보내기How to: Export a Texture that has Premultiplied Alpha 이미지 콘텐츠 파이프라인을 사용하여 사전 곱셈된 알파 값이 포함된 질감을 내보내는 방법에 대해 설명합니다.Describes how to use the Image Content Pipeline to export a texture that contains premultiplied alpha values.
방법: Direct2D 또는 Javascript 앱과 함께 사용하기 위해 질감 내보내기How to: Export a Texture for Use with Direct2D or Javascipt Apps 이미지 콘텐츠 파이프라인을 사용하여 Direct2D 또는 JavaScript 앱에서 사용할 수 있는 질감을 내보내는 방법에 대해 설명합니다.Describes how to use the Image Content Pipeline to export a texture that can be used in a Direct2D or JavaScript app.
게임 및 응용 프로그램을 위한 3D 자산 작업Working with 3-D Assets for Games and Apps Visual Studio에서는 질감 및 이미지, 3-D 모델 및 셰이더를 비롯한 3-D 자산을 만들고 조작하는 편집 도구에 대해 설명합니다.Describes the editing tools that Visual Studio provides for creating and manipulating 3-D assets, which include textures and images, 3-D models, and shaders.
방법: 셰이더 내보내기How to: Export a Shader 셰이더 디자이너에서 셰이더를 내보내는 방법을 설명합니다.Describes how to export a shader from the Shader Designer.