| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 바이토닉 수열
- 백준 24444 c++
- 11286번
- 그리기 연산
- dx12 정리
- 백준
- Perforce
- 2565번
- lis응용
- directx12 그리기 연산2
- 랜더링 파이프라인
- 2d 박스충돌
- 드래곤플라이트 모작
- DirectX12
- dx12
- 24779
- 뱀과사다리게임
- 다음소수
- BFS
- 애니메이션
- 백준 1260 c++
- unrealengine
- 백준 c++ 24479번
- Unreal
- WinAPI
- 2075번
- 다익스트라
- C++
- 4134번
- 루트서명
- Today
- Total
game-1 님의 블로그
[DirectX12] Direct3D초기화 (1-1) 본문
Dx12에 대해서는 "DirectX12를 이용한 3D 게임 프로그래밍 입문"책으로 학습할 것이다.
그 중 chapter4에서는 표면, 픽셀 형식, 페이지 전환, 깊이 버퍼링, 다중표본화 ,성능 카운터로 시간을 측정하는 법과
그 시간을 이용해서 초당 렌더링된 프레임 수를 계산하는 방법 등에 대해서 알아 볼 것이다.
DirectX12 -Study1
목표
1. 3차원 그래픽 하드웨어의 프로그래밍에서 Direct3D의 역할을 개괄적으로 이해
2. Direct3D에서 COM의 역할
3. 2차원 이미지의 저장 방식, 페이지 전환, 깊이 버퍼링, 다중표본화 같은 기초 그래픽 개념들 학습
4. 성능 카운터 함수들을 이용해서 고해상도 타이머 값을 얻는 방법
5. Direct3D를 초기화하는 방법 파악
6. 이 책의 모든 예제 프로그램이 사용하는 응용 프로그램 프레임워크의 전반적인 구조 숙지
DX12 차이점
DX12가 이전 버전에 비해 바뀐 개선점은 cpu부담을 크게 줄이고,
다중 스레드 지원을 개선하기 위해 설계를 다시했다는 점이다.
그렇기 때문에 12버전은 11버전에 비해 더 저수준 그래픽api가 되었다.
1. COM
com은 component Object Model의 약자로 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다.
COM의 세부사항 대부분은 프로그래머에게 드러나지 않는다.
new키워드로 직접 생성할 일과 delete로 삭제할 필요가 없다.
인터페이스의 release 메서드를 호출해 주어야 한다.
COM객체는 참조횟수가 0이되면 메모리에서 해제된다.
WRL -> windows Runtime Library
Comptr이라는 클래스를 제공한다. (COM객체를 위한 똑똑한 포인터라할 수 있다)
범위를 벗어난 Comptr 인스턴스는 바탕 COM 객체에 대해 자동으로 Release를 호출한다.
1. Get -> 바탕 COM 인터페이스를 가리키는 포인터를 돌려준다.
2.GetAddresssOf -> 바탕 COM 인터페이스를 가리키는 포인터의 주소를 돌려준다.
3. Reset :Comptr인스턴스를 nullptr로 설정하고 바탕 COM 인터페이스의 참조횟루를 1감소한다.
2.텍스처 형식
N차원 텍스처는 자료 원소들의 N차원 배열에 해당한다.
형식 : DXGI_FORMAT이라는 열거형으로 지정한다.
1.DXGI_FORMAT_R32G32B32_FLOAT
2.DXGI_FORMAT_R16G16B16A16_UNORM
3.DXGI_FORMAT_R32G32_UINT
4.DXGI_FORMAT_R8G8B8A8_UNORM
5. DXGI_FORMAT_R8G8B8A8_SNORM
6. DXGI_FORMAT_R8G8B8A8_SINT
7. DXGI_FORMAT_R8G8B8A8_UNIT
무형식 텍스처:
메모리만 확보해 두고 자료의 구체적인 해석 방식은 나중에 텍스처를 파이프라인에 묶을 때 지정하는 용도로 쓴다.
3.교환사슬과 페이지 전환
이중 버퍼링
전면 버퍼가 화면에 표시된 동안 애니메이션의 다음 프레임을 후면 버퍼에 그리고,
다 그려지면 전면 버퍼와 후면 버퍼의 역할을 맞 바꾼다.
후면, 전면 버퍼의 역할을 교환해서 페이지가 전환되게 하는 것을 DX에서 제시라고 부른다.
버퍼들의 내용 자체를 맞바꾸는 것이 아니라 전면 버퍼로의 포인터와 현재 후면 버퍼로의 포인터만 맞바꾸면 된다.
전면 버퍼와 후면 버퍼는 하나의 교환 사슬을 형성한다.
Direct3D에서 교환 사슬을 대표하는 인터페이스는 IDXGISwapChain이다.
IDXGISwapChain::ResizeBuffers -> 버퍼 크기변경
IDXGISwapChain::Present -> 버퍼제시를 위한 메서드
이중 버퍼링: 두 개의 버퍼를 사용하는 방법
4.깊이 버퍼링
깊이 버퍼링은 이미지 자료를 담지 않는 텍스처의 예이다.
깊이 버퍼는 각 픽셀의 깊이(0~1) 정보를 담는다.
DX에서는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다.
렌더링되는 각 픽셀의 깊이 값을 계산해서 깊이 판정을 수행함으로서 작동된다.
1.후면 버퍼의 특정 픽셀 위치에 기록될 픽셀들의 깊이들을 비교한다.
2.깊이 값을 비교했을 때 관찰자에게 가장 가까운 픽셀이 승자가 되어서 후면 버퍼에 기록된다.
깊이 버퍼는 하나의 텍스처이므로, 생성 시 특정한 자료 원소 형식을 지정할 필요가 있다.
1.DXGI_FORMAT_D32_FLOAT_S8X24_UINT
2. DXGI_FORMAT_D32_FLOAT
3. DXGI_FORMAT_D24_UNORM_S8_UINT
4. DXGI_FORMAT_D16_UNORM

