Unity 검색

2D Pixel Perfect를 이용한 2D 게임, Skul: The Hero Slayer

2021년 1월 21일 테크놀로지 | 9 분 소요
다루는 주제
공유

2D Pixel Perfect는 크리에이터가 다양한 크기와 규모의 수많은 최신 기기에서 픽셀을 또렷하고 명확하게 표현하는 작업을 더 쉽게 할 수 있도록 지원합니다. 이번 포스팅에서는 사우스포게임즈(SouthPaw Games) 팀이 첫 픽셀 아트 게임인 Skul: The Hero Slayer(이하 ‘Skul’)를 개발하는 과정에서 유니티의 여러 가지 2D 툴을 활용한 경험을 공유합니다.

사우스포게임즈는 많은 기대와 호평을 받은 로그라이트 게임, Skul을 제작하는 과정에서 2D Tilemaps, Pixel Perfect, Sprite Atlas를 활용했습니다.

Skul의 탄생 배경

Skul: The Hero Slayer는 플레이마다 게임의 구성 요소가 달라지는 2D 로그라이트(rogue-lite) 게임이자 스컬이라는 이름의 꼬마 스켈레톤 전사가 등장하는 플랫포머 액션 게임입니다. 이 게임에서 스컬은 인간에게서 마왕을 구해내기 위해 용사, 모험가, 제국군에 홀로 맞서 싸워야 합니다.

8명으로 이루어진 인디 팀인 사우스포게임즈는 전남대학교의 게임 개발 동아리 회원들이 모여 2017년에 설립되었습니다. 팀은 Unity 3.0을 시작으로 줄곧 Unity를 이용하여 게임을 만들었으며, Skul은 사우스포게임즈의 첫 픽셀 아트 프로젝트입니다.

Skul은 별의 커비, 록맨 시리즈와 같은 유서 깊은 플랫포머 게임의 영향을 받아 적을 흡수하거나 보스를 처치하여 얻은 능력치를 활용할 수 있으며, 다양한 특성과 기술을 갖춘 여러 캐릭터와 빠르고 호쾌한 전투를 즐길 수 있습니다.

게임의 디렉터이자 애니메이터인 박상우(일명 PAW) 대표는 프로그래머 4명, 배경 아티스트 2명, 캐릭터 아티스트 1명과 함께 작업하고 있습니다.

Skul 팀은 2021년 상반기 공식 출시를 위해 게임을 꾸준히 업데이트하고 있습니다. 현재 스팀에서 얼리 액세스로 제공되는 Skul은 매우 긍정적인 리뷰를 받았으며, Skul 팀과 인터뷰한 당시 이미 70만 명 이상이 Skul을 찜 목록에 추가했습니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

2D Pixel Perfect를 활용한 비주얼과 설정

사우스포게임즈는 Skul 개발에 최신 LTS 버전인 Unity 2019.4 LTS와 그래픽에 Universal RP 8.10을 사용했습니다.

2D Pixel Perfect 패키지는 URP 패키지의 2D Renderer와 함께, 또는 패키지 관리자를 통해 제공됩니다. 이 패키지에는 Pixel Perfect Camera 컴포넌트가 포함되어 있어 다양한 해상도에서 픽셀 아트를 또렷하고 선명하게 표현할 수 있고, 픽셀 그리드 패턴에 따라 오브젝트를 동작, 회전 및 확대/축소할 수 있습니다. 또한 해상도 변경에 따른 뷰포트의 배율을 조정하는 데 필요한 모든 계산을 자동으로 수행합니다.  

픽셀 아트 작업의 핵심은 바로 게임의 모든 에셋에서 해상도를 일관되게 유지하는 것인데, Skul 팀은 이 사실을 개발 시작 단계에서 이미 인지하고 있었습니다. 박상우 대표는 “사전 제작 단계에서 레퍼런스 해상도를 너무 크게 잡은 나머지 그래픽 리소스가 지나치게 디테일해져서 결국 모든 그래픽 리소스를 다시 만들어야 했다”고 밝혔습니다.

Skul 팀은 최종 타일맵 그리드를 타일당 32x32픽셀로 만들고 32PPU(단위당 픽셀)로 설정하여 게임상 거리 1이 타일 한 개가 되도록 구성했습니다.

Pixel Perfect Camera 컴포넌트와 게임 오브젝트의 스프라이트 렌더러 설정

이 게임의 레퍼런스 해상도는 640x360 픽셀이었으며, 배경의 최대 높이는 400픽셀로 설정했습니다. Skul 팀은 다양한 사양의 PC에서 게임을 테스트했으며 게임 뷰를 통해 모든 해상도에서 그래픽이 또렷하게 유지되는지 확인했습니다.

Pixel Perfect Camera는 레퍼런스 해상도에 정수를 곱하여 최신 기기의 화면에서도 뛰어난 화질을 유지하고, 사용자의 선호도에 따라 검은색 띠를 표시하거나 뷰 포트를 확장하여 전체 화면을 표시합니다.

