[▲'와들와들 펭귄즈' 트레일러 영상]


어미펭귄을 향해 가는 어린 펭귄들의 길을 만들어주는 것을 목적으로 하는 모바일 게임 '와들와들 펭귄즈(Waddle Waddle Penguins)'가 지난 6월 12일 앱스토어를 통해 출시되었다.

이 게임을 출시 전부터 부산게임아카데미의 김성완 교수가 가족과 함께 개발한 것으로 알려져 사람들에게 많은 주목을 받기도 했다. 게임의 컨셉은 단순하나, 이 게임의 매력은 다른 곳에 있다. 바로 물 표현 방식이다.

스테이지를 클리어하기 위해서는 어린 펭귄들이 부모 펭귄에게 안전하게 이동할 수 있도록 '물'을 이용해 얼음을 녹이거나 길을 만들어야 한다. 물은 차가운 물과 뜨거운 물 두가지가 있으며, 이를 통해 물을 얼려 길을 만들거나 얼음을 녹여 길을 만들어야 한다.

이 때 사용되는 물은 다수의 입자로 처리되면서도 한 덩어리처럼 보이게 하는 정교한 랜더링 방식을 통해 제작되었다. 어떻게 게임 내에서 물을 표현했는지를 설명하기 위해 김성완 교수는 KGC2013에서 'SPH 기법을 이용한 2D 물 물리 엔진 개발'이라는 강연을 개최했다.

