[기획 2부] 게임세계, 아는 만큼 보인다! 렌더링 엔진의 비밀

칼럼 | 이상우 기자 | 댓글: 16개 |



[▲ 이상우 과장]

인벤에서는 에픽게임즈코리아의 엔진 프로그래머 이상우 과장님으로부터 게임 엔진에 관련한 칼럼을 기고받게 되었습니다.

이상우 과장님은 카이스트 전산학과를 수석 졸업하고 UNC-CH(University of North Carolina at Chapel Hill)에서 Computer Science 석사를 취득했습니다. 전 엔씨소프트와 SK C&C에서 근무했고 현재 에픽게임즈코리아에 몸담고 있습니다.

지난 시간에 소개했던 '게임 엔진이란 무엇인가'에 이어 이상우 과장님이 준비한 두 번째 칼럼은 '게임 세계를 보는 법! 렌더링 엔진에 대하여'라는 주제로 꾸며졌습니다.



※ 에픽게임즈코리아 홈페이지 바로가기
[기획 1부] '대 게임엔진 시대'의 서막, 게임 엔진의 역사와 정의에 대해




게임 세계를 어떻게 볼 것인가? 렌더링 엔진 1부


우선 많이 부족한 이전 기사를 읽어주신 독자들에게 감사드린다. 사실 수많은 드립들이 검열의 칼날에 스러지고 허공에 산산히 부서졌으니 아직도 자유 민주 사회의 길은 멀고도 험하다. 하지만 어른들의 사정을 지켜주는 것도 민주 시민의 자세이기에 독주를 마시는 소크라테스의 마음으로 겸허하게 받아들이기로 했다. 또한 수많은 게임 엔진들이 다 언급되면 혼동이 찾아올 수 있기에, 글의 흐름에 적절한 엔진만 언급하다보니 좋아하는 엔진이 빠져서 아쉬움을 느끼신 독자들은 앞으로 계속될 시리즈에서 출연을 기대해도 좋을 것이다.




[ ▲ 저작권. 드립의 자유도 중요하나 저작권을 지키는 것도 중요하다]



이번 시간에는 게임 엔진의 중추이자 꽃인 렌더링, 혹은 그래픽 엔진에 대해서 알아보도록 하겠다.

“그래픽 좋아?”. 게이머들 사이에서 흔히 들을 수 있는 말이다. 말하자면 신사의 품격에서 장동건 외 3인방이 “(그 여자) 이뻐?”라고 묻는 것에 비유할 수 있겠다. '예쁜 여자'가 굉장히 복잡하고 은유적이며 복합적인 동시에 다양한 의미를 갖고 있듯이, 세상의 다른 많은 개념들과 같이 자세히 살펴보면 “그래픽이 좋다”라는 관념도 많은 것을 함축하고 있다.

일반적으로 한국 게이머들이 이야기하는 '그래픽이 좋다'라는 개념은, 캐릭터가 멋지고 아름다운 경우가 많다. 외모 지상 주의가 판을 치는 현대 사회에서는 아름다운 캐릭터가 각광을 받는 것이 사실이니까.



[ ▲ 마이트 앤 매직6. 실사를 바탕으로 한 캐릭터가 너무 못생겨서 가면 아이템이 최고의 아이템으로 꼽힌 게임 ]




[ ▲ 툼레이더 그래픽의 발전. 예전 툼 레이더는 광대뼈에 맞으면 폴리곤에 찍혀서 피가 철철나올 것 같은 외모였지만, 이번 신작 툼레이더는 아름다운 그래픽과 그에 어울리는 게임 플레이로 이번 E3 최고 기대작으로 꼽혔다]



