DOTS로 미래형 Megacity를 모바일에서 구동

Nordeus - Unity 개발자 사례 연구

Unity 커뮤니티 이벤트에서 공개한 Megacity처럼 입이 떡 벌어질 만한 데모를 구현한 이유는 무엇일까요? 그저 보기에만 근사해 보이는 것일까요, 아니면 Unity 개발자가 실질적으로 얻을 수 있는 이점이 있을까요? 세르비아 베오그라드에 본사를 둔 Nordeus는 협력 스튜디오로서 여러 유나이트 개발자 콘퍼런스에서 자사의 히트작을 시연하고 있습니다. 이러한 최첨단 기술로 가득한 동영상은 그저 과시용이 아니라, 창조적인 작업과 프로그래밍에서 얻을 수 있는 이점을 획기적으로 변화시킬 Unity의 새로운 기능을 보여주기 위한 것입니다.

프로젝트

”퍼포먼스 바이 디폴트”와 관련한 최근 소식 소개 / DOTS 이니셔티브

목표

모든 Unity 개발자를 위한 멀티스레드 코드 성능 향상

플랫폼

Android, iOS, PC

팀원 수

Megacity 팀 3명, Battle Demo 팀 20명

위치

세르비아 베오그라드

데이터 지향 DOTS 코딩을 통해 모바일에 Megacity를 빠르게 적용

CPU에 점점 더 많은 수의 코어가 필요해짐에 따라, 고성능 멀티스레딩은 모든 최신 컴퓨팅 엔진에서 필수적인 기능으로 자리 잡았습니다. 여러 코어와 스레드를 지원하는 Unity의 솔루션은 데이터 지향 기술 스택(DOTS)이며, 이는 엔티티 컴포넌트 시스템(ECS), C# 잡 시스템버스트 컴파일러 기능을 포괄하는 용어이기도 합니다.

Nordeus는 로스앤젤레스에서 베를린까지 열린 유나이트에서 계속해서 참가자가 놀랄 만한 데모를 선보이며 DOTS뿐만 아니라 경량 렌더 파이프라인(LWRP)과 네스티드 프리팹과 같은 기타 Unity 기능의 이점을 소개했습니다.

결과

  • 작성이 쉽고 효율적인 멀티스레드 코드
  • 모바일과 같은 저사양 플랫폼을 위한 렌더링 최적화
  • 통합 버그가 획기적으로 줄어들어 빠른 QA 가능
DOTS를 도입하게 된 계기

Nordeus 팀 소개

전 Microsoft 엔지니어인 브란코 밀루치노비치(Branko Milutinovic), 밀란 조보비치(Milan Jovovic) 및 이반 스토이치사블례비치(Ivan Stojisavljevic)가 2010년에 설립한 Nordeus는 부분 유료 축구팀 경영 게임 Top Eleven – Be a Soccer Manager(미국 외 지역에서 “Top Eleven Football Manager”)를 처음으로 출시했습니다. 이 게임은 출시 이후 Facebook에서 엄청난 인기를 끌며 3주 만에 이익을 창출하기 시작했고, 2011년에 Android와 iOS에 포팅되었습니다. 그 이후로 iOS 및 Android용 Golden Boot를 출시하고, Heroic: Magic Duel을 부분 출시하였으며 그 외 다양한 게임을 개발 중입니다.

풍부한 문화와 역사를 자랑하는 베오그라드에 위치한 Nordeus 본사에는 22개국에서 온 인재들이 근무하고 있습니다. Nordeus는 유럽에서 근무하기 가장 좋은 회사로 손꼽히며 여러 자선 단체에 기부하는 회사로도 잘 알려져 있습니다.

Nordeus 최고의 소프트웨어 엔지니어 중 요제프 오로스(Jozef Oros)와 스르야 스테티치 코지치(Srdja Stetic-Kozic)는 베오그라드 출신으로 Nordeus Central Tech 팀에서 8명의 팀원과 함께 작업합니다. 이 팀은 모든 Nordeus 게임에서 사용되는 툴과 기술을 개발하는 업무를 담당하고 있습니다. 스르야에 의하면 Nordeus의 모든 게임은 Unity로 제작되었다고 합니다.

DOTS를 도입하게 된 계기

“DOTS에 관한 소식을 듣자마자 유니티에 연락해서 이를 사용하고 협업할 수 있는지 알아보았습니다. 우리는 플레이어에게 항상 최상의 사용자 경험을 제공고자 하며, 이에 있어 원활한 게임 플레이가 매우 중요합니다. 그렇기 때문에 게임을 더 빠르게 실행하는 방법에 특별한 관심을 두고 있습니다.”라고 요제프는 말합니다.

