Transcript SSAO

SSAO 관하여
방원영
◈ SSAO 를 발표과제로 선택한 이유
 Kasa 에서 발표 한적이 없다.
 SSAO 가 처음 소개된 게 얼마 되지 않았지만, 그사이
많은 새로운 방법들이 소개 되어 졌다.
 실제로 작년에 적용해봤지만, 생각처럼 그럴싸하게 나
오지 않아서 …
( 크라이텍 처럼 왜 안되는 거야~ T.T)
 지금은 SSAO 를 웬만하면 다 사용하는 아주 흔한 주제
지만, 보기 좋게 구현 하기는 어렵다고 생각하고, 여기
계신 다른 분들과 실제로 적용에 관해 이것저것 이야기
하고 싶었습니다.
◈ 오늘 다루게 될 SSAO
◈ 목차
 SSAO 란?
 처음으로 소개된 SSAO
 Starcraft II SSAO
 SSAO 실제로 적용하기
 지금까지의 SSAO 문제점과 효용성
 SSDO ??
 Siggraph 2010 토이 스토리 SSAO
◈ SSAO 란?
 Global illumination 의 일부분. (그 중에 AO 의 일부분)
 주변광(Ambient) 는 항상 우리주변에는 일정한량의 광원이 비춘
다는 가정에서 출발.
 Ambient Occlusion 은 광원의 도달하지 못한 양의 합
 광원의 합은 현재 렌더링 되는 점의 평면 위의 반구로 그 량을 구한
다. (간접광의 힛팅 수)
 구석이나 틈은 언제나 주변보다 어두운 이유가 이 때문이다.
 하지만 이러한 구의 차폐를 결정하는 것도 여전히 실시간으로는
아주 계산 양이 많음
 구의 중심을 원점으로 일정한 거리의 ray ( kernel ) 로 샘플링 해서
AO의 근사치를 Screen Surface 에서 얻는 것이 SSAO
◈ 초기모델 SSAO 특징및 구현
 Scene 의 Depth 를 필요로 함.
 SSAO 맵을 만드는 과정에서 View 각 2D 포인트에
서 Projection Ray 가 필요함 (3D 포인트를 계산 하
기 위해, 참고 주소
http://www.iquilezles.org/www/articles/ssao/ssa
o.htm )
 Projection Ray 와 Depth 로 구해진 점 P 에서 각
kernel 로 뻗은 점에서 그 위치 z 와 Depth 와 비교
후 Occlusion 결정
◈ 결과
◈ 초기모델 SSAO 의 문제점
 Example showing the benefits from edges
highlight
 -> 세월이 좀 지나니 단점이 되었다.
 무조건 구로 샘플링 하다 보니 샘플의 거의 반은 쓰
이지도 않음
 가뜩이나 적은 샘플링 Popping 의 원인이 된다.
( popping 을 그나마 피하기 위해서는 kernel 의 방향
이 한 평면에 있지 않도록 적절히 분산해야 함)
◈ Demo
◈Starcraft II (1)
 Depth 외에 Normal 을 필요로 한다.
( Normal 을 쓰게 되면 면 뒤에 샘플링 되는 kernel 을
걸러 낼 수 있다. 반대방향이면 flip)
 Depth 와 Normal 을 같은 RednerTarget 에 렌더링
( 16F RGBA 에 하든지 , 32 비트 두 바이트는 depth
로, 나머지 바이트는 normal x,y 저장후 사용시에
계산)
◈Starcraft II (2) - heuristics
 Occluding Surface 가 sampler 포인트 보다 뒤에 있
으면 OV (occlusion value) = 0
 둘의 차이가 약간 나면 높은 OV 값
 아주 큰 차이가 나면 (어느 특정값 이상 차이) 다시
또0
◈Starcraft II (3) – SSAO맵 다듬기
 샘플링 kernel 의 텍스쳐를 사용한 random 회전 (다
른 예제 다하는 방식)
 그 다음 패턴을 상쇄 하기 위해서 가우스 블러를 한
다. Normal 과 Depth 에 값의 임계 값을 설정해서
이상의 차이가 나면 가우스 weight 값 0
 SSAO 샘플링 ray 를 두 단계로 나눔 , 하나는 짧은 거리
용( 약 전체 샘플의 ¼ 정도) 나머지는 넓게 퍼지지게 긴
거리용.
◈ SSAO맵 적용하기
 SSAO 맵 생성은 Post Process 에 생성되지만 , 마지막에

1)
2)
3)
덮어 버리면 안된다!! (라이트 있는 부분이 시커멓게 그
림자가 드리운다)
정석 (크라이시스 , 스타 크래프트2)
Depth 와 Normal 만 따로 렌더링
다시 Scene 을 렌더링 할때 ambient 칼라로 이용
Deffered 렌더링이 아니면 조금 부담스러운방식
◈ SSAO 지금까지 기술들의 단점
1) Depth 가 연속성임을 가정했고, 두께를 모름으로 인해
생기는 오류
◈ SSAO 지금까지 기술들의 단점
2) 샘플링 스텝 사이의 한계
◈ 그래도 SSAO 를 사용하는 이유
1) 추가 적인 기하학적 데이터가 전혀 필요 없다.
(Scene 의 복잡도와 전혀 무관하다)
2) 구현에 비해 얻어 지는 결과물이 너무 좋다.
3) 현재도 진행형이며, 점점 더 기술이 나아 지고 있다.