미의 기준은 다르지만 이런 아름다운 캐릭터 추구는 아시아권에서 특히 강세를 보인다. 이로 인해 아시아로 진입하는 외산 MMORPG의 경우는 이를 위해 종종 성형 수술을 감행하기도 한다. 미학보다는 다양성(혹은 근육남)을 추구하는 서구권은 그래픽이 좋다고 할 때 가상이라 불리는 게임 세계를 더욱 생동감있게 표현하는 배경과 캐릭터를 꼽곤 했다. 그 예로 일본 게임계가 계속 2D에 매달려 있을 당시에도, 전편에서 이야기했듯 3D 컴퓨터 그래픽을 게임에 빠르게 적용하여 가상 세계를 확장한 것은 서구권이었다.



[ ▲ id소프트의 울펜슈타인 3D. 전편에 리플에 누군가 예견했듯, 게임 그래픽에 있어 최초의 FPS를 만든 존 카멕 옹은 계속 언급될 수 밖에 없다.]



사실 기술 발달로 전반적인 그래픽이 상향 평준화된 현대에서는 배경과 캐릭터 그래픽 어느 한쪽만 좋아서는 명작 반열에 들 수 없다. 위화감으로 인해 좋은 평가를 얻기 힘들기 때문. 캐릭터와 배경 모두 제작자가 표현하고자 하는 세상을 잘 구현해냈을 때 비로소 그래픽이 좋다고 평가받는 것이다.

'그래픽이 좋다'라는 표현은 캐릭터와 배경의 구분 외에도, 그래픽 리소스와 그것을 표현하는 렌더링 알고리즘으로 구분된다. 그래픽 리소스는 가상 세계를 표현하기 위한 객체들을 데이터로 변환하여 아티스트가 제작한 것을 말하며, 렌더링은 3D 가상 공간을 우리가 보는 2D 화면으로 옮겨 보여주는 과정을 뜻한다. 실질적으로 움직이는 영상을 표현해야 하므로, 3D 가상 공간에서 설정된 카메라 위치에 맞춰 매초 20장 이상의 이미지를 생성하는 것이 그래픽(렌더링) 엔진의 역할이다.



[ ▲ 블레이드 앤 소울 여캐. 가상 공간에선 3D지만 2D로만 표현되므로 결국 나와 그녀는 다른 차원에서 살고 있다 ]


물론 게임은 순수 예술이 아니므로 그래픽 리소스 역시 렌더링 알고리즘을 위한 맞춤작업이 필요하다. 그렇기에 완전한 분리는 불가능하지만 중요한 구분인 것 만큼은 사실이다.

영화에 비유하자면, 그래픽 리소스는 배우와 촬영 장소이고, 렌더링은 조명, 분장, 촬영 기법 등에 빗대어 볼 수 있다. 아무리 아름다운 배우도 조명과 분장으로 완전히 다른 모습으로 보여질 수 있고, 동네 뒷산이라도 예술적인 촬영 기법을 겻들이면 파리 못지 않은 낭만의 도시로 탈바꿈하게 된다. (여담으로 영화에서 보던 장소를 실제로 가보면 실망하는 이유도 이것 때문이다.)



[ ▲ 영화 몬스터. 미모의 여배우 샤를레즈 테론은 이 영화에서만큼은 결코 아름답지 않다. 옆 사진과 비교하면 극명한 차이를 볼 수 있다 ]



역사가 더욱 오래된 2D 렌더링 엔진도 여러가지 기술적 고려사항과 최적화 방법이 있지만, 소녀시대도 3D로 보는 시대이니만큼 3D 렌더링 엔진 위주로 칼럼을 진행하도록 하겠다. 물론 2D는 UI등의 분야에서 여전히 현역으로 활약하고 있으나, 2D 엔진은 3D 엔진의 부분 집합인 만큼 2D 엔진에서 가능한 부분은 3D 엔진에서도 가능하다는 점을 미리 적겠다.



[ ▲ Q-박용택씨는 투수의 공을 어떻게 보십니까? A-저는 3D로 봅니다]



