모바일 게임 및 개발 속도를 향상시키는 DOTS

Tic Toc Games가 새로운 데이터 지향 기술 스택(DOTS)을 통해 성능을 크게 개선한 비결

Tic Toc: Unity 개발자 사례 연구

방대한 양의 게임 그래픽 컴포넌트를 추가하면서 개발 속도를 단축하고 사용자 경험을 개선하려면 어떻게 해야 할까요? Tic Toc Games는 엔티티 컴포넌트 시스템(ECS), C# 잡 시스템, 버스트 컴파일러를 포함하는 유니티의 고성능 데이터 지향 기술 스택(DOTS)을 활용하여 배터리를 필요 이상으로 소모하거나 기기를 과열시키지 않고 모바일 기기에서 60FPS 성능을 실현했습니다.

  • 프로젝트

    데이터 지향 소프트웨어 디자인 접근 방식 구현  

  • 목표

    멀티스레딩 성능 개선 및 기기 전력 요구 사항 간소화

  • 플랫폼

    iOS, Android, Xbox One, PS4, Steam, Nintendo Wii U eShop

  • 팀원 수

    최대 40명(Unity 개발자 5명)

  • 위치

    캘리포니아 버뱅크

Tic Toc Games는 통합 게임 개발사로, 수상 경력에 빛나는 인터랙티브 제품에 참여한 경력이 있는 숙련된 아티스트, 디자이너, 프로그램, 프로덕션 매니저로 구성되어 있습니다. Tic Toc Games는 플레이어들이 게임을 하는 동안에는 게임을 즐기고, 게임을 하지 않을 때는 게임을 생각하고, 친구들과 게임에 대한 열정을 공유하고, 게임을 계속할 수 있기를 바랍니다. Tic Toc Games는 2011년 게임 제작을 시작할 때부터 Unity를 사용했습니다.

다른 게임 회사와 마찬가지로 Tic Toc은 코드의 성능을 개선하면서 디자인 반복 속도를 향상시키는 방법을 항상 찾고 있습니다. Tic Toc의 수석 프로그래머 Smith는 이를 "더 빠르게 더 나은 게임을 만들어야 합니다."라고 설명합니다. Smith는 오랫동안 Unity를 사용해 왔으며 Unity 2018.x 버전의 주요 신규 기능 중 특히 강력한 기능을 발견했습니다.

Match 3 및 Collapse 게임 등 여러 개의 참신한 게임이 2019년 출시 예정됨에 따라 Smith는 ECS 교육에 팀의 중점을 두었습니다. Smith는 "ECS를 통해 작업하면 직원들이 지금까지 했던 것과는 코딩 방법이 완전히 다릅니다."고 말했습니다. "데이터 지향 프로그래밍은 교육 기관에서는 많이 가르치지 않으므로 그야말로 패러다임의 전환이었습니다. 우리도 새로운 것을 시작하는 데 약간의 두려움이 있었습니다." 하지만 ECS를 통해 이룬 성과를 통해 직원들은 확신을 가지게 되었습니다.

성과:

  • CPU 과열 없이 모바일 기기에서 60FPS 실행
  • 테스트 워크플로우 효율성 향상
  • 반복 횟수 감소 및 문제 해결/디버그 감소
  • 기기 배터리 수명 연장
Tic Toc, DOTS를 도입

성능과 생산성을 크게 향상시키기 위해 Tic Toc은 ECS(엔티티 컴포넌트 시스템), C# 잡 시스템, 버스트 컴파일러를 포함하는 Unity의 새로운 DOTS(데이터 지향 기술 스택)의 주요 컴포넌트를 구현했습니다.

객체가 아닌 데이터를 지향하는 ECS

ECS는 객체 지향 코딩을 게임 애플리케이션의 다양한 부분에 더욱 적합한 데이터 지향 접근 방식으로 대체합니다. ECS는 프로세싱에서 데이터를 분리하여 막대한 양의 데이터 분산을 제거하고 이벤트를 순차적으로 진행하지 않아도 되므로 진정한 멀티스레딩을 구현합니다.

