>> LOGIN
-이 웹사이트는 다음 플랫폼에서 동작이 확인되었습니다. : Internet Explorer Mozilla FireFox Google Chrome Apple Safari Android 2.2(Froyo) Android 2.3(GingerBread) Android 4.0(IceCreamSandwitch) Android 4.1(JellyBean)

CGCODE.net |

3D기술

게임기술 : 실시간 주변폐색 Screen-Space Ambient Occlusion

by Devil on Jan 15, 2012
첨부 '15'

finalgathering.jpg

 

0. Screen-Space Ambient Occlusion 시대.

 

최근들어 게임이나 3D 프로그램들을 보면, SSAO 라는 알수없는 기능이 추가된 것을 본 사용자들이 있을 것이다.

때때로 Occlusion, AO 등으로 축약되기도 하는데, 정확한 명칭은 Screen-Space Ambient Occlusion 이며, 조금 더 현실성을 높이기위해서 영상산업에서 사용되던 기능을 실시간 연산방식을 통해 게임/리얼타임엔진으로 컨버팅 한 기술이전의 일환이다. 특히 3DS MAX, MAYA 의 뷰포트 시스템에서도 리얼타임 SSAO를 지원하기 시작하였기 때문에, 한번 연구해 볼 필요가 있는 것 같아 이렇게 강좌를 써볼까 한다.

1. Ambient Occlusion 이란 무엇인가

2. Ambient Occlusion 의 효용성?

3. Screent-Space Ambient Occlusion

4. 마야와 맥스에서의 SSAO

5. 게임에서의 SSAO

6. 미래에 대한 예측

 

 

 

 

1. Ambient Occlusion 이란 무엇인가?

 

Screen-Space Ambient Occlusion 을 이해하기 위해서는, 일단 Ambient Occlusion 부터 이해를 하고 넘어가야 한다.

한글로는 주변폐색이라고 번역되어 있으며(3DS MAX 한글 도움말에서), 아래와 같이 설명되어 있다.

 

3DS MAX 한글 도움말 : 주변폐색

주변 폐색 (AO)은 영화산업에 의해서 선도된 기법으로 용도는 실제 전역 조명의 모습을 에뮬레이트하는것으로서 한 영역이 가려지거나 입사되는 빛의 진입을 차단하는 정도를 계산하는 셰이더를 이용합니다.

- [링크] http://bit.ly/w4579P

 

MAYA 영문 도움말 : Ambient Occlusion

Ambient occlusion refers to the blocking of indirect or diffuse light on an object. It refers to the darker areas of the object, typically creases, cracks and crevices. Ambient occlusion is caused by indirect light's inability to bounce around and illuminate areas that are blocked by a nearby object that absorbs the light rays.

(주변폐색은 주변광이나 반사광이 물체에 가려지는 경우에 발생합니다. 이것은 물체의 어두운 부분이나, 주름진 부분, 틈이나 갈라진 부분에서 나타납니다. 주변폐색은 반사광이 주변의 다른 물체에 가로막히거나 광자가 흡수되어 버려, 재반사를 통해 주변부를 밝힐 수 없는 이유때문에 발생합니다.)

- [링크] http://bit.ly/yGr4HY

 

 즉, 간단하게 말하면,

 

noambocc.jpg

 

위의 이미지가 있다고 한다면, 위에서는 이러한 영역에 주변폐색이 생겨, 더 어두워져야할 것이다.

  • 발바닥과 땅이 만나는 지점
  • 공/사각박스가 땅과 만나는 지점
  • 공과 사각박스가 서로 겹쳐지는 지점
  • 팔, 손가락, 다리등 몸의 구조상 어두워지는 부분

즉 아래와 같이 보정되어야만 물체들의 접점(경계면)이 분명해지고, 결국 각 물체의 독립성이 분명해지게 될 것이다.

 

yesambocc.jpg

 

 

주변폐색 On/OFF 블렌딩

주변폐색이 있음과 없음에 따라, 지면과 물체, 물체와 물체의 관계가 얼마나 선명해지는지에 대한 정도를 알 수 있다.

 

 

 

 

2. Ambient Occlusion 의 효용성?

 

우선적으로, Ambient Occlusion 은 위의 설명에서 나오듯이 광원의 "에뮬레이션"이다.

이말은 바꿔말해서 복잡한 렌더링 기술을 통해 광원을 모두 추적하기보다는 폐색정도와 사용자의 설정에 따라 근접할 오브젝트(지오메트리)의 폐색성을 손쉽게 조절할 수 있으며, 복잡한 광자/광원 추적보다 계산단계를 단순화 할 수 있고, 시간이나 노력에 비해 더 좋은 결과물을 뽑아낼 수 있게 된다.

 