게임 엔진의 태동이 3D 그래픽의 시작과 함께한 만큼, 당시 3D 렌더링은 기술적으로도 상당히 어려웠다. 특히 하드웨어가 지금과는 비교도 안될 만큼 열악했던 시대이기에, 영화에도 쉽사리 접목하지 못했던 3차원 그래픽을 실시간으로 실행한다는 것은 매우 도전적인 일이었다.



[ ▲ 19살에 울펜슈타인 3D를 만든 존 카멕. 왜 공부해야 하는지 모르는 수학 과학을 잘하면 이런때 다 도움이 된다. 로켓 만들고 돌아오는 바람에 요즘엔 예전의 포스가 안나고 있어 아쉽다 ]



[ ▲ 트론. 최초로 CG를 사용한 영화. 이 당시엔 슈퍼 컴퓨터를 사용할 정도로 CG를 제작하는 일이 어려웠다 ]



시간은 흘러 CG 영화 퀄리티의 게임들이 등장할 정도로 하드웨어와 렌더링 기술이 발전했다. 예전에는 상상도 못할 영화급 퀄리티로 플레이가 가능해진 것. 영화의 오프라인 렌더링(게임에서의 한 frame에 해당하는 그림을 생성하는데 몇 분~몇 시간을 소모)에 대해 고민하던 많은 기술과 주제들이, 이제는 게임의 실시간 렌더링(초당 30장 이상의 이미지 생성)에 도입하고 고민하게 됐다.



[ ▲ 라스트 오브 어스. 2006년에 발매된 PS3에서도 이런 퀄리티가 가능하다 ]



각 주제를 자세히 다루기엔 인벤의 웹서버 용량이 부족하기에, 우선 일반 독자들이 궁금해하실 만한 그래픽 엔진에 관련된 용어와 기자 분들이 주신 질문에 답변하면서 알려드리는 방향으로 진행하려 한다. 그래픽 엔진이 게임 엔진에서 가장 중추적 부분인 만큼, 이번 기사에서 다루지 못한 부분은 다음 기사에서 다루도록 하겠다. 다음 기사를 위해서 질문을 던져주시면 추첨을 통하지 않고 제 맘대로 엄선하여 성심성의껏 답변하도록 하겠다.


Q: 셰이더(Shader)가 뭔가요?

렌더링 엔진의 기본 기능은 3D 모델을 카메라 공간으로 변환하여 2D 이미지로 구현하는 것이다. 이것만으로도 계산량은 엄청나게 많아 전용 그래픽 가속기, 즉 지금의 그래픽 카드가 탄생하는 계기가 됐다. 이렇게 2D 이미지로 변환할 때는 가상 공간 물체들의 모양이 중요하지만, 좀 더 현실적인 결과물을 위해서는 변환할 때 나타나는 이미지의 색상을 계산하는 것이 중요하다. 아울러 색에 영향을 주는 것은 빛과 물체가 어떻게 반응하는지 계산하는 라이팅(Lighting), 그리고 빛이 닿지 않는 곳에 그림자를 드리우는 쉐도잉(Shadowing) 알고리즘 등이 중요한 역할을 담당한다.



[ ▲ 그래픽 파이프 라인. 셰이더는 렌더링 알고리즘의 자유도를 엄청나게 확장시키는 데 일조했다 ]



어느덧 시간은 흘렀다. 기술의 발전으로 그래픽 카드 연산 능력 또한 괄목할 만한 성장을 해냈다. 하드웨어에서 정해진 방식으로 색을 계산하던 시대를 지나, 프로그래머가 원하는 대로 알고리즘을 구현할 수 있는 시대가 열린 것이다. 'HLSL'나 'GLSL'같은 셰이더 언어로 'C++'이나 '자바'같이 원하는 프로그램을 작성할 수 있게 되면서 물리 기반 셰이더(Physical Based Shader) 같은 현실 세계의 물리적인 성질과 광학을 도입이 가능해졌다. 덕분에 이전보다 훨씬 사실적인 이미지를 생성할 수 있게 됐다. 이에 곁들여 'DirectX 11'에서는 지오메트리 셰이더(Geometry Shader)나 컴퓨트 셰이더(Compute Shader) 같이 단순 색에 대한 계산 외에도 3D 모델을 실시간으로 변경하거나 일반화된 다양한 알고리즘을 적용할 수 있게 되어 더욱 다양한 표현이 가능해졌다.

