최상단 광고

레이블이 SSAO인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SSAO인 게시물을 표시합니다. 모든 게시물 표시

2012년 4월 15일 일요일

Screen Space Ambient Occlusion



일반적인 game scene 에서의 SSAO 요소.

SSAO 와 diffuse lighting 을 비교. 

Screen Space Ambient Occlusion( SSAO ) 는 이미 잘 알려진 ambient occlusion 이라는 효과를 실시간에 효율적으로 근사계산하기 위한 rendering 기법입니다. 이것은 Crysis 라는 PC game 에서 2007 년에 처음 사용되었습니다.

이 algorithm 은 순수하게 computer 의 GPU 상에서 실행되며, texture 에 저장된 scene depth buffer 를 분석함으로써 pixel shader 로서 구현됩니다. 화면상의 모든 pixel 에 대해서 pixel shader 는 현재 pixel 주변의 깊이값들을 sampling 하고 sampling 된 각 point 로부터 occlusion 의 총합을 게산하려고 시도합니다. 가장 단순한 구현에서는 occlusion factor 는 현재 point 와 sampling 된 point 사이의 깊이 차에만 의존합니다.

부가적인 세련된 방식을 사용하지 않는다면 그러한 막무가내식( brute force ) 기법은 좋은 가시 품질을 위해 pixel 당 약 200 번의 texture read 를 요구할 것입니다. 이것은 현대의 graphic hardware 상에서 실시간 rendering 에 적합하지 않습니다. 더 적게 read 하면서 더 좋은 결과를 얻기 위해서 sampling 은 무작위적으로 회전되는 kernel 을 사용해 수행됩니다. 최종 이미지에서 high-frequency noise 만을 획득하기 위해서 이 kernel orientation 은 모든 N screen pixel 들에 대해 반복됩니다. 마지막으로 이러한 high freqency noise 들은 NxN 크기의 후처리 blurring 단계에서 거의 대부분 제거되는데 깊이 불연속성을 고려하게 됩니다( 인접한 normal 과 dpeth 를 비교하는 것과 같은 기법을 사용하게 됩니다 ). 그러한 방식은 pixel 당 16 개 혹은 그 이하의 깊이 sample 을 사용해 고품질의 결과를 얻을 수 있게 해 주며, 기본적으로 computer game 과 같은 실시간 응용프로그램에서 SSAO 를 사용할 수 있게 해 줍니다.

다른 ambient occlusion 방식과 비교해 SSAO 는 다음과 같은 이점을 가집니다 :
  • Scene 복잡도에 독립적.
  • Data 에 대한 전처리, loading time, system memory 할당을 필요로 하지 않음.
  • 동적 scene 에서 잘 동작함.
  • 화면상의 모든 pixel 에 대해 동일한 방식이 적용됨.
  • CPU 를 사용하지 않음 - 온전히 GPU 상에서 실행됨.
  • 현대 graphics pipeline 과 쉽게 통합됨.
물론 단점도 가지고 있습니다 :
  • Rather local and in many cases view-dependent, as it is dependent on adjacent texel depth which may be generated by any geometry whatsover.
  • 개체의 모서리 같은 곳에서 깊이 불연속성을 저해하지 않고 올바른 smooth/blur 를 하기 어렵다( the occlusion should not "bleed" onto objects ).
See also
Externel links