그래픽스 기술인 Ambient Occlusion 컨셉 정리
일단 용어부터 알아보자, Ambient는 '주변'이라는 뜻이고
Occlusion은 '폐색'이라는 뜻이다. 대충 주변이 가려졌다는 뜻이다.
영문 Wikipedia에서 찾은 정의는 다음과 같다.
Ambient Occlusion is a shading and rendering technique used to calculate how exposed each point in a scene is to ambient lighting
Ambient Lighting에 얼마나 노출되었는지를 정의하는 셰이딩 테크닉이라 한다.
위 이미지는 정육면체 Cube에 AO를 적용시킨 이미지다. Cube와 바닥이 맞물리는 구역이 주변영역보다
까맣게 보이는데 이것이 바로 Ambient Occlusion이라고 할 수 있다.
AO 기술은 오래전부터 게임에서 쓰여왔다. 그 종류들과 장단점을 아래에 서술한다.
Baked는 제빵을 말할때의 그 Bake가 맞다. 게임에서의 Bake는 오프라인 환경(개발환경)에서 미리 무엇인가 연산해서 데이터화 시키는 것을 의미한다. Ambient Occlusion또한 Bake시켜놓는 것이 가능하다.
언리얼,유니티 최신버전들도 Baked Ambient Occlusion기능을 지원하고 있다.
장점: 런타임 연산을 안하니 런타임 성능상 유리함, 런타임 AO기술보다 압도적인 퀄리티 적용가능
단점: 개발하다가 Bake시키려면 한참 기다려야함(생산성 저하), 고정된 Object에만 적용 가능해서 동적인 Object는 AO를 적용시킬 수 없음
Defered Shading의 등장으로 가능해진 Ambient Occlusion기법이다.
GBuffer에 저장된 Depth값을 이용해 주변 Pixel의 depth값을 샘플링해서 Ambient Occlusion을 계산하는 기법이다. SSAO의 업그레이드 버전으로 HBAO,VXAO같은 기술들도 존재한다. 근본적으로 Screen Space를 이용한다는 것은 같은점이다.
장점: 동적인 Object도 AO적용가능, Screen Space연산이므로 런타임 연산 최소화
단점: 애매한 퀄리티, Screen Space에서 벗어난 Object는 Ambient Occlusion연산에 반영할 수 없음
최근들어 리얼타임 레이트레이싱이 가능해짐에 따라 런타임에 실행가능해진 Ambient Occlusion기법이다.
내 DXR프로젝트에도 적용되어있다. Screen Space에서 연산하는 것이 아닌 World Space에서 Ray들을 역추적하면서 Ambient Occlusion값을 계산한다. 당연히 SSAO대비 연산 Cost는 월등히 높다. 하지만, 그에 따르는 퀄리티 향상도 무시할 순 없다.
위 예시사진을 보면 SSAO와 RTAO를 비교해볼 수 있다. 특히 RTAO가 유리한 부분이 있다면 의자아래 책상아래 영역을 자연스럽게 렌더링해준다는 점이다.
장점: 런타임임에도 좋은 퀄리티
단점: GPU성능 부하