좋은 그래픽 엔진은 셰이더를 쉽게 제작할 수 있는 툴을 사전에 제공한다. 이를 통해 프로그래머의 도움 없이 그래픽 디자이너가 직접 제작 가능하며, 이는 게임을 만들 때 작업 능률을 크게 향상시키는 결정적인 요소로 작용한다.



[ ▲ 사마리아인 데모. 지오메트리 셰이더의 대표적인 사용 예인 테셀레이션으로 순간적으로 3D 모델이 매우 정교해진다 ]




[ ▲ 언리얼 엔진 머터리얼에디터. 빛에 반사되는 물체의 특성을 프로그램처럼 어렵게 작성하지 않아도 되며, 셰이더도 쉽게 만들 수 있다 ]



Q: 글로벌 일루미네이션은 무엇인가요?

글로벌 일루미네이션(전역 조명)은 직접 표면에 반사되는 빛 외에 두 번 이상 반사되는 빛까지 표현해서 사실적으로 표현하는 알고리즘을 말한다. 아래 그림에서 볼 수 있듯이, 직접 표면에 반사하여 우리 눈에 도달하는 빛(direct lighting)만을 표현하면 비현실적으로 구현되고만다. 그 때문에 표면에 반사한 후 다른 곳에 반사되어 눈에 도달하는 빛(indirect lighting)에 대한 계산이 필요한 것이다.



[ ▲ 반사광이 없다면 화면에 그림자가 드리운 부분은 현실적이지 않은 어둡기만 한 색이 된다. ]



이 기능은 실시간이 아닌 CG 영화에서는 당연히 적용하고 있었으나, 실시간으로 빛을 계산해야 하는 게임에서 구현하기에는 어려움이 많았다. 그래서 당시 대부분의 게임들은 반사광을 고려하지 않고 단순한 빛 계산으로 처리하는 편법을 많이 사용했다. 미리 계산하여 실시간으로 적용하는 방식이기에 전체 게임 장면에서 빛이 움직이거나 변하는 물체가 많을 경우에는 계산이 정확하지 않았으나, 최근 하드웨어와 기술의 발달로 실시간으로 변화하는 물체에도 적용할 수 있는 방법들이 속속 도입되고 있다.


Q: 2D 게임 엔진에서 3D 게임 엔진으로 변하면서 나타난 차이점은 무엇인가요?

2D 시절에는 게임 엔진 개념이 크게 보편화되지 않았다. 이유는 기술이 게임 컨텐츠와 게임 엔진을 분리할 만큼 성숙하지 않은데다, 무엇보다도 3D 공간을 그려내는 렌더링 기술 자체가 상당히 어렵고 많은 계산량을 필요로 하기 때문이었다. 2D에서 3D로의 변화는 표현할 수 있는 공간의 차원이 증가하는 것을 의미한다. 비로소 2D에서는 표현할 수 없거나 부분적으로만 가능했던 것을 꼼수 없이 제대로 표현할 수 있는 환경이 갖춰진 것이다.



[ ▲ 에픽게임즈 수장 팀 스위니가 제작한 최초의 게임 'ZZT' 스크린샷. 당시에는 상상력과 게임 시스템만으로도 충분히 재미를 느낄 수 있었으며, 사실상 프로그래머 혼자서 게임 제작을 하던 시대였다 ]