5.자원과 서술자
자원은 GPU에서 사용할 수 있는 모든 데이터(텍스처, 버퍼등)을 의미한다.
ID3D12Resource 인터페이스를 통해 관리된다.
-버퍼 : 정점 데이터, 인덱스 데이터
-텍스처 :2D/3D 이미지 데이터 저장
-상수 버퍼: 쉐이더에서 사용할 메트릭스, 값 등을 저장
서술자는 자원을 GPU에서 어떻게 접근할지를 정의하는 메타데이터이다.
Descriptor Heap을 사용하여 서술자를 저장한다.
6. 다중표본화 이론
다중 표본화는 MSAA기법을 사용하여 렌더링 시 계단 현상을 줄이는 방법이다.
MSAA(Multisampling antialiasing)
DXGI_SAMPLE_DESC 구조체를 사용하여 MSAA를 설정할 수 있다.

Count 멤버: 픽셀당 추출할 표본의 개수
Quality 멤버 : 원하는 품질 수준을 지정한다.
표본 개수와 품질이 높아질수록 비용이 많이 발생하니까 유의해야한다.
7. 기능 수준 Feature Level
DX는 하드웨어의 기능을 확인하기 위해 Feature Level 개념을 사용한다.
D3D_FEATURE_LEVEL_12_2 :최신 DX12 기능 지원
-사용예시-

8.DXGI(DirectX Graphics Infrastructure)
DirectX의 저수준 그래픽 API로, 화면 출력 및 GPU 자원관리를담당한다.
역할)
1. 스왑체인 관리 : 더블 버퍼링을 통한 부드러운 렌더링
2. 디스플레이 정보 조회 : 해상도, 주사율 확인
3. GPU 간 자원 공유: 여러 GPU 간 리소스 공유 가능
9. 기능지원 점검( CheckFeatureSupport)
DX12에서 특정 기능이 지원되는지 확인하려면 CheckFeatureSupport API를 사용한다.

10. 상주성(Residency)
상주성은 GPU 메모리 관리 기법으로, 필요할 때만 리소스를 메모리에 올리는 방식이다.
상주성 관리 API: MakeResident, Evict
'DirectX' 카테고리의 다른 글
| [DirectX12] 렌더링 파이프 라인 1-3 (테셀레이션 단계) (0) | 2025.03.15 |
|---|---|
| DX12 문제 내기 (0) | 2025.03.14 |
| [DirectX12] 렌더링 파이프 라인 1-2 (정점 셰이더 단계) (0) | 2025.03.14 |
| [DirectX12] 렌더링 파이프라인 1-1 (0) | 2025.03.11 |
| [DirectX12] CPU와 GPU의 상호작용 , Direct3D초기화 (1-2) (0) | 2025.03.03 |