예를 들어 총알과 플레이어라는 두 종류의 엔티티가 있다고 가정하겠습니다. 각 엔티티에는 포지션, 스폰, 체력 데이터와 같이 서로 다른 속성에 대한 레퍼런스가 있습니다. 엔티티와 속성은 함수가 연결되지 않은 순수한 데이터입니다. 시스템은 총알에 동작 시스템을, 플레이어에 스폰 시스템을 적용하는 것처럼 엔티티에 함수를 적용합니다. 이러한 데이터와 함수의 분리를 통해 Unity는 여러 개의 코어에서 병렬로 처리할 수 있는 작업을 생성합니다. 유니티의 글로벌 에반젤리즘 컨텐츠 수석인 마이크 가이그는 이를 "알고 보면 매우 쉽게 이해할 수 있다"고 설명합니다.

ECS는 많은 이점을 제공합니다. 데이터의 구성 방식을 통해 "퍼포먼스 바이 디폴트"라는 태그라인에 걸맞게 최적화된 코드를 더욱 간편하게 작성할 수 있습니다. 스미스는 "ECS가 제공한 기능을 통해 개선된 알고리즘을 만드는 방법을 파악할 수 있다"고 밝혔습니다. 또한 ECS 코드는 재사용성이 우수하고, 아키타입(고유 엔티티)는 메모리에 긴밀하게 탑재되며, 무엇보다도 ECS는 더 많은 CPU 코어를 활용할 수 있습니다. 오늘날의 주류 CPU에는 최대 4-6개의 물리적 코어와 8-12개의 논리적 코어가 있고, "열성적인" 게이머용 CPU에는 최대 16개의 물리적 코어와 32개의 논리적 코어가 있습니다. 대부분은 사용되지 않지만, DOTS는 이 코어를 전부 활용합니다.

5부로 구성된 마이크 가이그의 엔티티 컴포넌트 시스템(ECS) 및 C# 잡 시스템 소개를 시청하세요.

C# 잡 시스템과 협업

팀의 데이터 지향 ECS 코드와 Unity의 C# 잡 시스템을 결합하여 Tic Toc은 멀티코어 프로세싱 및 멀티스레딩을 획기적으로 활용할 수 있었습니다. 경쟁 상태(예측되지 않은 순서로 실행되는 스레드로 인해 예측되지 않은 결과 발생)로 인해 제약 사항이 추가되고, 지속적인 컨텍스트 교체가 비효율적이기 때문에 스레드 안전 코드를 작성하는 것이 어렵습니다.

하지만 잡 시스템은 위의 모든 작업을 관리하여 Tic Toc 개발자는 게임별 코드에 집중할 수 있습니다. Smith는 "잡을 통해 시스템이 여러 개의 스레드에서 실행되고 CPU의 서로 다른 코어를 사용할 수 있습니다. 이전에는 이 프로세스를 수행하기가 매우 어려웠습니다. 하지만 ECS와 잡 시스템을 이용하면 나머지 코어를 거의 100% 활용하므로 효율성이 크게 향상됩니다."라고 말했습니다.

하드웨어와 직접 소통하는 버스트 컴파일러

새로운 버스트 컴파일러는 LLVM 기반의 수학 인식 컴파일러 기술로 C# 잡을 기반으로 타겟 플랫폼의 특정 기능을 위해 고도로 최적화된 머신 코드를 생성합니다. Tic Toc의 경우, 이를 통해 Smith의 팀은 성능 문제를 해결하기 위해 복잡한 하위 수준 코드를 다시 학습하고 생성하는 데 시간을 소요하지 않아도 됩니다.