Skul 팀은 최대한 효율적인 제작을 위해 실제로 제작될 그래픽과 동일한 비율로 대략적인 버전을 만들어 기본적인 모양과 색상을 확인했습니다. 이어 컨셉 아트 단계에서 아이디어를 공유하고 함께 논의했습니다(1번 이미지). 캐릭터가 확정된 후에는 애니메이션을 기획하고 2과 같이 키프레임을 스케치합니다.

3번 이미지에서는 움직임과 크기를 확인할 수 있도록 프로토타입을 제작하고 캐릭터의 능력과 스킬을 프로그래밍하기 시작합니다. 마지막으로 애니메이션을 만들기 위해 4과 같이 AnimationImporter라는 플러그인을 사용하여 Aseprite에서 작업한 에셋을 Unity로 가져옵니다.

그 밖에도 핵 앤 슬래시(hack and slash) 액션 효과와 같이 Skul의 호쾌한 느낌을 연출하는 요소가 많습니다. 적을 처치했을 때 해당 적의 갑옷이나 무기 등의 오브젝트를 튀어 오르게 하는 연출은 2D 물리로 실감나게 구현했습니다.

박상우 대표는 “이런 오브젝트를 내부에서는 ‘Parts’라고 부릅니다. 각 Parts의 생성(spawn) 위치를 스프라이트에서 보이는 위치와 동일하게 하여 Parts가 적에게서 떨어져 나오는 것처럼 보이게 했습니다. 또한 플레이어는 Parts를 때려서 넉백(knockback)시킬 수 있으며 각 Parts는 고유한 무게와 회전력을 가져 현실적인 느낌을 더합니다”라고 설명했습니다.

오브젝트 회전에 대해 팀은 Unity를 이용하여 하나의 스프라이트를 직접 회전시킬 때도 있지만, 회전된 각도에 대한 스프라이트를 하나하나 만들어서 시퀀스 애니메이션으로 연출하기도 했습니다.

“회전된 각도에 따라 모든 스프라이트를 만들면 의도한 대로 비주얼을 구현하여 확실히 품질은 좋아지지만 그만큼 비용도 높아집니다. 스프라이트를 회전시켜야 할 경우에는 해당 스프라이트의 비주얼과 역할 등을 신중하게 고려하여 회전 방법을 결정합니다.”

2D 타일맵 에디터를 활용한 레벨 설계

월드의 타일맵은 Terrain, Terrain Foothold, Platform으로 분류됩니다. Terrain은 플레이어가 통과할 수 없는 지형이고, Terrain Foothold는 플레이어가 통과할 수는 없지만 올라갈 수 있는 지형, Platform은 낮은 곳에서 위로 올라가거나 아래로 점프해서 내려가는 등 다양하게 상호작용할 수 있는 지형입니다. Skul 팀은 Tile 클래스를 상속해서 해당 타일 종류를 구분하고 설정할 수 있도록 스크립트도 만들었습니다.

“타일맵 팔레트를 이용하여 타일을 생성하고 타일 팔레트에서 제공하는 다양한 기능을 유용하게 활용했습니다. 또한 Tilemap Collider 2D를 하나의 Polygon Collider 2D로 바인딩하여 콜라이더를 최적화했습니다”라고 박상우 대표는 덧붙입니다. 

타일 팔레트를 사용하여 Skul 팀은 시각적이고 직관적으로 맵을 만드는 한편 API를 완전히 제어할 수 있었으며, <u><a href="https://docs.unity3d.com/2020.2/Documentation/Manual/class-CompositeCollider2D.html">Composite Collider</a></u> 컴포넌트로 콜라이더도 최적화했습니다.

성능, 효율성, 기타 유용한 팁

Sprite Atlas

스프라이트 아틀라스만 사용해도 성능은 크게 개선되었는데, 이를 통해 Skul 팀은 동일 맵에 존재하는 스프라이트를 패킹하여 드로우 콜을 줄일 수 있었습니다.

초기 단계에서는 드로우 콜과 메모리 사용량을 최적화하는 데 시간을 집중 투입했습니다. 이후에는 1~2fps(초당 프레임)의 성능 개선에 몰두하기보다 게임을 더 재미있게 만드는 데 집중하기로 했으며, 테스터와 팀원들에게 편리한 프로젝트 구조를 만드는 데도 시간을 투자했습니다.

박상우 대표는 “2D 게임 특성상 높은 시스템 요구 사양이 필요하지 않았습니다. 어느 정도 게임 성능이 최적화된 이후에는 스마트폰에서도 문제 없이 게임을 구동할 수 있었습니다” 라고 말합니다.

VFX는 피벗을 중앙에 고정한 상태로 애니메이션 스프라이트 주변에 여백을 늘려 애니메이션을 만들 때 각 프레임을 적절한 위치에 더 쉽게 배치할 수 있습니다.

Physics 2D

정적(static) 오브젝트와 동적(dynamic) 오브젝트 사이의 충돌에는 2D 물리가 사용되었습니다. 파편 효과와 같은 시각적 연출에 사용되는 동적 충돌의 경우 2D 물리의 정확도 설정을 낮춰도 게임 플레이에 직접적인 영향을 미치지 않습니다. 플레이어의 이동과 같이 게임 경험에 직접적인 영향을 끼쳐 높은 정확도가 요구되는 요소의 경우 2D 레이캐스트와 콜라이더 캐스팅 같은 기능을 사용하여 일부 게임 로직을 계산하기도 했습니다.