아래의 이미지는 N.E.D 프로모션 시네매틱에 작업했던, 설인 캐릭터를 다시 꺼내들고(?) 테스트를 진행하였다.

 

coloronly.jpg

 단순히 그림자만 있는 컬러(뷰티) 패스 : 물체간의 경계면에 그림자효과, 즉 폐색효과가 없어서 물체의 독립성이 떨어져보인다.

 

 

finalgathering.jpg 복잡한 반사광계산(GI, FG)가 사용되었지만 주변폐색(AO)는 사용되지 않은 결과물 : 광원반사를 통해 제한적인 주변폐색이 일어난다.

 

위의 이미지들을 보면, 발바닥이나 물체의 경계, 혹은 팔과 다리처럼 근접해있는 지역에서 확실한 폐색성이 드러나지 않고 있으며, 그 결과 그래픽(?)의 현실성이 다소 떨어져보이게 된다. 이러한 문제를 실시간으로 모두 광원을 계산하여 연산하는 것은 현대의 GPGPU 를 사용한다고 해도 대단히 비효율적이기 때문에, 여기에서 보다 단순화되고 폐색성만을 계산하도록 특화된 Occlusion이 도입된다.

 

ambocconly.jpg

 독립된 Ambient Occlusion 패스 : 물체들의 근접정도와 광원의 폐색성만을 그레이스케일의 이미지로 뽑아낸다. 소프트웨어 렌더링을 사용하는 하이엔드 시스템에서는 별도의 이미지 파일로 추출하기도 하며, 게임에서는 Depth채널을 이용하는 경우가 일반적이다.

 

 

withambocc.jpg

 그림자만 있는 뷰티패스 + 주변폐색 패스 : 접점의 폐색성이 증가하고 독립성이 확실히 분리된다.

 

 

fgandambocc.jpg

복잡한 반사광계산(GI, FG) 및 (AO)가 합성된 결과물 : 깔끔한 빛의 반사/폐색성을 보여준다.

 

위의 이미지 처럼, Ambient Occlusion 패스를 결과물에 추가하는 것 만으로도, 각 오브젝트와 지오매트리의 현실성은 증가하며, 특히 게임을 예로들자면, 캐릭터가 땅을 밟거나 어떤 물체가 땅에 떨어졌을 때, 땅에 확실한 음영이 생김으로써 물체의 위치를 더 현실적으로 가늠할 수 있게 된다.

 

 

 

 

 

3. Screen-Space Ambient Occlusion

 

그렇다면, 그래도 나름 복잡한 연산을 요구하는 Ambient Occlusion을 어떻게 실시간(리얼타임)으로 구현하는 것일까?

만능백과 위키디피아를 찾아보면, SSAO에 대한 정보를 찾을 수가 있다. 위키의 설명을 보면,

 

It was developed by Vladimir Kajalin while working at Crytek and was used for the first time in a video game in the 2007 PC game Crysis made by Crytek. The algorithm is implemented as a pixel shader, analyzing the scene depth buffer which is stored in a texture. For every pixel on the screen, the pixel shader samples the depth values around the current pixel and tries to compute the amount of occlusion from each of the sampled points. In its simplest implementation, the occlusion factor depends only on the depth difference between sampled point and current point.

 

-위키(영문) SSAO : [링크] http://bit.ly/xwpWfs

 

(SSAO는 Vladimir Kajalin 씨가 크라이텍社에서 일하던 시절에 개발한 것으로, 가장 먼저 PC 게임인 크라이텍社의 크라이시스 게임에서 사용되었다. 알고리즘은 픽셀쉐이더에 의해 동작되는 방식이며, 게임장면의 텍스처 정보에 저장되는 깊이값을 분석하는 것을 기본으로 한다. 픽셀쉐이더는 화면상의 모든 픽셀에 대하여, 주변 픽셀과의 깊이차를 연산하며, 이를 기본으로 하여 각 샘플점이 가져야 하는 폐색정보를 연산해낸다. 가장 단순한 방식을 따르는 경우, 폐색성은 오직 현재의 샘플위치와 다음 샘플위치사이의 깊이값만을 기본으로 폐색성을 계산하게 된다.)

 

라고 되어있다.

더 쉽게 설명을 하자면, 장면의 깊이값(Depth Buffer)를 이용하여 오클루전을 구현하는 방식이라는 말이고, 이말은 바꿔말해서 Depth Map 이라고 하는 텍스처정보를 이용해야하므로, 광원을 실제로 연산하지 않고, 따라서 투명도(Alpha)를 가지는 물체의 경우 명확하게 폐색지도를 표현할 수 없다는 말이기도 하다.

 

위키에는 블러나/노이즈를 처리하기 어렵다라고 명시되어 있지만, 이를 해결하기 위한 여러가지 연구들이 존재하며, 샘플이 적을수록 벌어지는 문제를 해결하기 위한 방안으로, 샘플사이의 값을 예측해서 블러를 주고 노이즈를 줄이는 방법에 대한 정보도 발견할 수 있다.

 

 

 

