1. Direct3D Compute Shader
1.1 Blur System
1.1.1 Blur Algorithm
- 원본 이미지의 각 픽셀Pij에 대해 그 픽셀Pij를 중심으로한 M ✕ N 픽셀 행렬의 가중 평균 계산
- 그 가중 평균을 결과의 ij 픽셀로 설정, M과 N을 홀수로 두면 항상 자연스러운 중앙 성분 존재
- 가중치의 합이 1, 합이 1보다 작으면 색상 성분이 작아져 원본 이미지보다 어두워 지는 반면 크면 밝아짐
- 합이 1인 가중치들을 결정하는 방법인 가우스 흐리기 사용하여 가우스 함수로 구한 가중치들을 사용
- 가우스 흐리기는 분리 가능으로 알려짐, 2차원 흐리기를 다음과 같이 1차원 흐리기로 나누어 적용
- 입력 이미지 I를 1차원 수평 가우스 흐리기 핵으로 흐림, 단계 I의 결과를 1차원 수직 흐리기 핵으로 흐림
- 일반적으로 흐리기는 Texture에 적용, 9 ✕ 9 행렬이 있다면 1차원 흐리기 두번을 적용하면 18번으로 가능
1.1.2 Render to Texture
- 렌더링 대상이 후면 버퍼였지만 장면을 후면 버퍼와는 다른 화면 밖 Texture에 렌더링 가능
- 대상 Texture가 후면 버퍼가 아니므로 제시가 수행되어도 화면에 표시X
- Render to Texture을 수행한 후 다시 후면 버퍼를 출력 병합기 단계에 묶어 통상적인 렌더링을 재개 가능
- 앞에서 Render to Texture으로 만든 Texture를 기하구조에 입힐 수 있음
- 다양한 특수 효과가 가능, 장면의 조감도를 하나의 Texture에 렌더링, 후면 버퍼에 대한 렌더링을 수행할 때 화면 오른쪽 하단 모퉁이의 작은 사각형에 그 Texture를 입히면 레이더 지도 같은 미니맵이 만들어짐
- 또한 그림자 매핑, 화면 공간 주변광 차폐, 입방체 맵을 이용한 동적 반사가 가능해짐
- 땅과 물로 이루어진 장면을 Render to Texture에 렌더링, 계산 셰이더에 그 Texture에 흐리기 알고리즘 적용
- 흐려진 Texture를 화면 전체를 덮는 사각형에 입혀 후면 버퍼를 그림
- 장면 전체가 흐려진 모습이 화면에 나타나서 흐리기 알고리즘이 어떤 효과를 내는 지 볼 수 있음
1.1.3 Blur System
- 2차원 흐리기가 분리 가능이라 간주하고 두 개의 1차원 흐리기를 수행
- Texture Buffer가 두 개 필요, 둘다 읽기와 쓰기 모두 가능해야 함, Texture 모두 셰이더 자원 뷰, 순서 없는 뷰 필요
- A에 대한 세이더 자원 뷰를 계산 셰이더의 입력, 수평으로 흐려 질 입력 이미지
- B에 대한 순서 없는 뷰를 계산 셰이더의 출력, 흐려진 결과를 담을 출력.이미지
- 스레드 그룹들을 배분해서 수평 흐리기 작업을 수행
- B에 대한 세이더 자원 뷰를 계산 셰이더의 입력, 수직으로 흐려질 이미지
- A에 대한 순서 없는 뷰를 계산 세이더의 출력으로 설정, 흐려진 최종 결과가 저장
- 스레드 그룹들을 배분해서 수직 흐리기 작업을 수행
- 흐려진 결과에 또 다른 흐리기 패스를 적용해서 더욱 흐리는 것도 가능, 원하는 수준까지 흐리기를 반복
- 장면을 렌더링할 때 Render to Texture는 응용 프로그램 창의 클라이언트 영역과 같은 크기
- 창의 크기가 변하면 Render to Texture, 흐리기 알고리즘에 쓰이는 Texture도 다시 생성
void BlurDemo::OnResize();
- Render to Texture을 생성할 때 결속 플래그를 밑에 값과 같은 값을 포함
D3D11_TEXTURE2D_DESC texDesc; /* 나머지 생략 */
texDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE
| D3D11_BIND_UNORDERED_ACCESS;
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 30. Direct3D Tesselation (0) | 2023.06.22 |
---|---|
[Direct11] 29. EX App Program - Blur System (0) | 2023.06.21 |
[Direct11] 27. Direct3D Compute Shader - I/O Resource (0) | 2023.06.21 |
[Direct11] 26. Direct3D Compute Shader (0) | 2023.06.21 |
[Direct11] 25. EX App Program - Billboard (0) | 2023.06.20 |