기타 유용한 팁

사우스포게임즈는 Unity 에디터 확장 기능을 사용하여 코드를 수정하지 않고도 게임 구현에 필요한 대부분의 기능을 편집하고 사용할 수 있게 했으며, 테스트가 빠르고 효율적으로 이루어질 수 있도록 하였습니다. Unity 프로파일러도 CPU 병목을 식별하는 데 중요한 역할을 담당했으며, 프레임 디버거를 이용해 드로우 과정을 확인하여 툴에서 얻은 정보를 기반으로 게임을 꾸준히 개선해 나갈 수 있었습니다.

리소스를 절약하는 방법의 일환으로 다음과 같은 작업을 했습니다.

  • 시각적 효과를 잘게 쪼개서 다양한 결과를 도출하기 위해 여러 가지 파트를 섞었습니다.
  • Unity로 크기, 각도, 색조 등의 속성을 변경하여 새로운 효과처럼 보이게 만들었습니다.
  • URP와 2D 렌더러에서 제공하는 기본 셰이더는 불필요한 기능을 제거하여 사용했습니다.

다른 2D 툴과 커스텀 확장 프로그램

프로젝트가 시작된 후에 출시되어서 활용하지 못했던 2D 툴 중에서 Skul 팀은 특히 2D Sprite Shape와 2D Lights, Sprite Tools에 대한 기대감을 드러냈습니다.

“이런 기능들은 직접 구현하기에는 너무 복잡하고 최적화하기도 힘든데, 외부 툴을 사용하자니 100% 믿음직스럽지 못합니다. 또한 일부 툴은 Job System을 이용해 굉장히 최적화가 잘 되어 있는 것으로 알고 있습니다. 이런 기능이 공식적으로 제공된다면 사용하지 않을 이유가 없습니다.”

2D 게임의 팬이기도 한 Skul 팀은 2D 툴을 공개하고 꾸준히 업데이트해 온 유니티의 노력에 반색을 표했습니다.

Skul 팀은 아티스트가 코드를 변경할 필요 없이 게임에서 반복 작업을 수행할 수 있도록 에디터 확장 기능을 사용했으며, 2D 툴이 제공하는 여러 API도 활용했습니다.

프레임 바이 프레임 애니메이션을 사전 시각화하는 <u><a href="https://anchan828.github.io/editor-manual/">SpriteAnimationPreview</a></u>는 아티스트가 편리하게 사용할 수 있는 확장 프로그램 중 하나입니다.

또 다른 유용한 툴로는 프리셋 시스템이 있는데, 이 툴을 사용하면 임포트한 에셋의 사전 정의된 설정을 로드할 수 있으며 이는 게임 아이템과 캐릭터를 일관된 방식으로 만드는 데 유용합니다.

Skul팀은 프로젝트의 폴더를 찾는 데 소요되는 시간이 많다는 점을 깨닫고 시간을 절약하기 위해 단축키를 만들었습니다. Skul의 무기 시스템에는 관련 정보가 포함된 새 프리팹과, 클릭하면 플레이어의 포지션에 아이템을 드롭하는 시스템을 만들 수 있는 옵션이 있습니다.

수상 내역과 유니티 클리닉 서비스

Skul 팀은 글로벌 인디 게임제작 경진대회(GIGDC)에 참가하여 Skul을 최초로 선보였으며, 대상을 수상하며 부상으로 유니티 코리아에서 제공하는 유니티 클리닉 서비스를 받았습니다. 유니티 코리아에서 서비스 팀을 광주로 보내 클리닉을 진행하며 개발 팀에 피드백을 제공하고 사전 진단을 통해 프로젝트를 검토하고 성능 테스트를 함께 진행했습니다. 또한 이때 유니티 클리닉 프로그램 팀에게 기본적인 프로파일링 방법도 배웠습니다.

Skul 팀은 향후 계획에 대해 Skul의 정식 출시는 긴 여정에서 거치는 하나의 과정에 불과하다고 말합니다. 앞으로도 플레이어와 소통하며 모두가 원하는 엔터테인먼트로서 Skul을 완성할 때까지 계속해서 게임을 업데이트할 예정입니다.

스팀 커뮤니티, Discord, Twitter에서 Skul 팀과 직접 소통할 수 있습니다.

Unity의 더 다양한 2D 지원

유니티는 툴 간 전환을 줄이고 생산성을 높이며 모든 플랫폼에서 멋진 2D 월드를 구현할 수 있도록 2D 워크플로에 최적화된 기본 툴을 제작합니다. 2D 툴 페이지에서 최신 툴을 알아보세요.

픽셀 아트에 관심이 있으신가요? 진정한 레트로 8비트16비트 그래픽을 구현하는 방법에 관한 가이드를 읽어보세요.

더 많은 2D 픽셀 아트, 성능, 생산성 팁은 아래의 Unite Now 세션을 확인하시기 바랍니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

2021년 1월 21일 테크놀로지 | 9 분 소요
다루는 주제