GGym's Practice Notes

DirectX 12을 시작하기 전에 알아야 할 기본 지식 본문

DirectX

DirectX 12을 시작하기 전에 알아야 할 기본 지식

GGym_ 2022. 12. 24. 05:47

1. 텍스처 형식

데이터 형식 용어
RGBA ( 성분 비트, 개수 ) : Red/Green/Blue/Alpha
U/S ( 부호 있는, unsigned /부호 있는, signed)
NORM/FLOAT/INT ( 정규화정수/부동소수점/정수)
TYPELESS ( 무형식 )

예시

DXGI_FORMAT_ 
		R32G32B32_FLOAT : 32비트 부동 소수점 성분 3개
		R16G16B16A16_UNORM : [0, 1] 구간으로 사상되는 16비트 성분 4개
		R32G32_UINT : 부호 없는 32비트 정수 성분 2개
		R8G8B8A8_UNORM : [0, 1] 구간으로 사상되는 8비트 성분 4개
		R8G8B8A8_SNORM : [-1, 1] 구간으로 사상되는 8비트 성분 4개
		R8G8B8A8_UINT : 부호 있는 정수형 8비트 성분 4개 [-128, 127]
		R8G8B8A8_SINT : 부호 없는 정수형 8비트 성분 4개 [0, 255]

 

2. Swap chain(교환 사슬)과 페이지 전환

하나의 버퍼만 가지고 텍스처를 그리면 플리커링과 티어링이 발생
두개의 버퍼를 통해 하나의 화면을 미리 그리고 전환하는 것이 Double Buffering (* 3개의 버퍼를 사용하면 Triple Buffering)
Front buffer와 Back buffer 전환하는 것을 통해 형성하는 것이 Swap Chain

DirectX3D 에서 사용하는 SwapChain Interface : IDXGISwapChain

 

3. Depth buffering (깊이 버퍼링)

화면에 보이는 물체가 가려지고 앞에 보이는 처리를 하기 위해 만들어지는 버퍼
각 픽셀의 깊이 버퍼를 만드는 텍스처를 만들고 각 픽셀당 [0.0, 1.0] 사이의 값으로 정보를 저장한다.
이를 Depth buffer 또는 z-Buffer 이라고 부름

위에 서술 해놓은 텍스처 형식을 지정해서 사용.

예시

DXGI_FORMAT_ 
		D32_FLOAT_S8X24_UINT : 32비트 깊이, 8비트 정수 스텐실, 24비트 padding용 값으로 구성

Stencil buffer는 해당 깊이 값에서 다시 값을 부여하는것 ( 특정 픽셀 렌더링 안되게 되는 용도 )

 

4. 자원과 서술자

서술자는 자원을 어떠한 파이프라인에 Bind 해야하는 알려주는 수단
서술자는 이전 버전까지 View라고 불렸었음.

아래와 같은 서술자들을 사용

1) CBV/SRV/UAV : Constant Buffer (상수 버퍼) / Shader Resource (쉐이더 자원) / Unordered Accesss (순서 없는 조건) View를 서술
2) Sampler Descriptor : 텍스처 적용에 사용되는 자원 서술
3) RTV : Render Target 자원 서술
4) DSV : Depth Stencil 자원 서술

Descriptor Heap(서술자 힙) : Application이 사용하는 서술자들이 저장되는 곳. 각 서술자 마다 개별적인 서술자 힙 필요
서술자들은 Application 초기화 시점에서 생성해야 함

 

5. MultiSampling (다중 표본화)

aliasing : 계단 현상 <-> antialiasing : 안티 앨리어싱
다중 표본화는 안티 앨리어싱을 하기 위해 DirectX에서 지원하는 기법.

다중 표본화를 위해 DXGI_SAMPLE_DESC 구조체를 작성

DXGI_SAMPLE_DESC 구조체

typedef struct DXGI\_SAMPLE\_DESC{  
    UINT Count;     // 픽셀당 추출할 표본의 개수  
    UINT Quality;     // 원하는 품질 수준  
} DXGI\_SAMPLE\_DESC;

ID3D12Device::CheckFeatureSupport 를 사용하면 주어진 텍스처 형식과 표본 개수에 대한 품질 수준들의 개수를 알 수 있음
아래 후술.

 

6. Feature level (기능 수준)

DirectX3D 11에서 도입
D3D_FEATURE_LEVEL 열거형으로 대표
사용자의 하드웨어가 특정 기능 수준을 지원하지 않는 경우 실행이 안되지만 더 낮은 기능 수준으로 낮추면 사용 가능

 

7. DXGI (DirectX Graphics Infrastructure)

여러 그래픽 API들에 공통인 그래픽 관련 작업이 존재 ex) SwapChain, Adapter, Display Mode, etc...
IDXGISwapChain ( 교환 사슬 )
IDXGIFactory ( SwapChain 인터페이스 생성과 디스플레이 어댑터 열거 )
IDXGIAdapter ( 디스플레이 어댑터 )
IDXGIOutput ( 디스플레이 출력)

DXGI_MODE_DESC ( 디스플레이 모드를 서술)

참고자료
링크 (Microsoft Learn DXGI 문서)

 

8. Check Feature Support (기능 지원 점검)

ID3D12Device::CheckFeatureSupport 메서드를 사용하여 지원 여부 점검 가능.

HRESULT ID3D12Device::CheckFeatureSupport(  
    D3D12\_FEATURE Feature,  
    void\* pFeatureSupportData,  
    UINT FeatureSupportDataSize
);

1) Feature : 지원 여부를 점검할 기능들의 종류

D3D12_FEATURE_ 
			D3D12_OPTIONS : DirectX12 의 여러 기능
			ARCHITECTURE : 하드웨어 아키텍쳐 기능들
			FEATURE_LEVELS : 기능 수준들
			FORMAT_SUPPORT : 주어진 텍스쳐 형식에 대한 기능들
			MULTISAMPLE_QUALITY_LEVELS : Multisampling 기능

2) pFeatureSupportData : 기능 지원 정보가 설정될 구조체. 점검할 기능을 지정한 대상에 따라 다른 구조체를 파라미터로 줘야 한다.

D3D12_FEATURE_DATA_
			D3D12_OPTIONS
			ARCHITECTURE
			FEATURE_LEVELS
			FORMAT_SUPPORT
			MULTISAMPLE_QUALITY_LEVELS

3) FeatureSupportDataSize : pFeatureSupportData로 전달한 구조체의 크기

 

9. Residency (상주성)

DirectX12에서 Application은 자원을 GPU 메모리에서 내리거나 올리면서 자원의 Residency를 관리한다.

자세한 내용은 참고자료에서
링크 (Microsoft Learn 상주 문서)

'DirectX' 카테고리의 다른 글

DirectX 초기화 / 삼각형 그리기  (0) 2020.08.13
DirectX 쓰기 전 WinAPI 준비  (0) 2020.08.12
DirectX Setup / stdafx.h 구성하기  (0) 2020.08.12