2D와 3D 게임엔진을 간단히 비교하자면 이전의 2D 셀 애니메이션과 영화를 생각하면 되겠다. 셀 애니메이션은 레이어와 같아 몇 장 그려서 겹쳐기만 가능했기에, 모든 움직임을 새롭게 그려야만 했다. 2D 엔진의 표현력 역시 이와 같은 맥락이다. 새로운 그림(스프라이트)의 양으로 표현하니까. 물론 기술의 발달로 후기에는 이미지에 다양한 효과를 적용해 표현력을 더욱 끌어올릴 수 있었지만, 기본적인 공간 표현의 한계를 벗어날 수는 없었다. 장점이 있다면 만화나 그림 특유의 표현을 큰 어려움 없이 표현할 수 있다는 점이다.



[ ▲ 애니메이션 제작. 셀 화는 레이어를 겹치는 방식만 가능하다 ]



위와 반대로 3D 게임엔진은 영화 촬영과 비슷하다. 잘 만들어진 캐릭터와 배경이 있다면, 카메라의 이동으로 어떤 구도도 표현할 수 있다. 현실적으론 가상 공간이기에 계산량과 데이터에 따른 제한이 있지만, 3D 게임 엔진은 현실 세계처럼 원하는 어떤 곳에서 어떻게 인물과 배경을 보여줄지를 결정하면 원하는 대로 보여줄 수 있어 표현의 제약이 없다. 다만 2D 게임 엔진의 경우 보는 방향이 고정되어 있어 애니메이션과 같은 데포르메 같은 표현 등에 자유로운 편이지만, 3D 게임 엔진의 경우 Cut-scene이 아닌 이상 어떤 방향에서 보일 지 알 수 없는 리소스가 많으므로 제작에 노하우가 필요하다.



[ ▲ 김형태 씨 원화 캐릭터의 꿀벅지를 3D 게임 '블레이드&소울'에서 표현하기 위해선 많은 기술적 노하우가 필요하다. 캐릭터 리소스를 잘 만드는 것은 물론, 셰이더를 원하는 느낌이 나도록 제작하는 것이 중요하다. 하지만 해당 기능이 엔진에서 이미 잘 갖춰져 있다면, 프로그래머의 도움 없이 아티스트 혼자서도 제작이 가능하다]



이해를 돕기 위해 '파이널 판타지3'의 2D 시절과 3D 시절을 비교해보겠다. 2D 파판의 경우 가상 세계에서 캐릭터의 이동과 배경의 묘사가 굉장히 단순화된 2D 그림들로 이루어진 것을 볼 수 있다. 각각의 캐릭터들은 움직임에 따라서 다른 그림을 가지고 있으며, 배경 역시 용량 제한으로 인해 사각형 타일의 조합으로 이루어져 있다. 물론 이것도 나름 아트 스타일이고 이런 그래픽을 선호하는 유저들도 많지만, 게임은 모든 경우의 수에 맞춰 제작을 해야 하기에 공간이나 표현의 자유도가 월등한 후자로 가게 된 것은 자연스러운 흐름이다.

예를 들어 2D의 경우 카메라 움직임을 묘사하려면 그에 해당하는 그림을 따로 제작을 해야 하기에 다양한 카메라 움직임 자체를 표현할 수 없거나 애니메이션 수준의 많은 이미지를 필요로 하게 된다. 하지만 3D라면 하나의 모델로 원하는 카메라 움직임을 마음껏 표현할 수 있으므로, 표현의 자유와 제작 프로세스에 있어 큰 장점을 지닌다.



[ ▲ 2D 시절 파이널 판타지 4를 리메이크한 파이널 판타지4 CC. 아직도 이런 고전 그래픽 스타일을 선호하는 유저들도 많다. 최근 리메이크한 게임은 3D 게임 엔진 기반이기에 사실상 2D 그래픽 스타일을 흉내내면서 3D 엔진의 기능을 사용하고 있다 ]



[ ▲ 아이폰 용 파이널 판타지 3 ]



Q: 그래픽 엔진을 통해 게임화면을 만들어 낸다면, 자연스러운 그래픽을 표현하기 위해 개발자들도 미술 이론을 알고 있어야 하는 건가요?

