Color Grading
- 후처리 방식중 하나이며, 전체적인 스크린상의 RGB값을 활용하여 미리 계산해둔 다른 테이블의 RGB로 변환시키는 작업이다.
- 영화측에서는 거의 필수적으로 사용한다고 하며, 다른 테이블을 참조해서 변환한다는 것 자체는 간단하지만 생각보다 효과적인 결과물을 볼 수 있다.
Color Grading을 적용하게된 계기
- 현재 진행중인 프로젝트에서 외부에 있을때와 내부에 있는 경우는 IBL을 영역별로 나누어 분위기를 조성하였지만, 게임 흐름상 보스존에 입장한다거나 공간에 대한 변화가 있을때 추가적인 효과를 주기 위해 추가하게 되었다.
- 처음엔 단일 Color Grading을 적용하려고 생각하였으나 교수님이 피드백으로 보통 게임에서 상황이나 구역별로 영역을 지정하여 가중치를 주어 블랜딩하여 자연스럽게 전환되는 효과를 주로 사용한다고 하셔서 블랜딩을 하여 전환하는 방향으로 작업을 하게 되었다.
- 현재 프로젝트에선 보스 등장과 내부와 외부의 변화에 따른 ColorGrading을 바꾸어 서서히 변하는 효과를 주어 사용하고있다.
Color Grading을 위한 LookUpTable Volume Texture
Offset을 이용한 LookUpTable 2D Texture를 사용시 문제점
- 결국 최종 출력된 픽셀들의 색상값을 기반으로 테이블을 참조하려면 LUT 2D Texture 블록 단위로 Offset을 주어 처리하여도 될 것이라 생각하였지만, 막상 적용하면 특정 부분에서 이상한 색상이 출력되는 것을 볼 수 있게 되는데, 그 이유는 해당 블록단위로 Offset을 주어 넘길경우 해당 블록의 시작지점과 끝지점의 색상 보간이되어 의도한 색상을 가져와서 출력 할 수가 없게된다.
LookUpTable 2D Texture를 3D Volume Texture로 변환하여 사용
- 결국 정확한 테이블의 픽셀값을 가져오려면 2D Texture를 블록단위로 3D Volume Texture를 만들어 사용하면 문제가 해결되는데, 변환해주는 툴이 없어 자체적으로 변환하여 3D Volume Texture를 생성하는 기능을 툴에 적용시켰다.
- 보통 16 pixel 혹은 32 pixel 단위의 LUT를 활용하는데, 성능상 이슈도 있고 큰 차이가 없기에 현재 프로젝트에선 16 pixel의 LUT를 활용하여 적용하고 있다.
적용 영상
'DirectX 11' 카테고리의 다른 글
[DirectX 11] Dissolve Effect (0) | 2022.06.27 |
---|---|
[DirectX 11] HDRI Sky Light & Sky Cube Baking (0) | 2022.05.25 |
[DirectX 11] Material Property Block (0) | 2022.05.22 |
[DirectX 11] Rim Lighting (0) | 2022.04.25 |
[DirectX 11] Vertex Texture Fetch Skinning Animation Instancing (0) | 2022.04.21 |