너티독 게임엔진 2.0의 기능들?

사실 기술적인 면에 대해서 분석할만큼 최근 기술에 대해서 빠삭하다고는 전혀 생각도 안하고 있습니다만, 그래도 나름 이것저것 보면서 노가다한 너티독에게 경의를 표할 겸 너티독 게임엔진 2.0으로 표현한 수많은 기술들과 다양한 꼼수를 약간 파보도록 하겠습니다. (부탁받은 거라서 쓴다고는 말하기 힘들...(도주))

뭐 일단 너티독 게임엔진 2.0 이라고 하는 엔진은 너티독이 만든 PS3용 언챠티드 엔진 두번째 버전입니다. PS2시절에 만든 엔진(인섬니악과 같이쓰는 그 엔진)은 이름도 없었죠.
이미 1.0 시절에 워낙 괜찮은 화면을 보여주었기 때문에 그것을 기반으로 SPU에 더 많은 작업을 분담시키고, 쉐이더 부담을 줄이기 위해서 디퍼드 렌더링을 사용하는 등의 특성을 보여주는 엔진입니다. 하지만 이것은 언챠티드의 특성이라고 할 수 있을 것 같군요. 사실상 너티독은 게임에 맞춰서 렌더러나 각종 이펙트를 그 때 그 때 맞춰서 새로 만드는 업체니까 말이죠. 하지만 엔진 이름까지 붙인 걸 보면, 어쩌면 나중에는 타사에 판매하는 형태로 발전할지도 모르겠다는 생각도 듭니다.
기본적으로 너티독 개발 환경은 윈도우+Cygwin을 사용하고 있는 것 같습니다. (PS3가 리눅스 환경이기 때문이겠죠)

일단 사용된 기술들에 대해서 살짝 살펴보도록 하겠습니다.
뭐 잘 모르시는 분들도 알아보실 수 있을 정도로 간단하게만 소개하겠습니다. 복잡하게 소개하면 결국 수식아니면 코드 나올 것 같으니까요;;
순서는 그냥 생각난데로 썼습니다. -_-; 틀린내용은 지적해주시면 감사하겠습니다. 대부분 기억에 의존해서 쓴거라; 틀린 내용이 있을 확률이 적잖이 있습니다.
감기가 심해서 열이 나다보니 사실 지금 뭐 적고 있는지도 잘 모르겠네요.

1. 컬링
3D 그래픽이란 것은 사실 3D공간을 만들어서  게임속에 보여주는 것이기 때문에, 표현되는 것 이외에도 많은 부분이 공간 속에 존재합니다. 하지만 무한하지 않은 연산력을 아끼기 위해서 보통 보이지 않는 부분을 아예 삭제하고 렌더링하기 위해서 많은 기술들이 개발되어 왔습니다. 예를 들어서 드림캐스트에 채용된 PowerVR 계열은 타일 렌더링이라는 방식을 이용해서 화면에 보이지 않는 부분을 최대한 배재하여 연산 효율을 높였고, ATi나 nVIDIA도 독자적인 방식으로 연산하지 않을 부분을 최대한 배제하는 알고리즘을 갖추고 있습니다.

PS3 에서는 버텍스 연산을 SPU에 거의 일임시키고 있기 때문에 이 부분을 다른 방식으로 접근하고 있는데요, 여기에 채용하고 있는 기법이 컬링(Culling)입니다. 기술적으로 이야기하면 사실 저도 자세히 모르기 때문에;;; 그냥 그런 역할을 하는 구성요소라는 것만 알아주세요 ^^;

언챠티드는
- SPU를 이용해서 Viewing frustum culling 방식을 이용해서 화면에 보이는 요소를 찾아내고,
- SPU를 이용해서 Potentially visible set 렌더링으로 인덱싱을 해서
- PPU에서 정렬 시킨다음 렌더링 파이프라인을 맞추고
- SPU에서 폴리곤 처리를 시키는 방식을 씁니다.

제한된 성능 하에서 최대한 불필요한 폴리곤 연산을 삭제하기 위한 작업이라고 생각하시면 됩니다. ^^ 언챠티드2가 캐릭터 하나 당 폴리곤 숫자가 5만이 넘는다고 들었는데요, 이정도 모델을 실시간으로 표현하기는 쉽지 않습니다. 그만큼 안보이는 부분의 것들을 잘 깎아내서 보이는 부분을 열심히 그리는 것이죠. 결국 그러한 노력의 일환으로 컬링이 사용된다고 생각하시면 되겠습니다.


2. 디퍼드 쉐이딩(Deferred shading)
디퍼드 쉐이딩이라고 하는 것은 멀티패스 렌더링에서 낭비되는 연산력을 아끼기 위해서 나온 멀티렌더링 타겟 방식을 활용한 기술로서, 폴리곤 값을 계산하면서 얻어진 Depth 값, 벡터 값, 스펙큘러 값, 텍스쳐 값 등을 각각의 버퍼에 저장해두었다가 픽셀쉐이더의 라이트 처리 후 모아서 완성된 이미지를 만드는 방식을 말합니다. (맞나? 이론만 알고 해본적은 없는거라;; 아마 맞을겁니다;)