좋은 질문이다. 그래픽 엔진은 위에서 말한 렌더링 알고리즘과 3D 가상 공간을 구성하기 위한 기능들로 이루어져 있기에, 어느 정도 개발자의 이해도가 필요하다. 마치 포토샵으로 사진을 편집할 때, 전문가가 다루면 예술 작품이 탄생하지만, 각 툴의 기능을 모르고 만들면 엉망이 되는 것과 비슷하다.



[ ▲ 좋은 그래픽은 훌륭한 그래픽 엔진과 그에 걸맞는 그래픽 리소스의 결합으로 이루어진다. 위의 조악한 그래픽 리소스도 렌더링 알고리즘을 바꾼다면 훨씬 나은 결과를 보여줄 수 있다 ]



뛰어난 기능을 지닌 그래픽 엔진은 해당 그래픽 리소스와 결과물을 쉽고 편하게 만들 수 있게 해주지만, 결국 컨텐츠 제작자의 역량에 따라 그 결과물은 판이하게 달라진다. 때문에 결과물을 어떻게 표현할 것인가에 대한 미술 이론적 감각, 그리고 표현을 위한 그래픽 엔진의 대한 전반적인 이해가 뒷받침되야 한다. 제작자는 그래픽 엔진의 기능과 한계를 잘 알고 있으면서, 그 범위 안에서 최대한의 결과를 뽑아내는 것이 중요하다. 또한, 게임에 필요한 기능이 엔진에 없을 때 그래픽 프로그래머와 함께 개선해나가려는 노력도 필요하다.



[ ▲ WOW의 초기 그래픽 엔진은 현재의 그래픽 엔진들에 비하면 기능적으로 부족한 부분이 많았다. 하지만 그래픽 프로그래머와 아티스트가 힘을 합쳐 기능을 개선하고, 그에 잘 맞는 아트워크를 제작해 WOW만의 독창적 표현하는 데 성공했다 ]



여기서 한 가지 중요한 것은 예전과는 달리 아티스트들이 그래픽 에셋을 제작할 시 많은 공부를 필요로 한다는 점이다. 엔진 기능이 발전할수록 거기에 맞는 리소스를 제작하는 아티스트 분들의 노력과 이해가 필요하다. 특히 요즘처럼 물리적으로 정확한 라이팅을 사용하는 엔진들을 다룰 때는 제작 단계부터 심도깊은 고찰이 필요하다. 물론 테크니컬 아티스트 같은 분들이 잘 관리해주면 이 부분을 많이 보완할 수 있다. 또한, 프로그래머들도 실제 물리 특성을 아티스트 분들이 사용하기 편한 파라미터(Parameter)로 조절하여 제공해야 한다.



[ ▲ 스타크래프트2' 얼굴 텍스쳐가 늘어난 사진이다. 요즘 엔진에서는 예전과 같이 아티스트가 본능 따라 텍스쳐에 그림을 그리면 그래픽 엔진이 원하는 결과를 표현할 수 없기에 텍스쳐 마다 렌더링 용도에 따라 다르게 만들어야 한다. 이렇게 생성한 텍스쳐를 2D 시절처럼 리소스를 따로 뽑아보면 이렇게 흉측한 리소스가 나온다. 하지만 3D 모델과 렌더링 알고리즘에 맞는 텍스쳐가 3D 엔진에서 렌더링 된다면 흉해보이던 텍스쳐를 통해 미려한 그래픽 결과를 얻을 수 있다. ]



부족한 문장이지만 그래픽 엔진에 대한 이해가 조금 더 높아졌기를 바란다. 다음 칼럼에서는 이번에 다루지 못한 Q&A와 댓글에서 엄선한 주제 위주로 내용을 다루어보도록 하겠다. 궁금한 것이 있다면, 바로 리플을 달아주시길!



[ ▲ 사랑 고백은 아니니 오해하지 말길 바란다 ]

댓글

새로고침
새로고침

기사 목록

1 2 3 4 5