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

Nordeus - Unity 개발자 사례 연구

What inspires wow-factor demos like Megacity at Unity community events? Are they just eye-candy or are there real benefits for Unity developers? Belgrade-based Nordeus has been a featured studio at many Unite developer conferences, demoing work drawn from their hit games. But their cutting-edge clips aren’t about showing off – they’re about demonstrating new Unity capabilities that will dramatically change what you can achieve both creatively and programmatically.

프로젝트

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

목표

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

플랫폼

Android, iOS, PC

팀원 수

Megacity 팀 3명, Battle Demo 팀 20명

위치

세르비아 베오그라드

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

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

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

결과

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

Nordeus 팀 소개

Founded in 2010 by ex-Microsoft engineers Branko Milutinovic, Milan Jovovic, and Ivan Stojisavljevic, Nordeus first published Top Eleven – Be a Soccer Manager (“Football” outside the US), a freemium team-management game. It was enormously successful on Facebook, becoming profitable in three weeks, and was ported to Android and iOS in 2011. Since then, the company has published Golden Boot on iOS and Android, has Heroic: Magic Duel in soft launch, and numerous other games in development stages.

Nordeus has drawn talent from 22 countries to its headquarters in Belgrade, a locale extraordinarily rich in culture and history. They’re routinely cited as a top workplace in Europe and are known as generous contributors to a number of philanthropic organizations.

Two of their top software engineers are Belgrade locals: Jozef Oros and Srdja Stetic-Kozic, who work in the Nordeus Central Tech team with eight others. They are responsible for fostering the tools and techniques used in all Nordeus games, and as Srdja notes, “All of our games are made in 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 개발을 위한 사투

The Battle Demo shown at Unite Austin used components from Heroic: Magic Duel. The Nordeus team applied its DOTS expertise primarily on dynamic gameplay elements, with huge numbers of animated units on a limited-size terrain.

This paved the way for its next challenge, as Nordeus took on Megacity, which is a big, open world with 4.5 million objects that need to be rendered, culled, and loaded, 5,000 flying cars needing to be simulated, and 100,000 audio sources that had to be played simultaneously. And all of this needs to work on mobile as well as PC. Jozef said, “For Megacity, Unity’s DOTS was used for everything, like new rendering and animation techniques, UI systems, and even audio. We can use all of this in our existing games, as well as those in development.”

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의 도입을 고려하고 있다면, 걱정하지 말고 그냥 뛰어드세요. 그리고 객체 지향 프로그래밍에 관한 지식을 잊어버리는 것을 두려워할 필요가 없습니다."라고 스르야는 말합니다.

Srdja Stetic-Kozic, Senior Software Engineer

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

Srdja Stetic-Kozic, Senior Software Engineer
Jozef Oros, Software Engineer

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

Jozef Oros, Software Engineer

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

확인