이 방식은 겹치는 픽셀쉐이더의 중복 작동을 최소화함으로서 작업 효율을 높이는 것과 버퍼의 부하가 줄어든다는 것인데, 사실 PS3에서는 메모리 부하 줄이는 것이 거의 목숨걸기에 가까운 작업인지라 복잡한 쉐이더 기술을 쓰기 위해서 채택한 방식이라고 생각하시면 되겠습니다.

Pre-Light Render(Light Indexed deffered render)라고 라이트 처리를 먼저 하는 방식은 언제쯤 활용하게 될지 궁금하군요...이쪽이 효율이 매우 좋다고 들었는데 말이죠. 메모리도 훨씬 덜먹고 ^^;;

아무튼 언챠티드2는 디퍼드 쉐이딩 기술을 채용해서 정해진 픽셀쉐이더의 파이프라인을 극한까지 사용하여 다수의 광원효과를 자연스럽게 게임 속에 녹여넣으면서도 후처리 등을 복잡하게 처리하고서도 안정적인 프레임을 지켜내고 있습니다.(사실 이걸 제대로 설명하려면 PS3의 성능상 낮춰야 하는 각종 쉐도우 맵 등등의 해상도에 대해서도 언급해야 합니다만; 그런거 시작하면 한도끝도 없어지니까 그냥 넘어가겠습니다;)

3. 스트리밍 텍스쳐
게임기의 게임들은 항상 메모리 부족에 시달려 왔습니다.
이를 해결하기 위해서 많은 꼼수와 신기술이 도입되어왔습니다. PS2에서는 텍스쳐 압축을 지원 하기 위해서 렌더링 방식을 이상하게 바꾼다거나, 텍스쳐 색상 수를 제한한다거나 하는 것도 그러한 일환입니다.

공간분할은 말그대로 공간(zone)을 잘게 쪼개서 이동하면서 일정 구간의 데이터를 실시간으로 읽어서 유지하는 것입니다. 휴대폰의 Cell 계념을 생각하시면 별로 어렵지 않을 것입니다. 사실 이 기술은 그렇게 새로운 기술도 아닙니다. 이미 MMORPG에서도 일부 쓰여온 기술이고, PS2 게임 '완다와 거상'에서도 전체 맵을 따로 로딩을 거치지 않고 이동할 수 있게 구성함으로서 제공한 바 있는 기술입니다. 현 세대기로 들어오면서 언리얼3 엔진에서도 이 기술을 적극 사용하면서 텍스쳐 맵핑의 퀄리티를 극적으로 끌어올려 이전의 게임을 압도하는 그래픽을 보여준 바 있습니다.



텍스쳐 스트리밍은 존의 특정 구간으로 이동, 혹은 환경 변화에 맞춰서 그 때 그 때 필요한 텍스쳐 데이터를 불러와서 메모리에 올리는 것으로, 공간 분할과 함께 사용된다고 보시면 됩니다. 즉 진행해 나가면서 이미 사용한 데이터 중 필요없어진 데이터를 제거해 메모리를 확보하고, 진행할 길의 데이터를 순차적으로 읽어서 메모리에 얹어 사용하는 방식입니다. 이 방식을 극대화한 엔진이 내년에 선보일 ID소프트의 RAGE의 엔진입니다.

언챠티드는 1편부터 스트리밍 방식을 이용해서  데이터를 로드하고 있는데요, 특히 PS3의 블루레이의 느린 데이터 탐색 시간(Seeking)을 감소시키기 위해서 하드디스크에 일정양의 데이터를 미리 불러(Caching)해두었다가 메모리에 얹는 형태의 진행을 하고 있습니다.

이로 인해서 다른 게임에 비해서 압도적으로 높은 해상도를 보여주면서도 더 여유있는 메모리를 확보할 수 있고, 동시에 진행하면서 생겨나는 불필요한 로딩을 최소화하는 것이 가능해진 것입니다. (반면에 따로 인스톨하는 용량은 없습니다.)



이 방식의 극한을 보여주는 것은 중간중간 등장하는 컷씬 부분인데요, 언챠티드 시리즈는 컷씬들이 동영상으로 구성되어있습니다. 그렇기 때문에 동영상을 재생하면서 다음 공간에 대한 데이터를 로딩하는 형태로 되어있습니다. 2편은 동영상을 로딩하기에 앞서 다음 레벨의 데이터를 거의 준비해두기 때문에 거의 지체가 없습니다만, 언챠티드1의 경우는 중간 동영상을 끝까지 재생시키지 않고 끊으면 텍스쳐의 일부가 제대로 로딩되지 않는 문제가 있었으나, 언챠티드2에서는 그런 문제가 없을 정도로 로딩의 단편화를 '스테이지'형태가 아닌 전체적으로 균형을 잡고 있습니다.