"버스트 컴파일러를 통해 ECS로 수행 중인 작업에 대해 예측할 수 있었고 그 결과 작업 속도가 크게 향상되었습니다. 일부 반복 작업의 경우 속도가 30배 가량 향상되었으며, 이는 특히 동일한 프레임 내에서 반복이 여러 번 발생할 경우에 그러했습니다."라고 Smith는 말했습니다.

Smith의 팀은 대형 시스템이 상호작용할 때 버스트 컴파일러가 일반적으로 QA에서 해결하곤 하는 통합 버그를 상당수 제거한다는 사실을 발견했습니다. "버스트 컴파일러를 통해 수작업으로 조정한 어셈블러 코드를 복잡한 작업 없이 여러 플랫폼에서 활용할 수 있습니다."라고 Smith는 덧붙였습니다.

기타 스튜디오를 위한 DOTS 조언

Tic Toc은 처음에는 시험삼아 데이터 지향 접근 방식으로 전환했지만, 막상 해보니 흥미로운 경험이었습니다. "ECS를 파악하고 나니 그 다음부터는 간편했습니다. 제 생각에는 이제 스튜디오 내의 모든 직원들이 ECS를 이해하고 마음에 들어하고, 앞으로 모든 게임을 ECS로 만들 것입니다."라고 Smith는 말합니다.

Smith는 다른 스튜디오에 다음과 같이 유용한 조언도 남겼습니다. "처음부터 ECS에 '전부 투자'할 필요는 없습니다. 순차적으로 도입할 수 있고, 작은 것부터 시작해도 성능을 크게 개선할 수 있습니다. 코드 재사용이 특히 그렇습니다."

또한 Smith는 본격적인 프로덕션으로 진행하기 전에 프로토타입 프로젝트를 수행할 것을 권장합니다. "게임잼, 테트리스, 틱택토와 같이 간단한 것부터 시작하세요. 무엇이든 상관없습니다. 우선 ECS로 게임을 완성해 본 다음 본격적인 프로덕션에 착수하세요. 한 번의 경험으로 많은 것을 배울 수 있습니다."

마지막으로 Smith는 Tic Toc의 플레이어들이 기대하는 성능을 제공할 수 있다는 사실에 기뻐합니다. "스크린에 나타나는 어떤 장면이든 관계없이 약 60FPS로 실행되는 새로운 게임을 통해 완전히 새로워진 경험과 성능을 실제로 느낄 수 있을 것입니다. 향상된 게임플레이와 반응을 매우 마음에 들어할 것입니다!"

Garth Smith, Lead Programmer, Tic Toc Games

"Unity의 ECS(엔티티 컴포넌트 시스템)을 사용하면 우수한 성능뿐 아니라 코드 재사용 및 모바일 기기 배터리 수명 보존과 같은 커다란 이점도 누릴 수 있습니다."

Garth Smith, Lead Programmer, Tic Toc Games

ECS를 모바일 게임 개발에 활용할 때의 이점

ECS로 모바일 게임을 더 빠르게 개발하고 버그를 줄이며 더 긴 배터리 수명을 보장하는 비결을 확인해 보세요.

Listen to DOTS early-adopter Garth Smith share his experience with Unity’s new data-oriented approach.

Tic Toc이 모바일 퍼즐 게임에 ECS를 사용하는 방법

유나이트 LA에서 Tic Toc은 "We Love Performance"라는 제목의 세션을 진행했습니다. 이 강연에서 Garth Smith는 ECS를 통해 반복 속도를 향상시킨 방법과 Unity의 ECS(엔티티 컴포너트 시스템)를 통해 전반적인 환경을 개선한 방법을 설명합니다. 

퍼포먼스 바이 디폴트

유니티의 새로운 고성능 멀티스레드 시스템을 통해 멀티코어 프로세서를 최대한 활용하세요.

Unity에서는 최적의 웹사이트 경험을 제공하기 위해 쿠키를 사용합니다. 자세한 내용은 쿠키 정책 페이지를 참조하세요.

확인