적은 샘플을 기본으로, 블러를 이용하여 SSAO의 구현을 연구

 http://aras-p.info/blog/2009/09/17/strided-blur-and-other-tips-for-ssao/

 

sampleblur.jpg

 

 

 

 

Accumulative AO

http://mtlung.blogspot.com/2009/03/accumulative-screen-space-ambient.html

 

 

 

 

 

 

 

 

 

 

4. 마야와 맥스에서의 SSAO

 

3DS MAX 와 MAYA 에서 SSAO 가 도입된것은 비교적 최근의 일로(당연한가?), 게임개발과 DirectX 의 기술도입에 열정적인 3DS MAX 에서는 2010년 버전부터, 최신 DirectX/OpenGL 기술도입은 모르쇠로 일관하는 MAYA 에서는 2012에 와서야 겨우겨우(?) 도입되었다. 특히 마야의 경우, SSAO의 퀄리티는 그렇게 뛰어난 편이 아니며, 전적으로 GPU 가속에 의존하여 다른 방식의 블렌딩을 지원하지 않음으로서 정말 말 그대로 "프리뷰로서의 가치밖에 없다." 라는 느낌밖에 들지 않는다.

 

3DS MAX - 뷰포트의 Lighting and Shadows 에서 Hardware Shading 을 활성화 하거나, 혹은 2012처럼 바로 선택을 하면 SSAO가 뷰포트상에 표시된다. 하드웨어 쉐이딩을 사용한다는 말은 CPU 가 아닌, 여러분의 그래픽카드 즉 GPU 파이프라인 연산에 기반을 두고 있다는 이야기이다.

 

MAYA - 2012버전에서 새롭게 도입된 Viewport 2.0 의 옵션에서 지원한다. 감마보정, 멀티샘플링 같은 DirectX 가속기능이 다소 추가되었으며, 그동안 별도의 하드웨어 버퍼기능을 이용해야 했던 것을 조금이나마 쉽게(?)이용할 수 있게 되어 다행인가? (이래놓고 또 한참 나는 모르쇠로 일관하실 것이라 조심스럽게 예상해본다..)

 

 

 

마야와 맥스에서 SSAO를 통해 실시간으로 AO 확인하기

720P 를 지원한다. 이번 영상에는 배경음악이 들어가있고, MAYA 2012 영문판, MAX 2012한글판이 사용되었다.

 

 

 

 

 

 

 

 

 

 

 

5. 게임에서의 SSAO 

 

일단 크라이시스에서 사용된 만큼, 크라이엔진에서는 SSAO를 당연하게 사용이 가능하지만, 실제로 SSAO의 최적화에는 여러가지 어려움이 있고, 구세대 그래픽카드 파이프라인에 접목하기에는 성능적 손실이 많아 흔하게 사용되지는 않는다고 한다. 웹마스터의 경우 SSAO 의 사용이 가장 인상깊었던 게임을 바이오웨어社의 Dragon Age 2로 추천하고 싶다.

 

dragonage2.jpg  

 움직이는 캐릭터와 SSAO를 접목했던 Dragon Age2, 눈움직도 현실적으로 구현했다.

 

그외 2009년 이후에 출시되는 게임들에서는 SSAO 가 드물지 않게 도입되는 것을 알 수 있는데, 이 중에는 스타크래프트 2, 배틀필드 3, 크라이시스2, 더위처 2, 데드아일랜드, 콜오브듀티, 보더랜드 같은 명작들이 많이 포함되어 있다. 다만 여전히 SSAO는 성능적 한계때문에 그 사용이 보편적이라고 하기는 어렵고, 더불어 온라인 게임들은 더더욱 도입이 제한적인 상황이다. 국내 게임은 아니지만 많은 매니아들이 플레이를 하고 있는 우주온라인 게임인 EVE 온라인의 경우에는 SSAO를 지원한다고 알려져있다.

 

 

게임엔진의 경우에는,

 

기본적으로 SSAO 가 가장 먼저 사용된 크라이엔진에서 SSAO 기능을 포함하고 있다는 것은 이미 언급한 바가 있다. 이와 동시에 상용게임엔진의 양대산맥을 이루고 있는 UDK(Unreal 3)의 경우에도 기능적으로는 SSAO 의 구현이 가능한데, 이것은 UDK 메뉴얼에 보면 명시되어 있음을 알 수 있다.

 

UDN : 라이트매스 스태틱 글로벌 일루미네이션

http://udn.epicgames.com/Three/LightmassKR.html

 

ambientoccinudk.jpg

 