4. 텍스쳐 맵핑

- 스트리밍 텍스쳐 로드에 의한 고해상도 텍스쳐 맵핑을 보여주고 있습니다. 언챠티드2는 여타 어느 게임에 비해서도 뒤지지 않는 수준의 놀라운 해상도의 텍스쳐를 채용하고 있습니다.



- 또한 다중 텍스쳐를 이용하고 있습니다. 일반적인 텍스쳐 맵핑 뿐에 자연 물질을 표현하는 절차적 생성 텍스쳐(PROCEDURAL TEXTURE)를 통해서 더욱 자연스러운 자연 환경의 텍스쳐나 녹슨 금속 효과 등을 표현하고 있습니다. 이 분야는 연산력을 상당히 많이 요하기 때문에 남발하기 어려운 면이 없잖아 있는 기술입니다. 대신 이 기술을 사용하면 텍스쳐맵의 점유 용량을 사용하지 않고 변화로 생기는 애니메이션과 노이즈 처리를 텍스쳐에 얹어 사용할 수 있기 때문에 버스 점유율을 필사적으로 낮춰야 하는 PS3에서는 상당히 적합한 기술이라고 할 수 있습니다. PS3는 SPU를 이용한 시뮬레이팅 성능이 매우 우수하기 때문이죠. 언챠티드2를 플레이할 때 유적에 가서 녹슨 부분이나 돌에 낀 이끼 등이 보이면 바로 이 효과를 이용한 것이라고 생각하시면 되겠습니다.



- 노멀맵(Normal map)은 평면적인 텍스쳐에 돌출을 표현하는 기법으로서 널리 사용되고 있지만, 실제 가까이에서 보면 평면이라는 것이 그대로 드러나기 때문에 언챠티드2는 일부 배경에 패럴랙스 맵(Parallax map)을 사용하고 있습니다. 패럴랙스 맵은 노멀맵에 비해서 시점에 따라 보정된 값을 적용해서 물체를 보여주기 때문에 더욱 높은 사물의 공간적 감각을 살려줍니다. 확대되는 바닥 타일이나 벽의 벽돌 등에서 살펴볼 수 있습니다. 단 연산량을 많이 요하는 기술이기 때문에 전체적으로 사용되고 있지는 않은 것으로 보입니다.

5. HDR
근본적으로 HDR(High dynamic range)이라고 하는 것은 너무 높은, 혹은 너무 낮은 계조여서 화면의 정보가 제대로 표현되지 못하고 너무 어둡게, 혹은 너무 밝게 표현되어버리는 문제를 더 넓은 계조 범위값을 가지게 함으로서 화면이 어두워서, 혹은 너무 밝아서 보이지 않는 부분을 보이게 처리하는 것입니다.


샘플로 버파5. HDR처리를 하지 않은 화면이 허옇게 떠서 눈 위에 표현해야 할 그림자나 디퓨즈맵이 거의 안보이는 걸 알 수 있습니다. HDR은 이런식으로 손실되는 데이터를 줄이는 것이 목적입니다.

일반적인 모니터에서 이 HDR 이미지는 표현이 제대로 안되기 때문에 이것을 화면에 표현하기 위해서 다시 일반적인 LDR값으로 변환하는 것을 톤맵핑(Tone mapping)이라고 합니다. 이 과정을 보통 종합해서 HDR렌더링이라고 부릅니다. 톤맵핑 변환 과정은 실시간으로 작업하는 것도 가능하며, 범위값 변경을 인간 눈의 적응 시간에 가깝게 시뮬레이팅해서 Eye adaptation(시야 적응)효과를 만들기도 합니다.

- 참고삼아 이야기를 약간 덧붙이면, Eye adaption(시야 적응)효과는 어두운 곳에 있다가 밝은 곳에 나갔을 때 실제 눈이 적응하듯 시차를 두고 밝기가 조절되는 기능으로, 원래 HDR의 목적은 아닙니다. 단지 HDR을 사용함으로서 Eye adaption 효과를 적용하는 것이 훨씬 자연스럽고 부드럽게 보이는 것 뿐입니다. 



- 블룸(Bloom)은 강한 빛 등에 대해서 특별히 강하게 과장을 해주는 기법입니다. 예를 들어서 먹구름 사이로 빛의 가락이 내리쬔다거나 할 때에 실제 가지는 광량에 비해서 해당 빛 주위를 밝게 처리함으로서 더 강한 것처럼 보이게 만들어주는 효과입니다.
어두운 곳에서 창밖으로 빛이 비치거나 하는 효과를 표현할 때 아름다운 표현이 가능해지기 때문에 PS2시절에도 적지 않게 사용되어 왔습니다.
이 효과는 HDR이 없어도 사용할 수 있는 기능입니다만, HDR과 함께 사용함으로서 더욱 자연스러운 표현이 가능해집니다. HDR은 자신이 어떠한 효과를 보여주는 기능이 아니기때문에 넓어진 휘도에 블룸을 조합할 경우 아름다운 풍경을 묘사한다거나 할 때 풍부한 표현력을 발휘할 수 있게 됩니다.