협업은 벨그라드에서 유니티와 Nordeus CTO 간의 미팅으로 시작되었습니다. Nordeus는 새로운 기술에 익숙해지는 데 도움이 필요했고, 유니티는 DOTS를 한계점까지 테스트할 수 있는 실제 애플리케이션을 원했습니다. “또한 유니티 공동 창립자인 요아킴 안테(Joachim Ante)의 멋진 작품을 소개하고 싶었습니다. 그래서 유나이트 오스틴(2017년)에서는 ‘Heroic: Magic Duel Battle을 100k 단위로 확대한 다음, 모두 폭파시켜버리자!’라고 생각했습니다. 정말 흥미진진한 경험이었습니다.”라고 스르야는 덧붙입니다.

요제프와 스르야는 Nordeus의 첫 DOTS 사용자입니다. 개발 시간의 90%를 게임플레이 시스템을 작성하는 데 할애했습니다. 특히 렌더링, 유닛의 움직임 및 로직에 집중했습니다. “Unity의 DOTS를 통해 만든 멋진 대규모 폭발 효과는 지켜보는 청중의 마음 또한 시원하게 뻥 뚫어버렸습니다.”라고 요제프는 말합니다.

팀은 두 달 만에 유나이트 오스틴에서 공개한 Nordeus Battle Demo를 완성했으며 개발 기간 중 첫 4주간은 프로그래밍과 프로토타이핑에 할애했습니다. 그중 한 주는 코펜하겐에서 유니티 팀과 해커톤 방식으로 협업하는 데 집중했습니다. “조(Joe)를 비롯한 유니티 팀과 함께 정말 멋진 경험을 했습니다. 직접 소스를 보면서 ECS, C# 잡 시스템, 버스트 컴파일러 및 데이터 지향 프로그래밍에 대해 많은 것을 배웠습니다.” 요제프가 덧붙여 말합니다.

객체 지향 프로그래밍에게 작별 인사를

데이터 지향 프로그래밍으로의 전환은 상당한 변화이며 처음에는 두려울 수 있습니다. "DOTS는 완전히 다른 방식으로 작동하지만 1, 2주 만에 그 원리에 익숙해질 수 있었고 이후에는 훨씬 더 나은 코드를 작성할 수 있었습니다. 그리고 이전 코드를 통합해야 할 때 ECS를 사용하면 매우 쉽게 처리할 수 있습니다."라고 스르야는 말합니다.

DOTS에 없어서는 안 될 부분은 C# 잡 시스템입니다. 이를 통해 스레드 안전 코드를 작성하고, 경합 상태(스레드가 예기치 않은 순서로 실행되어 의도하지 않은 결과가 발생하는 상태)를 관리하고, 컨텍스트 스위칭을 최적화하여 멀티 코어를 100% 가까이 사용할 수 있습니다. 또 다른 컴포넌트는 LLVM 기반의 연산 인식 컴파일러 기술인 버스트 컴파일러로, C# 작업을 수행하고 대상 플랫폼의 특정 기능에 최적화된 고효율의 기계어 코드를 생성합니다.

요아킴 안테(Joachim Ante)의 말에 따르면, "버스트 컴파일러는 연산과 지오메트리를 심층적으로 이해하고 다른 컴파일러는 수행하지 않는 연산 최적화를 수행할 수 있습니다. C# 코드를 자동으로 벡터화하고 특정 대상 플랫폼에 이러한 벡터화된 지침을 생성합니다. 결과적으로 코드를 훨씬 더 빠르게 실행할 수 있습니다." 또한 버스트 컴파일러는 일반적으로 QA 단계에 이르러서야 제거할 수 있는 다수의 통합 버그를 제거합니다.

Megacity 개발을 위한 사투

유나이트 오스틴에서 공개한 Battle Demo에는 Heroic: Magic Duel의 컴포넌트가 사용되었습니다. Nordeus 팀은 제한된 크기의 지형에서 움직이는 방대한 수의 애니메이션화된 유닛 및 동적인 게임플레이 요소에 DOTS 기술을 적용하는 데 주력했습니다.

이 경험은 다음 도전 과제를 위한 밑거름이 되었습니다. Nordeus에서 담당한 Megacity는 거대한 오픈 월드로서 450만 개의 오브젝트를 렌더링, 컬링 및 로딩해야 했고, 5,000개의 날아다니는 자동차를 시뮬레이션해야 했으며, 10만 개의 오디오 소스를 동시에 재생해야 했습니다. 게다가 이 모든 것이 PC뿐만 아니라 모바일에서도 원활하게 작동해야 했습니다. “Unity DOTS는 새로운 렌더링 및 애니메이션 기술, UI 시스템 및 오디오까지 Megacity의 모든 작업에 사용되었습니다. 그리고 이 모든 요소는 개발 중인 게임뿐만 아니라 기존에 출시된 게임에서도 사용할 수 있습니다.”라고 요제프는 말합니다.