그렇다면, 실제로 크라이엔진이나 UDK 에서 SSAO를 사용하지 않는 게임이 많은 이유는 무엇이냐고 묻는다면 필자는 두가지로 대답하고 싶다.

 

1. 그래픽성능을 저하하는데 비해서, 얻는 시각적 만족도가 적다.

일반 게이머를 기준으로 할때, 일반 게이머들의 상당수는 캐릭터의 미적아름다움이나 텍스처, 배경의 아름다움을 우선해서 보게되며, 광원의 현실성에서 희열을 느끼는 빈도가 적기 때문에, 많은 성능을 요하는 AO의 연산에 그래픽카드의 성능을 희생해야 할 필요성이 적을 것이다.

 

2. Ambient Occlusion 의 상당수가 이미 텍스처로 bake 되어 게임에 포함되어 있다.

정적인 물체들, 특히 배경, 집, 물건들의 상당수는 그래픽적 효과를 위해서 컬러텍스처와 Ambient Occlusion 맵을 합성해서 최종텍스처로 만드는 경우가 많다. 예를 들어서 UDK 의 예제지도 중 하나인 DM-Deck 맵을 열어서 배경을 잘 둘러보면 마치 벽면의 코너에 SSAO 처럼 음영이 만들어 져 있는 것을 볼 수 있다.

 

udk001.jpg

 

저 영역의 메쉬를 옆으로 치워보면..

 

udk002.jpg

 

아티스트(텍스처디자이너)가 직접 포토샵에서 그려넣은것이 분명하다!

 

이런식으로 게임에서는 정작인 물체에 대한 텍스처에 대해서는 AO를 수동으로 그려넣는 경우가 많으므로, 배경이나 물체에 대한 사실성은 SSAO를 사용하지 않아도 충분히 가능하다. 다만 이런 방식은 움직이는 물체에는 적용할 수 없다.

 

 

이와별개로 GPU 제조사의 입장에서는...

그래픽 가속과 리얼리즘 부분에서 AMD(ATi) 보다는 역시 Nvidia의 기술관련 자료가 많을 수 밖에 없다.

 

NVIDIA의 실시간 주변폐색 구현 개발자 자료

http://http.download.nvidia.com/developer/GPU_Gems_2/GPU_Gems2_ch14.pdf

 

nvidiaocc.jpg

 

 

 

nvidiaocc2.jpg

 

EVE 온라인등 일부게임들이 Nvidia 그래픽카드에서만 SSAO를 지원하는 이유는 바로 이런 지원과 연구에 대한 투자에서 Nvidia가 우수하기 때문일것이다.

 

 

 

 

 

 

6. 미래에 대한 예측.

 

일단, 필자가 보기에는 마야는 SSAO를 2012년에야 겨우 도입했으니 아마도 2014년 정도까지는 별 변화가 없을 것이다. AUTODESK 마야개발팀의 특성상, SSAO는 프리뷰수준이면 충분하다고 하실것이고, 따라서 마야에서 SSAO를 구현하는 수준은 필자가 만든 동영상의 퀄리티에서 보이는 SSAO 수준을 벗어나지 못할 것이다. 게임의 경우에는 언젠가 한국의 온라인 게임이나 보급수준의 게임에도 SSAO 혹은 다른 방식의 Occlusion 이 포함되겠지만, 현재로서는 DirectX 9,10 의 주요기능이었던 디스플레이스먼트, 테셀레이션 기술과 함께 시각적 만족도 측면에서 우선순위가 밀려있어 당분간은 최고 그래픽을 꿈꾸는 게임타이틀이 아니고서는 보편적으로 보기는 어려울 것 같다.

 

마야 SSAO의 리얼타임 퀄리티

GPU의 기본 알고리즘에 너무도 충실하며, 720p 로 보면 알 수 있듯이, 퀄리티는 정말 프리뷰용으로 사용할 수준밖에 되지 않는다.

그래도 욕을 하면, 기껏 만들어 준 것을 뺏아갈지도 모르니, 항상 SSAO를 사용해보고 싶었습니다. 라고 해야겠다.

(조삼모사 같은 느낌이 든다..)

 


Designed by hikaru100

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5

CGCODE.net의 모든 게시물 및 자료의 저작권은 CGCODE.net과 김진우에게 있습니다. 합법적 허가 및 출처의 명시없이 이를 도용,복사,사용하는 경우에는 관련 법령에 의거하여 처벌될 수 있습니다.
Since 2003. CGCODE and Devil.Genius all rights reserved. In the U.S, Korea(Republic of), and/or other countries. All information on CGCODE.net is developed by JinwooKIM.
All contents are protected by the copytight laws. Visitors are not supposed to use or edit any contents in this website without the authorization or permission.
CGCODE.net 
Ver 3.57 - Released Beta stage. WebMaster : geniusione@gmail.com