(에구 중요한 게임 이야기는 안하고 이거 뭔 설명을 하고 있는거지;)

일단 여기까지 이야기한 것으로 아시겠지만, 기본적으로 HDR이라고 하는 것은 이미지에 들어가는 휘도 수치를 16비트, 혹은 그 이상으로 높이는 등의 방식으로 표현력을 높이는 방식이라고 보시면 됩니다. 하지만 이 방식은 필연적으로 데이터 양을 증폭시키고, 그에 따라서 버스에 부담을 주게 됩니다.

기본적으로 PS3에 채택되고 있는 RSX는 nVIDIA에서 제작한 Geforce7800GTX를 개량한 제품입니다. 버스가 256bit에서 128bit로 줄어들었고 ROP(Render Output Unit)가 절반으로 줄어 단가는 낮추고 수율을 향상시킨 제품입니다. 문제는 이로 인해서 원래 nVIDIA 칩이 가지고 있던 고질적인 문제 - HDR과 안티얼라이어싱이 동시에 제대로 돌아가지 않는 문제를 고스란히 이어받았다는 점입니다.

이 문제로 인해서 PS3 초기의 게임들은 현 세대기의 가장 큰 특징이라고 할 수 있는 HDR 효과를 포기하는 경우가 적잖이 발생했습니다.(초창기 PS3의 멀티플랫폼 게임들이 땟깔(?)이 안좋아보였던 것은 대체로 HDR의 부재와 저해상도 텍스쳐의 탓입니다)

PS3에서 이 문제를 해결한 것은 헤븐리 소드를 개발한 닌자씨오리의 마르코(닉네임 nAo)가 CIE Luv(logLuv) 방식을 사용한 NAO32라는 기술로 HDR 이미지를 인코딩하여 버스 점유율을 낮추면서 해결되었습니다.(사실은 이미 버츄어 파이터5 아케이드판에서도 사용되었던 기술) 내용자체는 복잡합니다만, 굳이 말하자면 쉐이더를 이용해서 실시간으로 HDR이미지를 인코딩 -텍스쳐 맵핑을 dds 파일로 압축하는 것처럼 - 해서 전송하는 방식이 되겠습니다. 이 방식은 현재 PS3의 가장 기본적인 HDR 처리 방식으로 자리를 잡고 있으며, 메탈기어 솔리드4를 비롯한 거의 대다수의 게임들에서 빛을 발하고 있습니다. (메탈기어솔리드4에서는 HDR이미지를 인코딩하여 전송한다는 의미로 HDRencode라고 부릅니다만, 같은 기술입니다)


...뭔가HDR에 대해서 쓸데없는 소리를 너무 많이 늘어놓은 듯 합니다만, 아무튼 언챠티드는 닌자씨오리와 같은 logLuv 포맷을 이용한 유사 HDR 방식을 구현하고 있습니다. 이 방식을 통해서 PC등에 뒤지지 않는 퀄리티의 HDR 이미지를 출력하는데 성공한 것입니다.

...그냥 유사 HDR 기능을 쓰고 있다고 한 마디로 쓰면 될 것 같은데 어쩌다 이렇게 길어진건지;;; 죄송합니다. 뒤로는 간략히 쓰겠습니다 ㅠ_ㅠ

6. 물리 연산
1편에서는 직접 작성한 물리 엔진을 채용해서 물체에 적용되는 물리효과를 계산했었지만, 2편에서는 유명한 하복(Havok) 물리엔진을 도입해서 사용하고 있습니다. 아마도 직접 제작하는데 드는 시간과 비용을 다른 곳으로 돌리기 위한 것으로 생각됩니다.

하복물리엔진의 경우 현재 인텔에 인수되었습니다만,  인수되기 전에 PS3 특화버전을 발표한 바 있어서 PS3는 SPU를 이용한 물리효과를 빠르고 확실하게 구현할 수 있는 걸로 알려져 있습니다. 원래 물리효과 등의 처리에 알맞는 것으로 알려져있는 SPU를 십분 발휘하고 있지 않을까, 라고 생각하고 말면 속편하겠습니다만, 원래 하복 엔진이 좀 종잇장 엔진으로 유명해서 말이죠. 물리엔진으로서 가장 잘 알려져있는 엔짐임에도 불구하고 왠지 쓴 게임들이 하나같이 물체가 종잇장처럼 무게감을 못살리는 경우가 많았습니다. 예를 들면 데몬즈 소울에서도 마찬가지로 적들의 시체가 발에 치이면 아까까지만 해도 육중했던 적들이 종이처럼 툭툭 굴러다니는 모습을 볼 수 있습니다. 언챠티드1이 적절한 캐릭터들의 무게를 잘 살린 물리 엔진을 가지고 있었던 점을 감안하면, 좀 아쉬운 점도 없잖아 있습니다. 그냥 물리 엔진만 놓고 봤을 경우에는 사실 1편의 것이 좀 더 현실적으로 보이는 것도 사실이라서요. 하지만 소니 산하의 제작사들(너티독, 게릴라, 런던스튜디오, 산타모니카 스튜디오 등)은 자신들만 쓰는 걸로 끝나는 것이 아니라 서드파티에 제공하는 엔진(특히 SPU를 위한 Edge 등)을 만들어야 하는 의무가 있기 때문에 범용적으로 사용하는 물리엔진 쪽의 개발을 투자한 것이 아닌가 생각됩니다. (너티독은 이미 그래픽 부하를 체크하는 ICE 같은 툴을 배포한 적도 있고 하니까요)