[▲ '와들와들 펭귄즈'를 개발한 김성완' 교수]

총 개발기간 6개월이 소요된 '와들와들 펭귄즈'는 가족들의 다양한 아이디어를 수렴해 제작한 타이틀로 게임 내 가미된 펭귄들의 소리는 김성완 교수의 자녀들이 직접 녹음했다고 한다. 황제펭귄의 생태를 기반으로 게임이 개발되었으며, 첫 컨셉에서 점차 심플하게 캐릭터가 변형되어 최종 캐릭터 외형이 결정됐다.

그가 생각한 '와들와들 펭귄즈'의 최종 컨셉은 기술과 아이디어, 감성이 한 곳에 어우러진 게임을 만들자라는 것. '레밍즈' 아이디어로부터 영감을 받아 제작된 '와들와들 펭귄즈'에서는 물총으로 물을 쏘아 길을 창조해 나간다.

물은 일상에서 쉽게 접하는 수도물부터 바다까지 다양한 형태로 존재한다. 가열하면 수증기가 되어 기체화된다. 즉, 물은 액체와 기체를 합쳐서 지칭하는 '유체'라고 할 수 있다. 물은 변형이 쉽고, 흐르는 성질이 있으며, 모양이 정해져 있지 않다.

본격적인 강연에서는 물 물리 엔진에 대한 소개과 유체 시뮬레이션 및 물을 입자로 다루는 SPH 기법, Signde Distance Field를 이용한 물과의 충돌 처리, 얼음이 얼고 녹는 물의 상 변화 처리 방식 등 '와들와들 펭귄즈'를 개발하면서 사용된 물리 기법에 대한 전반적이 소개가 이루어졌다.

유체 시뮬레이션에는 SPH기법이 사용됐다. SPH기법이란 1970년대 말에 천문학 분야에서 성운이나 은하계를 시뮬레이션 하기 위해 고안된 입자 기반의 유체 시뮬레이션 기법을 말한다. 21세기에 와서는 이 기법이 CG나 게임에서 물을 표현하는데 주로 활용되고 있다.

은하계를 시뮬레이션 하기 위한 SPH기법은 은하계를 구성하는 수천억 개의 별을 십만 개로 대신 시뮬레이션 하게 된다. 이러한 방식이 그대로 물에 적용되어 이루어지는 것. 물 역시 1g에 약 3.35X10^22개의 어마어마한 분자로 구성되어 있기 때문에, SPH기법을 통해 이를 수십만 개 혹은 수백 개로 대신 시뮬레이션 했다고 그는 말했다.

[▲SPH 기법의 속살을 잘 보여주는 영상]


영상에서와 같이 가까이 이웃한 입자 간의 상호작용을 처리하기 위해서 입자들의 위치 관계를 빠르게 검색해야 하며, 이를 적절하게 처리해야 액체의 점성이나 비압축성을 표현할 수 있다.

또한, 스무딩 커널 함수를 통해 적은 입자 수로 천문학적으로 많은 입자의 연속체 적인 값을 근사할 수 있다. 시뮬레이션의 품질과 안정성, 속도는 커널 함수의 선택에 크게 의존한다고 볼 수 있다.

시뮬레이션의 계산은 총 7가지의 과정을 거친다. 우선 중력을 적용하고 이웃 검색으로 점성을 계산, 속도에 점성을 적용한다. 나아가 밀도와 압력을 계산하고 압력을 적용한 후 충돌을 처리한다. 그리고 일련의 과정을 반복하는 방식으로 진행된다.

"유체 시뮬레이션과 관련된 동영상들은 유튜브에서 쉽게 찾을 수 있습니다. 온전하게 잘 동작되는 모습을 볼 수 있으며, 소스까지 공개되는 경우도 적지 않게 있죠. 학술 논문도 바로 코딩할 수 있을 정도로 상세하게 실려있는 것도 있고요. 하지만 실제로 유체 물리 엔진을 제대로 만들기는 매우 어렵습니다"

그는 유체 물리 엔진을 만드는 일은 생각보다 매우 어려운 작업이며, '와들와들 펭귄즈'를 위한 물 물리 엔진 테스트를 하면서 많은 시행착오를 겪었다고 말했다. 이와 더불어 개발 당시 물 물리 엔진 테스트를 했던 동영상을 공개했다.

[▲'와들와들 펭귄즈'를 위한 물 물리 엔진 테스트 동영상]


논문에서 공개된 코드를 실제로 동작하는 코드로 옮기는 겨우 돌아가기는 하나 실질적인 사용에 있어서는 많은 튜닝이 필요하다고 그는 말했다. 강체 물리 엔진의 경우 상업적인 엔진이 아닌 공개 엔지이라 해도 별도의 튜닝이 필요 없을 정도로 실행되나, 유체 물리 엔진의 경우 아직 범용적으로 이용할 수 있는 것이 드물다.

나아가 이러한 개발이 모바일 게임에 적용되는 경우 더 많은 제약과 어려움이 동반된다. 최신 쿼드코어 스마트폰이라고 해도 데스크탑에 비해 성능이 떨어지기 때문에 유체를 시뮬레이션 하기에는 벅차다. 따라서 모바일 환경에서 안정적으로 돌아가는 유체 물리 엔진을 위해서는 많은 최적화와 튜닝이 필요한 것.

이에 대해 김성완 교수는 구글링을 통한 선행 연구 사례를 많이 참조하는 것이 도움될 것이라고 말했다. 더불어 지구과학 내 기상학을 전공하면서 진행했던 강우 현상 시뮬레이션이나 화산재 확산 시뮬레이션 등의 연구경험 역시 도움이 되었다고 덧붙였다.

강체물리 엔진인 Box2d로도 유체 시뮬레이션을 이행할 수는 있다. 입자를 원 모양의 다각형 강체로 하여 적절한 충돌 계수와 마찰 계수를 주면 된다. 하지만 Box2d를 통해 시뮬레이션을 할 경우, 물이 쏟아지거나 튀는 모습은 비슷하게 표현할 수 있으나, 점성이 있는 액체를 표현하기는 어렵다.

유체 입자를 단순한 점으로 다루는 SPH와는 달리 Box2d에서는 원형의 다각형 강체로 처리하기 때문에 충돌이나 마찰 처리 등에 많은 비용이 들게 된다.

유체 시뮬레이션에 이어 그는 물의 렌더링 작업에 대해 설명을 이어갔다. SPH 기법의 경우 물을 입자로 시뮬레이션 하기 때문에 그대로는 물처럼 보이지 않는다. 물 입자들이 서로 연속된 덩어리로 보이게 해야하며, 이에 2D 메타볼 렌더링 기법을 활용했다.

마지막으로 물의 상변화에 대한 발표가 이루어졌다. '와들와들 펭귄즈'에서 얼음이 얼고 녹는 건 게임의 핵심 아이디어다. 그는 처음에는 얼음 영역에 물이 충돌하면 얼음 타일로 교체되는 식으로 단순하게 구현할 계획이었으나, 이후 '픽셀정크 슈터(Pixel Junk Shooter)'라는 게임을 하면서 욕심을 내게 되었다고 한다.


이에 물을 뜨거운 물과 미지근한 물, 차가운 물과 녹은 물, 얼음1, 얼음2로 게임 내 도입했다. 이러한 물은 물총을 통해 게임 내에서 사용할 수 있으며, 차가운 물을 발사하는 물총과 뜨거운 물을 발사하는 물총 2가지로 구현됐다.

차가운 물의 경우, 얼음 영역에 닿으면 얼음으로 변해버린다. 시간이 지나면 해당 얼음은 다시 녹으며 다시 차가운 물로 변한다. 그러나 이후 다시 얼 수 있는 성격을 가진다. 뜨거운 물의 경우 기존의 얼음을 녹이며, 이후 미지근한 물이 되어버린다. 이 물은 더이상 식지 않고 그대로 존재하게 된다.

게임 내에서 얼음이 어는 것은 물 입자가 이동하면서 충돌 맵 상태를 읽고, 해당 부분이 얼음 영역이면 일정 확률로 물 입자에 얼음 속성이 부여된다. 얼음 속성이 부여된 물 입자는 물리 엔진에서 역학적 처리를 중지 시키며, 이에 서서히 멈추면서 얼음이 되는 것이다.

반대로 시간이 경과되어 녹는 얼음의 경우 물 입자 속성을 '녹은 물'로 만들고, 다시 역학적 처리를 재개하도록 한다. 이렇게 녹은 물은 얼음 영역에 있더라도 다시 얼음 속성이 되지 않으며, 그 영역을 벗어나면 차가운 물 속성이 된다.

이러한 일련의 과정을 거쳐 최종 버전 '와들와들 펭귄즈'가 탄생되었으며, 유저들은 게임을 통해 생동감 있는 물의 움직임과 얼고 녹는 물의 속성을 엿볼 수 있다.

[▲'와들와들 펭귄즈' 최종 버전 게임 플레이 영상]



■ 'SPH 기법을 이용한 2D 물 물리 엔진 개발' 강연 PPT