전문가 : 안녕하세요. 저는 여러분들과 함께 모바일 게임을 개발할 때의 최적화 기술에 대해 알아보게 될 오지현이라고 합니다. 앞서 보신 영상은 모바일 게임의 플레이 화면인데요, 여러분들도 아시다시피 이러한 게임의 목적은 재미를 느끼는 것이겠죠? 그래서 게임은 무엇보다 재미있게 만드는 것이 가장 중요합니다. 하지만, 게임을 정말 재미있게 만들었음에도 불구하고 최적화가 되어있지 않아 게임 사용자들이 게임을 즐기는데 불만을 토로한다면 안되겠지요. 때문에, 이번 시간에는 게임 개발에 있어서 최적화가 무엇인지, 그리고 최적화가 어떻게 이루어지는 지에 대한 내용을 알아보도록 하겠습니다. 물론, 짧은 시간 동안 게임 최적화에 대한 모든 내용을 다룰 수는 없을 것입니다. 다만, 최적화 작업 진행을 어디서부터 시작해서 어떤 방향으로 나아가야 할 지에 대한 실마리를 풀 수 있는 기회가 되면 좋겠습니다.
개발자 : 안녕하세요. 저는 모바일 게임 개발을 시작한지 얼마 되지 않은 개발자 입니다. 제가 모바일 게임을 개발하면서 종종 겪었던 문제가 하나 있는데요, 어느 정도 제작한 게임을 테스팅해보면 게임이 심하게 버벅거리는 현상이 나타나는 것입니다. 도대체 이런 현상은 왜 발생하는 것인가요? 그리고 이를 해결하려면 어떻게 해야 하나요?
전문가 : 결론부터 말씀드리면 게임이 버벅거리는 현상이 나타나는 이유는 최적화 작업이 제대로 이루어지지 않았기 때문입니다. 최적화 작업이 효과적으로 이루어졌다면 이런 현상은 발생하지 않죠. 그럼 효과적인 게임 최적화의 방법은 무엇일까요? 이를 알아보기 위해 최적화와 렌더링이 갖는 그 의미부터 살펴보도록 하겠습니다. 게임은 재미있게 만드는 것 못지 않게 최적화를 신경써주는 것 또한 매우 중요합니다. 만약 개발자가 게임개발 시 최적화를 고려하지 않으면 게임은 원활하게 돌아가지 않게 됩니다. 화면이 버벅거리며 뚝뚝 끊긴다거나 부드럽지 않게 움직인다는 느낌을 받게 되면서 불쾌함을 느끼게 되는 것이죠.
방금 보신 것과 같은 상황을 가리켜 사용자들은 우스갯소리로 최적화를 발로 했다해서 발적화라는 표현으로 조롱하기도 합니다. 그렇다면 게임이 성능 최적화가 이루어지지 않아 원활하게 돌아가지 못하고 버벅거리는 이유는 무엇일까요? 그 이유는 바로 실시간으로 빈번하게 이루어져야 하는 렌더링(Rendering)이 적절하게 이루어지지 않았기 때문입니다. 리얼타임 렌더링이라는 용어에서 드러나듯이 렌더링은 리얼타임, 즉 실시간으로 이루어져야 함에도 말이죠.
여기서 렌더링이란 컴퓨터가 주어진 데이터를 기반으로 그래픽 이미지를 만들어내는 과정을 의미합니다. 쉽게 말해, 컴퓨터가 그림을 그리는 행위라고 표현할 수 있죠. 흔히 렌더링이라고 하면 영화 CG를 떠올립니다. 대표적인 예로 트랜스포머나 퍼시픽림에 등장하는 메커닉 기체들이 바로 렌더링의 결과물이라고 할 수 있죠. 또한, 슈렉, 드래곤 길들이기, 업, 슈퍼배드, 미니언즈, 몬스터 대학교 등의 애니메이션들도 모두 컴퓨터를 통한 렌더링의 결과물로 이루어진 작품입니다.
하지만, 렌더링은 영화나 애니메이션에만 국한되는 것이 아닙니다. 컴퓨터가 화면에 디스플레이 하는 것 모두가 렌더링이고, 스마트폰에서 게임이 화면에 출력되는 것 또한 렌더링입니다. 그러나 게임의 렌더링과 영화의 렌더링은 큰 차이를 가지고 있는데요, 그것은 바로 그때 그때 필요한 장면을 즉시 실시간으로 렌더링하고 있느냐 아니냐의 차이입니다. 실시간 렌더링이 무엇인지에 대해 말하기 위해서는 우선 Non-Real-time, 즉 비 실시간 렌더링에 대한 설명이 필요한데요, 영화나 애니메이션은 정해진 장면을 모두 미리 렌더링 해놓는 비 실시간 렌더링을 합니다. 미리 렌더링 해놓은 이미지를 프레임별로 나열함으로써 동영상이 되는 것이죠. 광원, 캐릭터 모션, 카메라 앵글 등이 정해진 시간에 정해진 모습으로만 렌더링 되기 때문에 미리 렌더링을 처리할 수 있는 것입니다.
또한 한 프레임의 스틸 컷을 만들기 위해 고품질의 그래픽이 요구되므로, 처리해야 할 데이터가 많고, 비싼 연산을 거치기 때문에 많은 시간이 소요된다는 점도 영화나 애니메이션이 비 실시간 렌더링을 하는 이유입니다. 그리고 이러한 영화나 애니메이션의 렌더링 시간은 시간이 지남에 따라 더 길어지고 있는 추세인데요, 이것을 가리켜 슈렉의 법칙이라고 합니다. 2001년 슈렉1의 러닝타임에 대한 총 렌더링 시간은 500만 시간이였지만, 2004년 슈렉2에서는 1000만 시간으로 길어졌습니다. 이어 2007년 슈렉3에서는 2000만 시간에 달했고, 2010년 슈렉포에버에서는 4500만이라는 어마어마한 시간에 걸친 렌더링이 필요해졌습니다. 이처럼 10년 사이에 10배 가까운 렌더링 시간이 필요해진 것인데요, 물론 GPU의 가속을 받아서 고속으로 처리되고, 분산 컴퓨팅 시스템을 통해서 실제로 렌더링 시간이 실제로 4500만 시간에 미치지는 않는다고 하더라도 시간이 지날수록 렌더링에 엄청난 컴퓨팅 파워와 노력이 필요하고, 소요 시간이 길어지고 있다는 것은 자명한 일입니다.
그렇다면 게임에서의 렌더링은 어떨까요? 게임은 이야기가 달라집니다. 영화처럼 정해진 시간에, 정해진 움직임 대로만 진행되는 것이 아니기 때문이죠. 게임은 사용자의 입력과 반응에 따라 구현되는 장면이 달라지게 됩니다. 보시는 것처럼 플레이어 캐릭터는 사용자가 입력을 한 대로 움직이거나 공격을 해야 하고, 적 캐릭터들 또한 상황에 따라 그때 그때 다르게 반응을 해야 하죠. 그렇기 때문에 미리 렌더링을 해 놓을 수 없고, 매번 상황에 맞는 모습으로 렌더링을 해서 사용자에게 보여주어야 하는 것입니다. 또한 사용자가 게임을 조작할 때 불편함이 없게 하기 위해서는 이러한 렌더링이 매우 빠르게 이루어져야 합니다. 이렇듯 매번 상황에 맞게, 매우 빠른 시간으로 렌더링을 수행하여 화면에 보여주는 것을 리얼 타임, 즉 실시간 렌더링이라고 표현하죠. 만약 렌더링하는 시간이 오래 걸리게 된다면 게임이 뚝뚝 끊기거나 부드럽게 플레이 되지 않기 때문입니다. 따라서 렌더링 시간이 짧게 걸리도록 하는 최적화 작업은 꼭 필요한 것이죠.
개발자 : 그럼 제가 개발하는 게임도 렌더링만 잘되면 버벅거리지 않겠군요. 그렇다면 렌더링은 어떻게 해야 잘 하는 건가요?
전문가 : 게임을 개발할 때 렌더링이 적절하게 이루어지려면 렌더링 성능을 잘 고려해야 합니다. 동일한 렌더링 성능으로 모든 게임을 개발할 순 없기 때문이죠. 그럼 최적화된 게임을 위한 렌더링의 성능에 대해 좀 더 자세히 알아보고, 올바른 렌더링 성능의 목표치 설정 방법에 대해서도 알려드리겠습니다. 먼저, 렌더링 속도를 측정하는 척도를 FPS라고 합니다. FPS는 Frames per second, 즉, 초 당 몇 프레임을 렌더링 할 수 있는 가를 이야기하는 단위인데요, 한 장면을 렌더링 하는 시간이 오래 걸린다면 1초에 보여줄 수 있는 프레임이 그만큼 적어질 것이고, 반대로 한 장면을 렌더링 하는 시간이 짧게 걸린다면 1초에 보여줄 수 있는 프레임이 그만큼 많아지게 됩니다. 기본적으로 FPS가 높을수록 초 당 보여지는 이미지가 많아지고, 그만큼 움직임이 부드럽게 느껴지게 되죠.
게임의 렌더링 속도는 FPS 말고도 밀리세컨드로 이야기 하기도 합니다. 밀리세컨드는 1000분의 1초를 뜻하는데, 한 프레임을 그리는데 어느 정도의 시간이 걸리는지를 의미하는 단위입니다. 초당 몇 프레임을 렌더링 하는가를 의미하는 FPS와는 반대의 개념인 것이죠. 게임을 개발하는 과정에서는 FPS보다 밀리세컨드 단위를 더 많이 쓰고 있기도 합니다. 한 프레임을 렌더링 하는 시간이 얼마나 걸리는지를 따져가면서 최적화를 진행하는 것이 더 직관적이기 때문입니다. 예를 들어 60 FPS로 게임을 돌리는 것을 목표로 한다면, 한 프레임을 평균 16.6 밀리세컨드로 렌더링해야 합니다. 따라서 한 프레임을 그리는 시간이 16 밀리세컨드보다도 적게 나온다면 렌더링 성능을 좀 더 낮춰도 상관 없다는 뜻이 되죠. 이럴 때는 적 캐릭터를 하나 더 추가하거나 폴리곤을 더 추가해주는 식으로 그래픽 품질을 좀 더 높여줘도 괜찮습니다.
사실, 영화나 애니메이션의 FPS가 상당히 높을 것 같지만 꼭 그렇지만도 않습니다. 극장에서 보는 영화나 애니메이션은 24FPS에 불과하죠. 그럼에도 불구하고 영상이 끊겨 보인다거나 부드럽지 않게 느껴지지는 않습니다. 하지만, 게임은 더 높은 FPS를 필요로 합니다. 사실, 사람의 눈은 경우에 따라서 100FPS까지도 인지하죠. 다만, 이 100FPS도 일부의 사람들만 감지하고 대부분은 60FPS까지만 인지할 수 있다고 합니다. 게다가 대부분 디스플레이 장치의 주사율도 60에서 70Hz까지만 지원하기 때문에 게임에서 60FPS를 넘게 표현하는 것은 큰 의미가 없습니다. 따라서 대부분의 게임들이 60FPS를 최대 목표치로 설정해놓는 것이죠.
게임은 사용자와 인터랙션하는 콘텐츠입니다. 앞서 말씀드린 대로 영화는 정해진 영상을 순차적으로 보여주지만, 게임은 사용자의 입력에 따라 반응을 하는 콘텐츠죠. 그러다보니 영화를 시청할 때 보다 게임을 플레이할 때 사용자는 좀 더 높은 몰입도를 가지고 집중을 하게 됩니다. 이에 따라 화면 갱신 주기에 좀 더 민감하게 반응하게 됩니다. 이 때, 사용자의 입력에 따른 반응이 조금이라도 지연되면 사용자는 바로 부자연스러움을 느끼게 됩니다. 이렇기 때문에 게임은 가능한 높은 FPS로 즐길 수 있도록 해주는 것이 정말 중요하죠.
앞서 대부분의 게임들이 60FPS를 최대 목표치로 설정하고 있다고 말씀드렸지만 반드시 그래야 하는 것은 아닙니다. 물론 액션이나 슈팅같은 게임은 사용자의 입력에 즉각 반응해야 하기 때문에 60FPS를 유지시켜주어야 합니다. 하지만 퍼즐이나 턴제 RPG같은 경우에는 30FPS로 최대 목표치를 설정해도 큰 무리가 없죠. 아니면 장르와는 무관하게 FPS보다는 그래픽 품질을 선택하는 경우도 있습니다. 예를 들어, 지금 보시는 메탈기어솔리드3의 경우에는 플레이스테이션2에서 고품질의 렌더링 퀄리티를 선택하기 위해 60FPS를 포기하고 30FPS로 게임이 돌아가도록 하였죠. 엑스박스원이나 플레이스테이션4의 게임 중에서도 의외로 많은 게임들이 그래픽 품질을 높이는 대신 60FPS를 포기합니다.
사실, 게임의 최적화 방향을 결정 할 때 가장 중요한 것은 FPS를 몇으로 잡느냐가 아닙니다. 먼저 게임의 타겟 기기를 결정하는 것이 시작 단계이자 가장 중요한 단계라고 할 수 있죠. 당연히 사양이 높은 하드웨어에서는 FPS가 높게 나올 것이고, 사양이 낮은 하드웨어에서는 FPS가 낮게 나올 것입니다. 따라서 기준으로 삼아야 할 기기 혹은 하드웨어의 스펙부터 먼저 결정해야 하는 것이죠. PC의 경우, CPU 뿐만 아니라 그래픽 카드도 그 성능이 천차만별입니다. 스마트폰 역시 고가의 프리미엄 기기부터 저가의 보급형 기기까지 그 성능이 천차만별이죠.
이러한 수 많은 기기들 중 어느 성능대의 기기를 주 타겟으로 삼을 것인가에 따라 최적화의 목표가 달라진다고 할 수 있는데요, 예를 들어 남녀노소 누구나 쉽게 즐길 수 있는 캐주얼한 게임이어야 한다면 보급형 스마트폰 기기가 주 타겟이 될 것이고, 성능이 낮은 보급형 기기에서도 원활하게 플레이가 되도록 목표를 잡아야 할 것입니다. 이렇듯 최적화의 주된 의미는 타겟 기기가 결정이 되고 나면 그 기기에서 최소한의 성능 소모로 최고의 품질을 이끌어 내도록 하는 것이라고 할 수 있을 것입니다. 지금까지 이와 같이 게임에서 중요한 의미를 갖는 최적화의 필요성과 렌더링, FPS까지 다루어봤습니다. 이번 시간에 설명드린 내용을 통해 여러분이 최적화가 무엇인지 이해하고, 원활한 플레이가 가능한 게임 개발을 하는데 도움이 되셨으면 좋겠습니다. 수고하셨습니다.
01. 이 강좌에 대해서
게임을 정말 재미있게 만들었음에도 불구하고 최적화가 되어있지 않아 게임 사용자들이 게임을 즐기는데 불만을 토로한다면 안될 것입니다. 따라서 게임 개발에 있어서 최적화가 무엇인지, 그리고 최적화가 어떻게 이루어지는 지에 대한 내용을 알아보는 것은 중요한 일입니다. 이를 위해 게임개발 시 최적화 작업 진행을 어디서부터 시작해서 어떤 방향으로 나아가야 할 지를 알아보고자 합니다.
02. 강사 소개
오지현 (유니티 코리아 엔지니어)
03. 강사 이력
- 유니티 테크놀로지스 코리아 필드엔지니어 - 경력 : ㈜나코인터렉티브_게임 클라이언트 프로그래머, ㈜아스텔_ DVR 장비 S/W 개발, ㈜마이에트엔터테인먼트_게임 엔진 개발, 유니티 테크놀로지스 코리아_필드엔지니어