너티독은 이 종이장같이 가벼운 문제를 해결하기 위해서 오브젝트에 나름의 스크립트를 통한 물리효과를 추가로 적용하고 있습니다. 전체적으로 원래의 종잇장 같은 느낌이 완전 없어지지는 않았습니다만, 스크립트를 통한 절제와 움직임 보정을 해서 원래의 하복엔진이 가지는 가벼운 분위기를 어느정도 해소하고 있습니다.

7. 그림자 처리
그림자는 정적그림자(Static shadow)와 동적 그림자(Dynamic shadow)가 모두 적용해서 둘을 조합해 현실적인 그림자를 구현하고 있습니다. 또한 캐릭터나 사물의 소프트 셀프쉐도우(Soft Self-shadow) 또한 명확하게 적용되고 있어서 움직임에 따른 사물의 현실감을 더욱 높여주고 있습니다. 쉐도우맵의 전체적 해상도도 높은 편이고  2xMSAA 처리를 통해서 깔끔한 그림자를 보여줍니다.

8. DOF


- DOF(Depth of Field, 피사계심도)는 원래 카메라 용어인데요, '깊이값'을 기준으로 초점이 맞춰진 물체 주위의 요소들을 서서히 흐려지게 처리함으로서 공간의 감각을 더욱 느낄 수 있게 해주는 기능입니다.

언챠티드에서는 특히 사격 시에 겨냥(L1버튼)을 누른 상태로 크로스헤어 커서가 향하고 있는 물체를 중심으로 주위가 흐려지게 하는 효과가 잘 살아있습니다. 조준을 하고 있는 상태로 조준 위치를 변경해보면 겨냥된 물체를 중심으로 실시간으로 DOF효과가 적용되어 영화 등에서 카메라로 특정 물체를 강조하는 듯한 강렬한 효과를 보여주는 요소입니다. 혹은 접근전 시 중심의 두 캐릭터만 남기고 흐릿하게 변하는 효과로도 표현되고 있습니다.

9. SSAO
- 이부분은 사실 잘 모르긴 하는데, SSAO(Screen Space Ambient Occlusion)는 간단히 요약하면 사물에 가려져 단순 계산했을 때 그림자가 발생하지 않아도 되는 곳이라도, 주위의 깊이값에 따라서 발생하는 환경광에 의해서 발생하는 차폐도를 적용시켜서 발생하는 동적인 그림자를 만들어서 현실감을 높여주는 기술입니다.
http://interjh.tistory.com/entry/Ambient-Occlusion-part-3-Fake-Screen-Space-Ambient-Occlusion
딱 좋은 예제를 직접 만드신 존경스러운 분이 계셔서 링크를 겁니다. 보시면 한 눈에 어떤 효과인지 구분하실 수 있으실겁니다.

이 기술은 사실 쉐이더의 부하가 크게 일어나기 때문에 적용되는 게임이 그렇게 많지 않은 편입니다. (PC용도 그렇게 많지 않은 편입니다) 언챠티드2는 배경 사물에 SSAO가 적용되어 빛에 의한 사물의 현실감을 크게 높여주고 있습니다.

10. 트리플버퍼/수직동기
언챠티드는 트리플버퍼를 채용해서 화면의 깜빡임과 찢어짐 현상을 막고 있습니다.

- 일반적으로 게임에서 화면을 출력할 때는 더블 버퍼링(Double buffering) 방식을 사용해왔습니다. 더블 버퍼라는 것은 메모리의 프레임버퍼(Frame buffer) 2개에 그림을 그리고 그것을 비디오로 출력함으로서 각 프레임 간의 간격이 끊어지는 것처럼 깜빡여(Flicker) 보이지 않도록 하는 기술입니다. (예를 들어 패밀리 말기의 게임들이 스프라이트가 깜빡거리는 걸 생각하시면 됩니다)

하지만 이 방식의 경우에 최대의 문제는 바로 수직동기화와의 조화입니다.

- 수직 동기화는 간단히 설명하면 더블 버퍼링 방식에서 연산된 화면을 출력하는 일에 있어서 다음 화면이 다 그려질 때까지 기다려주는 기능입니다. 화면이 제대로 그려지지 않은 채 출력 - 화면의 일부분이 다 그려지지 않았기 때문에 이전에 있던 프레임 위에 다 그려지지 못한 그림이 표시되어 마치 찢어진 듯하다고 해서 찢어짐 현상(Tearing)이라고 부릅니다. 루리웹에서는 흔히 물결현상이라고도 부릅니다. 이유는 모르겠습니다만; - 되는 문제를 발생하지 않게 해주는 것입니다.

