DX11) View
View
DirectX11에서 View는 GPU가 리소스(텍스처, 버퍼 등)에 접근하는 방식을 정의하는 객체이다. GPU는 리소스를 직접 사용할 수 없기 때문에, View를 통해 리소스를 접근할 수 있도록 설정해야 한다.
// 1. RenderTarget Texture를 SwapChain으로부터 가져오기
SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)RenderTargetTex.GetAddressOf());
// 2. RenderTargetView를 생성한다.
Device->CreateRenderTargetView(RenderTargetTex.Get(), nullptr, RenderTargetView.GetAddressOf());
// 3. DepthStencil용 Texture 제작
D3D11_TEXTURE2D_DESC Desc = {};
// Depth 25bit, Stencil 8Bit
Desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
// 렌더타겟과 해상도 일치
Desc.Width = (UINT)RenderResolution.x;
Desc.Height = (UINT)RenderResolution.y;
Desc.ArraySize = 1; // 배열크기
Desc.CPUAccessFlags = 0; // CPU 접근 없음
Desc.Usage = D3D11_USAGE_DEFAULT; // 기본사용
Desc.MipLevels = 1;
Desc.SampleDesc.Count = 1; // 멀티 샘플링 비활성
Desc.SampleDesc.Quality = 0; // 품질 설정
// 텍스쳐 용도설정(깊이를 저장하는 전용 명시)
Desc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
Device->CreateTexture2D(&Desc, nullptr, DepthStencilTex.GetAddressOf());
// 4. DepthStencil View
Device->CreateDepthStencilView(DepthStencilTex.Get(), nullptr, DepthStencilView.GetAddressOf());
// RenderTarget과 DepthStencilTarget을 출력으로 지정.
Context->OMSetRenderTargets(1, RenderTargetView.GetAddressOf(), DepthStencilView.Get());
View의 역할
View는 GPU 리소스(버퍼, 텍스처 등)를 렌더링 파이프라인에서 접근할 수 있도록 설정하는 객체다. DirectX에서 GPU가 렌더링할 데이터(텍스처, 버퍼 등)에 접근하는 방법을 정의하는 역할을 한다.
View 종류 | 설명 |
---|---|
Render Target View (RTV) | 렌더링 결과를 출력하는 백 버퍼(Frame Buffer) |
Depth-Stencil View (DSV) | 깊이(Depth) 및 스텐실(Stencil) 버퍼 |
Shader Resource View (SRV) | 쉐이더에서 사용할 텍스처 또는 버퍼 |
Unordered Access View (UAV) | 컴퓨트 쉐이더(Compute Shader)에서 사용할 수 있는 메모리 |
View가 필요한 이유
- DirectX에서 생성된 리소스(텍스처, 버퍼 등)는 기본적으로 GPU가 직접 접근할 수 없다.
- View를 생성하여 GPU가 해당 리소스를 사용할 수 있도록 지정해야 한다.
- GPU는 View를 통해 읽기/쓰기 가능한 메모리 영역을 인식하고, 이를 렌더 타겟, 깊이 버퍼, 쉐이더 리소스 등으로 사용할 수 있다.
주요 View 종류
Render Target View (RTV)
RTV는 렌더링 결과를 저장하는 백 버퍼(프레임 버퍼). 모든 프레임은 GPU에서 처리된 후 Render Target을 통해 화면에 출력된다.
RTV역할
- GPU가 렌더링한 결과를 저장하는 프레임 버퍼(Frame Buffer) 역할을 수행.
- 화면에 출력되기 전에 픽셀 데이터를 담아놓는 공간.
Depth-Stencil View (DSV)
DSV는 깊이(Depth) 및 스텐실(Stencil) 버퍼를 설정하는 View. 깊이 버퍼는 3D 장면에서 오브젝트의 원근감을 처리하는 데 필수적이다.
DSV역할
- GPU가 픽셀의 깊이를 검사하여 보이지 않는 오브젝트를 자동으로 제거(Z-Buffering).
- 스텐실(Stencil) 기능을 사용하면 특정 영역만 렌더링 가능.
Shader Resource View (SRV)
SRV는 쉐이더(Shader)에서 사용할 텍스처나 버퍼 데이터를 정의하는 View. 쉐이더는 SRV를 통해 텍스처 데이터를 읽을 수 있다.
SRV역할
- 픽셀 쉐이더(Pixel Shader)에서 텍스처를 읽어 색상 및 조명을 계산하는 데 사용.
- 텍스처 매핑(Texture Mapping), 노멀 매핑(Normal Mapping) 등에 활용.
Unordered Access View (UAV)
UAV는 컴퓨트 쉐이더(Compute Shader)에서 읽기/쓰기 가능한 버퍼. RTV, SRV와 달리 임의의 순서로(Random Order) 읽고 쓸 수 있는 점이 특징.
UAV역할
- GPU 연산을 수행하는 Compute Shader에서 데이터를 읽고 쓸 때 사용.
- 일반적인 렌더링이 아닌 GPGPU(General-Purpose GPU) 연산을 위한 버퍼.
결론
- View는 GPU가 리소스를 접근할 수 있도록 정의하는 객체.
- Render Target View(RTV) → 렌더링된 결과를 저장.
- Depth-Stencil View(DSV) → 깊이 및 스텐실 테스트에 사용.
- Shader Resource View(SRV) → 쉐이더에서 텍스처를 읽는 데 사용.
- Unordered Access View(UAV) → Compute Shader에서 읽기/쓰기 가능.
댓글남기기