MOONSUN
[D3D] Direct3D 11 렌더링 파이프라인 주요 객체 본문
Direct3D를 활용한 그래픽스 프로그래밍에서는 Device, DeviceContext, SwapChain, RenderTargetView와 같은 다양한 인터페이스가 사용된다.
이런 인터페이스들은 단순히 개별적으로 존재하는 것이 아니라, 렌더링 파이프라인(Rendering Pipeline)이라는 체계적인 처리 과정 속에서 각 단계별로 특정 역할을 수행한다.
이 글에서는 Direct3D 11을 기준으로, 주요 인터페이스 객체의 기능을 정리해보고자 한다.
1. DXGI 관련 객체
Direct3D는 DXGI (DirectX Graphics Infrastructure)를 통해 GPU 및 디스플레이와 연결된다.
| 인터페이스 | 설명 |
| IDXGIFactory4 | DXGI 팩토리 객체. GPU 어댑터(그래픽 카드)와 출력 장치(모니터)를 열거하거나, 스왑체인을 생성하는 데 사용. “Direct3D 환경을 만드는 출발점” |
| IDXGIAdapter3 | GPU 어댑터 객체. GPU의 세부 정보(VRAM, 이름, 성능 등)에 접근 가능 |
2. D3D11 장치 및 파이프라인 객체
2-1. 장치(Device) 관련 객체
| 인터페이스 | 설명 |
| ID3D11Device | GPU와 연결되는 논리 장치. 버퍼, 텍스처, 셰이더, 상태 객체 등 모든 그래픽 리소스를 생성 |
| ID3D11DeviceContext | 생성된 리소스를 파이프라인에 바인딩하고 드로우콜 제출. Device가 만든 리소스를 실제로 사용 |
2-2. 출력(Output) 관련 객체
| 인터페이스 | 설명 |
| IDXGISwapChain1 | Back Buffer ↔ Front Buffer 관리, Present() 호출로 렌더링 결과 화면 출력 |
| ID3D11RenderTargetView | 최종 색상 출력 대상 (Back Buffer) |
| ID3D11DepthStencilView | 깊이/스텐실 테스트를 위한 버퍼 뷰. Depth Test와 Stencil Test 수행 |
2-3. 상태(State) 관련 객체
| 인터페이스 | 설명 |
| ID3D11RasterizerState | 컬링, 클리핑, 뷰포트/시저 설정 등 래스터화 제어 |
| ID3D11BlendState | 픽셀 출력 색상 블렌딩 방식 정의 (투명도, 알파, 합성) |
| ID3D11DepthStencilState | 깊이 및 스텐실 테스트 방식 정의 |
| ID3D11SamplerState | 텍스처 샘플링 방식 정의 (필터링, Address 모드, Mip Level) |
2-4. 파이프라인 단계별 객체
| 단계 | 인터페이스 | 설명 |
| 입력 조립기 (IA) | ID3D11InputLayout | 정점 데이터 형식 정의 |
| ID3D11Buffer (Vertex Buffer) | 정점 데이터 저장 | |
| ID3D11Buffer (Index Buffer) | 인덱스 데이터 저장 | |
| 정점 셰이더 (VS) | ID3D11VertexShader | 정점 좌표 변환, 스키닝, 기본 연산 수행 |
| ID3D11Buffer (Constant Buffer) | 상수 데이터 전달 (행렬, 라이트, 머티리얼 등) | |
| 픽셀 셰이더 (PS) | ID3D11PixelShader | 픽셀 색상 계산, 텍스처링, 라이팅 |
| ID3D11ShaderResourceView | 셰이더에서 접근 가능한 텍스처 | |
| 지오메트리 셰이더 (GS) | ID3D11GeometryShader | 프리미티브 확장, 점→삼각형 변환 등 |
| 테셀레이션 셰이더 | ID3D11HullShader / ID3D11DomainShader | 테셀레이션 패치 분할 및 좌표 계산 |
| 컴퓨트 셰이더 | ID3D11ComputeShader | GPU 일반 연산 처리, GPGPU 활용 |
2-5. 리소스(Resource) 관련 객체
| 인터페이스 | 설명 |
| ID3D11Texture2D | 2D 텍스처 저장. 렌더 타겟, 깊이/스텐실 버퍼, 셰이더 텍스처 등으로 사용 가능 |
| ID3D11UnorderedAccessView | 셰이더에서 임의 접근 가능, Compute Shader 등에서 사용 |
6. 정리
이번 글에서는 Direct3D 11에서 렌더링 파이프라인을 구성하는 주요 객체와 그 역할을 단계별·카테고리별로 정리해보았다.
1. DXGI 관련 객체
- Direct3D 환경과 GPU/디스플레이를 연결하는 출발점.
- IDXGIFactory4로 어댑터와 스왑체인을 생성하고, IDXGIAdapter3로 GPU 정보를 조회한다.
2. 장치 및 파이프라인 객체
- 장치(Device):
- ID3D11Device와 ID3D11DeviceContext는 GPU 리소스를 생성하고 실행하는 핵심 역할을 수행
- 출력(Output):
- IDXGISwapChain1, ID3D11RenderTargetView, ID3D11DepthStencilView는 화면에 그려지는 결과와 깊이/스텐실 테스트를 담당
- 상태(State):
- RasterizerState, BlendState, DepthStencilState, SamplerState는 렌더링 동작과 텍스처 샘플링 방식을 제어한다.
- 파이프라인 단계별 객체:
- 입력 조립기, 정점 셰이더, 픽셀 셰이더, 지오메트리 셰이더, 테셀레이션 셰이더, 컴퓨트 셰이더 등 각 단계에서 필요한 객체들이 실제 렌더링 연산을 수행
- 리소스(Resource):
- Texture2D, UnorderedAccessView 등은 셰이더에서 읽고 쓰는 데이터로 사용된다.
이번 글에서는 단순히 어떤 객체들이 있고, 어떤 역할이 있는지 간단하게 정리만 해보았고,
다음 글 부터는 직접 D3D 실습을 해보면서 위 객체들이 어떻게 사용하는지 살펴보도록 하겠다.
'D3D' 카테고리의 다른 글
| [D3D] 노멀 매핑(Normal Mapping) 과 접선 공간 (Tangent Space) (0) | 2025.10.02 |
|---|---|
| [D3D11] 01. RenderingTriangle 삼각형 그리기 (0) | 2025.09.29 |
| [D3D] Vertex Shader에서 이루어지는 월드/뷰/투영 변환 (0) | 2025.09.24 |
| [게임 수학] 반사 벡터(Reflection Vector)와 투영 벡터(Projection Vector)) (0) | 2025.09.23 |
| [D3D 이론] 빛(Lighting) 모델 : Phong, Blinn-Phong 와 수식 의미 (0) | 2025.09.22 |