그런데 수직동기화를 하면 최대의 문제가 바로 '화면 출력할 내용을 다 그렸을 경우'입니다. 백 버퍼에 그림을 다 그리고, 프론트버퍼의 동기 시간이 될때까지 출력을 대기할 경우, 사실상 다음 그림을 그릴 공간이 없기 때문에 연산을 하지 않고 대기하는 상태가 생겨납니다. 즉 그릴 수 있는데까지 그려내는 수직동기화OFF 상태에 비해서 전체적인 퍼포먼스가 크게 떨어질 수 밖에 없는 것이죠.  그래서 게임상에 화면 찢어짐 현상을 감수하고서라도 수직동기화를 포기하고 퍼포먼스를 높이는 방향을 채택하는 게임이 적지 않은 것입니다. (사실 수직동기화 옵션이 없어도 레벨 디자인 등을 적절히 함으로서 찢어짐 현상이 일어날 정도의 부하를 주지 않으면 상관이 없는 문제이니까요)
이 문제를 해결하기 위해서 나타난 기술이 트리플 버퍼입니다.

- 트리플 버퍼 방식은 이름 그대로 버퍼를 하나 더 추가해서 순차적으로 그림으로서 프론트 버퍼에 그림이 있는 상태에서 백버퍼1에 그림을 다 그린 경우 대기하지 않고 다음 백버퍼에서 화면을 그려내도록 함으로서 더블버퍼의 목적이었던 깜빡임 현상은 효과적으로 붙잡고, 수직동기화의 목적이었던 찢어짐 현상도 붙잡으면서 낭비되는 대기 연산력의 여분을 활용하는 기술입니다.

이 기술의 특성은 기본적으로 수직동기화와 함께 사용하지 않으면 아무런 의미를 가지지 못합니다. (동기화를 하지 않을 경우 더블 버퍼를 이용해서 화면 두 장을 순차로 그리고 출력하면 되기 때문에 굳이 세 번째 버퍼가 필요치않습니다)

물론 트리플버퍼가 만능은 아닙니다. 버퍼이기 때문에 추가적인 메모리를 잡아먹고(HD급 게임이라면 이 메모리도 무시할 수준이 아닙니다) 더블버퍼도 다 그려낼 수 없는 수준으로 게임이 운용되고 있다면 트리플 버퍼의 이익이 별로 발생하지 않는 다는 점입니다. 즉 버퍼를 위해서 할당하는 메모리만 잡아먹을 수도 있기 때문에 적절한 게임 디자인이 병행되지 않으면 트리플 버퍼를 적용해봐야 생기는 이득은 거의 없습니다. 또한 미리 렌더링을 한다는 것으로 예측할 수 있는 부분이듯 재빠른 입력에 대해서 약간의 딜레이가 생길 수도 있습니다.

언챠티드2는 싱글플레이에서도, 멀티 플레이 어디에서도 트리플버퍼를 활용하고 있으며, 그로 인해서 화면의 찢어짐 현상은 어디에서도 찾아볼 수가 없습니다.

11. 모션블러



화면의 움직임에 '잔상'효과를 만드는 모션블러는 움직이는 화면을 영화의 필름 잔상처럼 보이게 해주어 부드럽게 움직이는 것처럼 보이는 효과를 내줍니다.

언챠티드2는 오브젝트 단위로 따로 모션 블러가 적용되는 오브젝트 모션블러가 적용되어 있어 캐릭터의 움직임 등을 더욱 부드럽게 하면서도 주위 환경이 흐려지지 않게 해주고 있습니다. DOF 기능과 결합하여 초점이 맞춰진 사물을 중심으로 모션블러가 작용하게끔 되어있어 역동적인 화면을 구성해 보여주고 있음을 확인할 수 있습니다. 생각 이상으로 픽셀쉐이더 부하가 많이 걸리는 기능입니다만, 디퍼드렌더 방식의 결과로 중간에 추출되는 모션벡터값을 SPU에서 이용해 후처리를 재빠르게 처리하고 있습니다. 쉐이더 능력이 떨어지는 PS3에서는 역시 디퍼드 렌더링이이 여러모로 이득을 주고 있음을 확인해볼 수 있습니다.
사실 좀 과하게 적용된 감도 없지 않아 있습니다. 게임을 일시정지 하지 않고 진행하면서 촬영해보면 캐릭터에 모션블러가 너무 심하게 들어가서 항상 잔상이 너무 심하게 보이니까요;