LWRP로 모바일에서 대도시 구현

유나이트 LA 2018에서 열린 호아킴 안테(Joachim Ante)의 기조 연설 에는 Megacity의 놀라울 정도로 복잡한 라이브 데모가 포함되었습니다. 이 데모에는 450만 개의 메시 렌더러, 5,000대의 동적인 차량과 20만 채의 독특한 빌드 오브젝트가 등장합니다. 자동차들은 스플라인 기반의 차선 위를 절대로 충돌하지 않고 날아다니며, 네온사인, 에어컨의 팬, 서로 다른 소리를 내는 자동차들을 비롯한 10만 개의 독특한 오디오 소스가 풍부하고 현실적인 음향을 만들어냅니다. 그리고 이 모든 것이 스마트폰에서 매끄럽게 실행됩니다.

"Megacity 데모를 위해서, 우리는 복잡한 그래픽스를 모바일 버전에서 매우 빠른 프레임 속도로 보여주고 싶었습니다. 우리는 LWRP 에 몇 가지 커스텀 셰이더 미세 조정을 함께 사용하여 최대한 PC 버전과 비슷하게 만들었습니다."라고 요제프는 말합니다. 이에 스르야는 덧붙입니다. "PC의 한계를 뛰어넘는 게임을 개발하면서 추후에 모바일로 포팅하기로 결정하면 대개 모바일 플랫폼의 성능 한계로 인해 많은 부분을 재작업해야 합니다. Megacity의 경우는 달랐습니다. DOTS는 우리가 PC에서 실행하는 게임플레이 로직 및 렌더링과 정확히 동일한 코드를 사용하면서 원활하게 모바일 플랫폼으로 축소할 수 있도록 해주었습니다."

Unity의 경량 렌더 파이프라인은 조명과 셰이딩의 균형을 맞추어 모바일 디바이스에서의 실시간 성능을 최적화하였습니다. 단일 전달에서 한 번의 실시간 그림자 조명 및 오브젝트당 라이트 컬링을 사용하여(모든 광원이 음영 처리됨) 단일 전달 포워드 렌더링을 수행하여, 드로우 콜을 최소화합니다.

네스티드 프리팹과 DOTS

"Megacity 데모는 Unity의 새로운 네스티드 프리팹(nested Prefab) 시스템을 처음으로 사용했으며 당사 아티스트의 커다란 호응을 얻었습니다."라고 요제프는 언급합니다. 예를 들어 네스티드 프리팹을 사용하면 대형 건물을 여러 개의 방 프리팹으로 구성할 수 있으며, 이를 다시 여러 가구 프리팹 등으로 구성할 수 있습니다. 개발자는 프리팹을 여러 엔티티로 분할하여 효율성을 높이고, 크기에 상관없이 모든 콘텐츠를 재사용하며, 콘텐츠의 여러 다른 부분을 동시에 작업할 수 있습니다.

Nordeus의 제품 로드맵은 Unity를 향한 헌신적인 노력과 DOTS를 적용한 코딩으로 야심 차게 작성되었습니다. "Unity DOTS의 도입을 고려하고 있다면, 걱정하지 말고 그냥 뛰어드세요. 그리고 객체 지향 프로그래밍에 관한 지식을 잊어버리는 것을 두려워할 필요가 없습니다."라고 스르야는 말합니다.

“DOTS는 완전히 다른 방식으로 작동하지만 1, 2주 만에 그 원리에 익숙해질 수 있었고 이후에는 훨씬 더 나은 코드를 작성할 수 있었습니다. 그리고 오래된 코드를 통합해야 할 때 ECS를 사용하면 매우 쉽게 처리할 수 있습니다.”

Srdja Stetic-Kozic, Senior Software Engineer

“DOTS에 관한 소식을 듣자마자 유니티에 연락해서 이를 사용하고 협업할 수 있는지 알아보았습니다. 우리는 플레이어에게 항상 최상의 사용자 경험을 제공하고자 하며, 이에 있어 원활한 게임 플레이가 매우 중요합니다. 그렇기 때문에 게임을 더 빠르게 실행하는 방법에 특별한 관심을 두고 있습니다.”

Jozef Oros, Software Engineer

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

확인