Depth Map 만들기
Rasterizatiion -> float(MSAA) -> Resolved(No MSAA) -> Post Effects -> Post Processing -> Back Buffer(최종 Swap Chain Present)
Depth Map을 관리하기 위해서 DepthOnlyView를 만들어서 사용한다.
PostEffect에서는 만든 Depth Map을 이용해서 안개효과를 만들어줄 것이다.
(DepthOnlyDSV에는 MSAA를 사용하지 않고, DepthStencilView는 MSAA를 사용해서 Rendering을 한다.
postEffectRTV은 MSAA를 사용하지 않도록 Resolved를 해준다.)
안개효과(Depth map을 다른 shader로 넘겨주기 위해서는)를 만들기 위해서 신경을 써야되는 몇가지 작업이 있다.
1. Texture2DMS를 Texture2D로 사용해준다.
Texture2DMS는 다른 Shader에 넣기가 어려우니 MSAA를 OFF해서 일반적인 Texture2D로 만들어서 Shader에 넣기 편한 Type으로 만들어준다.
2. DXGI_FORMAT을 특정한 형식으로 사용한다.
Depth Map을 만들어주고, 그 값(Depth Map)을 Shader에 보내기 위해서는 일정한 형식을 따라서 만들어줘야된다.)
Depth-Stencil 기능 구성 - Win32 apps
이 섹션에서는 출력 병합기 단계의 깊이 스텐실 버퍼와 깊이 스텐실 상태를 설정하는 단계를 다룹니다.
learn.microsoft.com
주요내용:
깊이 스텐실 리소스는 DXGI_FORMAT_R32_TYPELESS 같은 무형식 형식이어야 합니다.
깊이 스텐실 리소스는 D3D10_BIND_DEPTH_STENCIL 및 D3D10_BIND_SHADER_RESOURCE 바인딩 플래그를 모두 사용해야 합니다.
D3D11_DEPTH_STENCIL_VIEW_DESC 전달됩니다. 형식은 형식화된 형식(예: DXGI_FORMAT_D32_FLOAT)을 사용합니다.
DepthOnlyPS
m_context->OMSetRenderTargets(1, m_resolvedRTV.GetAddressOf(), m_depthOnlyDSV.Get());
m_context->ClearDepthStencilView(m_depthOnlyDSV.Get(), D3D11_CLEAR_DEPTH, 1.0f, 0);
//물체들 Rendering
이렇게 depthOnlyDSV로 설정을 하고 물체들을 Render하면 Depth가 저장된다. (이미 depthOnly는 Stencil을 사용하지 않게 설정을 해서 Depth만 저장된다.)
Rende를 저장한 resolvedSRV와 Depth를 저장환 DepthOnly를 postEffect Shader에 보내서 합쳐주면 된다.
vector<ID3D11ShaderResourceView *> postEffectsSRVs = {
m_resolvedSRV.Get(), m_depthOnlySRV.Get()}; // 20번에 넣어줌
m_context->PSSetShaderResources(20, UINT(postEffectsSRVs.size()),
postEffectsSRVs.data());
Depth Map만 확인하면 이렇게 잘 만들어 졌음을 알 수 있다.
DepthMap의 값들을 이용해서 Beer- Lambert 공식을 적용하면 이렇게 안개효과를 줄 수 있다.
구현하다가 힘들었던 점:
처음에는 Smoothness 함수를 사용했었습니다. 그렇게 되면 뿌옇게만 되지 안개같은 느낌을 주지 못합니다.
그래서 Smoothness와 Beer-Lambert 그래프를 비교해보니 smoothness가 너무 완만한 느낌이여서 제곱을 해보았습니다.
그러면 그럴싸해보이긴 합니다. 그래도 Beer - Lamber 쓰는게 더 멋진 것 같습니다 허허..
honglab
Introduction to Computer Graphics with DirectX 11 - Part 4. Computer Animation Course • 102 lessons [그래픽스 Part4 - 컴퓨터 애니메이션] 파트1,2,3에서 배운 내용들로 이번에는 요소 기술들이 따로따로 작동하도록 구
honglab.co.kr
'ComputerGraphics' 카테고리의 다른 글
[CG] Multi Light + Fog Effect 구현 (0) | 2025.01.14 |
---|---|
[CG] Shadow Map using Depth Map (0) | 2024.12.08 |
[CG] Texturing (0) | 2024.12.04 |
[CG] Cartoon Rendering(Non-Photorealistic Rendering) (0) | 2024.12.04 |
[CG]Phong Illumintaion Model: Flat, Smoothing Shading 이론 (0) | 2024.11.25 |