12. AntiAliasing
얼 라이어싱, 흔히 말하는 외곽선의 톱니 현상, 혹은 계단 현상을 제거하는 기술입니다. 언챠티드2는 MSAA(Multisample anti-aliasing) 방식을 채택하고 있습니다. 얼라이어싱 현상을 제거할 때 2X2 블럭의 데이터를 합산해 도트사이에 중간값을 채워넣는 방식으로 얼라이어싱을 제거하고 있습니다.
원래 PS3에 채용된 RSX는 하드웨어 적인 문제로 인해서 HDR과 MSAA 기능이 동시에 적용되지 않는 문제가 있었습니다만, 앞서 HDR파트에서 설명했듯 유사 HDR을 이용해서 HDR의 효과는 효과대로 살리면서 MSAA기능을 활용할 수 있게 바뀌었습니다.

언챠티드2는 모드에 관계없이 모든 화면 출력에 MSAA가 적용되어 있어 얼라이어징이 최저화된 부드러운 외곽선을 만나볼 수 있습니다.

13. 표정연기

바이오해저드 5가 고전적인 방식으로 얼굴에 모션센서를 장착해 입모양부터 모든 근육의 움직임을 그대로 사람의 것을 받아 만들었다면, 너티독은 이미지매트릭스 프로그램을 이용해서 촬영된 배우의 움직임을 3D모델에 적용시키고 나머지 요소를 수작업으로 변경시키는 방식을 채택했습니다. (MGS4나 GTA4 등도 같은 방식을 사용합니다)

세가는 매지컬 V 엔진이라는 자체 엔진을 통해서 음성을 인식시켜 입모양을 자동으로 생성시켜 동기화시키는 엔진을 사용해서 실시간으로 소리에 맞춰 입술이 움직이는 기능을 사용합니다. 언챠티드2 또한 비슷한 형태의 소리에 맞춰 입술을 움직이는 기능이 들어가 있어서 캐릭터가 대사를 내거나 할 때는 실시간으로 입술의 움직임이 적용됩니다. 이것은 멀티 플레이 시에도 마찬가지여서, 헤드셋을 연결해서 채팅을 할 경우 캐릭터의 입술이 사용자의 대사에 맞춰 움직이는 것을 확인해볼 수 있습니다. (음성이 나오고 나서 입술이 움직이는 건, 사실 어쩔 수 없는 부분이겠지만요)

14. 꼼수들
원래 대대적으로 꼼수를 좀 찾아볼까 했는데, 게으름 탓으로 간단하게 두 가지만 찾아보겠습니다.



눈 효과는 게임 발매전에 너티독이 크게 홍보했던 부분인데요, 그 중 발자국 효과는 고급 효과를 사용하는 게임들(예를 들면 버츄어파이터5같은)과 달리 디퓨즈맵과 스펙큘러 맵으로 만든 실제 파인 형태의 구현이 아니라 노멀맵으로 간단히 배경 위에 찍어놓은 발자국입니다. (그래서 나중에 보면 발자국이 전부 동일합니다) 방금전에 걸었던 가장 가까운 발자국 위에만 눈두덩이를 볼록하게 만들어두고 있습니다. 일부러 보려고 하지 않으면 실제로 눈을 파헤치면서 걷는 듯한 효과를 노려서 잘 만든 속임수입니다.




첫번째 사진의 바닥 타일은 패럴랙스 맵이 적용되어 있습니다. 처음에 쓰러져서 크게 확대되는 타일이기 때문이죠 ^^; 이런식으로 크게 확대되는 특정 물건에만 이 기능이 적용됩니다. 그외의 대부분의 텍스쳐에는 패럴랙스 맵이 적용되지 않았습니다. (두번째 사진을 보면 벽이 타일 모양과 달리 평평하게 보이는 건 그래서입니다) 하지만 배경에 일부러 이렇게 가까이 가지 않으면 결국 노멀맵 정도로도 충분한 입체감이 전달됩니다.

-----------------

원래는 꽤 길게 쓰려고 했는데, 몸도 안좋고, 시간도 없고 해서 그냥 되는데로 짧게 써봤습니다.  ^^;
쉽게쓴다고 썼는데, 뭔가 각 항목의 중요한 요소를 빼놓은 것도 있는 것 같고, 복잡하게 써놔서 못알아 볼 것도 같아서 좀 불안하군요;;
다음에 자료 좀 찾아서 추가정리 해보도록 하겠습니다.

by 에리얼 | 2009/11/02 07:24 | 게임관련 잡담 | 트랙백 | 덧글(22)

트랙백 주소 : http://erial.egloos.com/tb/4267459
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 중간자 at 2009/11/02 09:14
이 정도가 저같은 문돌이가 그럭저럭 이해하면서 읽을 수 있는 한계인 것 같군요. 잘 읽었습니다. :)
Commented by 에리얼 at 2009/11/02 09:57
감사합니다. ^^; 나름 열심히...쓰려고 했는데 감기가 심해서 지금 약발로 살아남아있는 상태라서 에헤헤 ^^;;;

그보다 홈페이지 빨리 고쳐야 되는데 아 진짜 몸 왜이러나 몰라요 ㅠ_ㅠ
Commented by 5000 at 2009/11/02 09:42
언차티드2 안파셨다면, 언제 한 번 같이 코옵이나 해보죠?
Commented by 에리얼 at 2009/11/02 09:56
오- m선생님께 빌려드리기 전에 언제 한 번 하죠 ^^
Commented by 계란소년 at 2009/11/02 09:59
모션블러가 적용된 게임들은 액션샷 스샷을 찍으면 한없이 구려지는 게 단점이죠[...] 음성에 따라 입술이 움직이는 거의 경우 하프라이프2가 처음 채택한 걸로 알고 있습니다. 제대로된 첫 멀티랭귀지 게임이기도 했으니까요.
Commented by 에리얼 at 2009/11/02 10:01
오오 하프라이프2에 그런 기능이! ...그러고보니 전 한글판을 못해봤군요 ㅠ_ㅠ 한글 녹음 된게 아주 멋지다고 들었는데 흑흑
Commented by 계란소년 at 2009/11/02 10:05
하프라이프2의 더빙은 정상입니다. 하프라이프1이 그 전설의 더빙이죠.
장비를 정지하겠습니다 어 안되잖아 안돼!
Commented by 에리얼 at 2009/11/02 10:08
스팀판 1은 해봤습니다. ^^; 일부러 구해서 해봤지요. 근데 게임 속에서 들으면 왠지 그 감각이 따로 들을때만 못하더군요 ^^;
Commented by 계란소년 at 2009/11/02 10:05
중간의 HDR 스샷 중 하나는 완다와 거상이군요. 극한의 꽁수 HDR인데...
Commented by 에리얼 at 2009/11/02 10:07
말씀대로 완다와 거상이구요 ^^; 블룸 예제로 붙인겁니당 뇨호호 ^^
Commented by 안셀 at 2009/11/02 12:10
반 정도만 알아들었지만..(과연?) 대단하네요.
음성에 따라 립싱크를 하는 기술은 언리얼 엔진 2 시절 테크데모에서도 봤었던 것 같습니다.
Commented by 에리얼 at 2009/11/02 18:56
그냥 그러려니 하면 되죠 ^^;
음성에 립 싱크는 꽤 있었군요...무관심했던 것 같습니다. 근데 이게 뻐끔뻐끔 수준인가요? 아니면 세가 V엔진처럼 아에이오우가 맞춰서 맵핑이 되는 건가요? 음 알아볼 필요가 있을 것 같습니다 ^^ 감사합니다.
Commented by 나리디 at 2009/11/02 13:40
아주 재밌게 읽었습니다!
Commented by 에리얼 at 2009/11/02 18:56
미숙한 글 읽어주셔서 감사합니다. (넙죽)
Commented by shadow-dancer at 2009/11/02 13:48
잘 읽었습니다.
Commented by 에리얼 at 2009/11/02 18:56
에구 별 것도 없는데 이렇게 와주셔서 감사합니다.
Commented by 돌다리 at 2009/11/02 14:36
잘읽고 갑니다^^
Commented by 에리얼 at 2009/11/02 18:57
감사합니다. ^^
Commented by mastar at 2009/11/02 16:11
좋은 정보 재밌게 읽고 갑니다.

언챠2가 적어도 비주얼에서는 마스터피스급이라고 하더니 온갖 기술이 다 사용되었군요.
언리얼은 다 좋은데 그놈의 텍스쳐 로딩만 좀 해결되면 좋을텐데요. 바이오쇼크는 게임을 하는 내내 어이쿠 깜짝이야 수준이고 지들이 만든 기어워 시리즈도 종종 희끄무리한 폴리곤 덩어리를 보여주니 말이죠. 심지어는 스포츠게임인 피파도 이런 문제가 조금 보이더군요.

레이지는 스트리밍에 자신감이 넘쳐나서 플삼용은 블루레이의 넉넉한 용량을 이용해 고품질 텍스쳐를 남발해 엄청난 화면을 보여줄거라고 자신만만하게 소리쳤는데 일단 결과물이 나와봐야 알겠죠.
Commented by 에리얼 at 2009/11/02 19:01
스트리밍 텍스쳐 자체는 좋은 기술이지만, 광디스크에서 읽어오는 것은 아무래도 느릴 수 있는 거죠. 너티독이 항상 하드가 기본으로 달린 PS3가 강력하다고 말하는 것도 같은 맥락입니다. 광디스크는 아무리 빨라도 결국 렌즈 하나에 의존해야 하는 만큼 Seek타임과 Read타임이 길 수 밖에 없으니까요. 그렇다고 요즘 PC엔진이나 PS1시절처럼 디스크 회전에 맞춰서 바이너리 배치하는 노가다를 하는 회사도 아마 없을테구요;;

뭐 저는 레이지의 기술 이론 자체는 몰라도 결과물은 그렇게 기대가 안되는군요 ^^;
Commented by 꾸엠 at 2009/11/06 18:29
좋은 정보들 감사합니다!!
Commented by 에리얼 at 2009/11/07 12:49
와주셔서 감사합니다 ^^

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