DOTS executa o jogo futurístico, Megacity, no celular

Um estudo de caso de desenvolvimento Unity: como a Nordeus adotou DOTS para mudar radicalmente seus códigos e criar uma versão móvel de Megacity

O que inspira estas demos impressionantes como Megacity nos eventos da comunidade Unity? Seriam elas somente colírio para nossos olhos ou existem benefícios reais para os desenvolvedores Unity? Nordeus, um estúdio sediado em Belgrado, tem se destacado em diversas conferências de desenvolvedores Unite, demonstrando o trabalho elaborado em seus jogos mais populares. Mas seus clipes de última geração não se tratam de exibicionismo, eles demonstram as novas funcionalidades Unity que mudarão radicalmente o que pode ser feito, tanto em termos de criatividade como de programação.

O projeto

Demonstrar frequentemente a evolução mais recente de nossa iniciativa de “Desempenho por padrão” / DOTS

O objetivo

Melhorar o desempenho de código multithread para todos os desenvolvedores Unity

Plataformas

Android, iOS, PC

Membros da equipe

3 para Megacity, 20 para Battle Demo

Lugar

Belgrado, Sérvia

Com a tendência do uso de CPUs com cada vez mais núcleos, multithreading de alto desempenho é uma funcionalidade essencial de qualquer engine de computação moderna. A solução Unity para múltiplos núcleos e threads é o Data-Oriented Technology Stack (DOTS), um termo que engloba o Sistema de Entidade de Componentes (ECS), o sistema de trabalhoC# e o compilador Burst.

Maravilhando constantemente o público das apresentações Unite, de Los Angeles a Berlin, a Nordeus tem demonstrado os benefícios destas e de outras funcionalidades Unity, tais como o Pipeline de Renderização Lightweight (LWRP) e Prefabs aninhados.

Os resultados:

  • Código multithread eficaz e fácil de escrever
  • Renderização otimizada para plataformas de baixo desempenho, como as móveis
  • Rápido controle de qualidade com muito menos bugs de integração
Conectando DOTS em um hackathon

Uma equipe internacional e altamente criativa

Fundado em 2010 pelos ex-engenheiros da Microsoft, Branko Milutinovic, Milan Jovovic e Ivan Stojisavljevic, a Nordeus publicou pela primeira vez Top Eleven – Be a Soccer Manager (“Football” fora dos EUA), um jogo de modelo freemium de gestão de equipe. Fez um imenso sucesso no Facebook, tornou-se lucrativo em três semanas e foi levado para Android e iOS em 2011. Desde então, a empresa publicou Golden Boot em iOS e Android, está com o lançamento progressivo de Heroic: Magic Duel e tem muitos outros jogos em estágio de desenvolvimento.

A Nordeus levou para sua sede em Belgrado talentos de 22 países, um local extraordinariamente rico em cultura e história. Eles figuram frequentemente na lista das melhores empresas para se trabalhar na Europa e são conhecidos como doadores generosos a diversas organizações filantrópicas.

Dois de seus engenheiros de software mais importantes são de Belgrado: Jozef Oros e Srdja Stetic-Kozic, que trabalham na equipe de Tecnologia Central da Nordeus com outras oito pessoas. Eles são responsáveis por fomentar as ferramentas e técnicas usadas em todos os jogos da Nordeus games e, como Srdja ressalta, “Todos os nossos jogos são feitos no Unity.”

Conectando DOTS em um hackathon

“Assim que ficamos sabendo do DOTS, entramos em contato com Unity para testá-lo e ver se formávamos uma parceria.” disse Jozef. “Sempre queremos dar aos nossos jogadores a melhor experiência do usuário possível, e uma jogabilidade descomplicada faz parte desta experiência. É claro que estamos particularmente interessados em qualquer coisa que possa ajudar nossos jogos a rodar mais rápido.”

A colaboração começou com uma reunião em Belgrado entre o Unity e os CTOs da Nordeus. A Nordeus recebeu ajuda para se familiarizar com as novas tecnologias e o Unity queria uma aplicação real que pudesse testar os limites do DOTS. Srdja complementa, “também queríamos fazer algo legal e épico para ser apresentado pelo Joachim Ante (um cofundador do Unity). Então, para a Unite Austin (2017), pensamos: "Vamos pegar uma batalha de Heroic: Magic Duel, aumentá-la para 100 mil unidades e então explodir tudo!" Foi uma experiência incrível para todos nós.”

Jozef e Srdja foram os primeiros usuários de DOTS na Nordeus. Eles estimam que gastaram 90% de seu tempo escrevendo sistemas de jogos, principalmente em renderização, omovimento de unidades e lógica. Jozef disse, “com o DOTS de Unity conseguimos fazer efeitos muito legais com explosões grandiosas, e sabíamos que isso faria nosso público enlouquecer.”

A equipe terminou a Nordeus Battle Demo para a Unite Austin em dois meses, sendo que as primeiras quatro semanas foram dedicadas à programação e prototipagem. Eles passaram uma dessas semanas em Copenhagen com uma equipe Unity, trabalhando em conjunto como se fosse um hackathon em uma sala só. “Trabalhar com Joe e sua equipe foi uma experiência incrível. Aprendemos, direto da fonte, uma quantia imensa de informações sobre ECS, o sistema de trabalho em C#, o compilador Burst e programação orientada a dados em geral.” Jozef complementa.

Dizendo adeus à programação orientada a objetos

Mudar para uma programação orientada a dados é algo muito significativo e chega a ser intimidador em um primeiro momento. Entretanto, de acordo com Srdja, “DOTS realmente exige uma maneira diferente de pensar, mas depois de uma semana ou duas, finalmente entendemos tudo e conseguimos escrever um código muito melhor. E quando temos que integrar códigos antigos, ECS nos ajuda a fazer isso facilmente.”

Uma parte integral do DOTS é o sistema de trabalho em C#, que escreve códigos seguros para threads, gerencia condições de execução (threads executando em ordens inesperadas, causando resultados inesperados) e otimiza alterações de contexto com um ganho de quase 100% do uso de núcleos múltiplos. Outro componente é o compilador Burst, uma tecnologia baseada em LLVM e sensível à matemática, capaz de processar trabalhos em C# e produzir um código de máquina altamente otimizado para as capacidades específicas da plataforma-alvo.

De acordo com Joachim Ante, “nosso compilador Burst compreende a matemática e geometria a fundo e pode realizar otimizações matemáticas que outros compiladores simplesmente não conseguem. Ele vetoriza automaticamente códigos em C# e gera estas instruções vetorizadas para uma plataforma-alvo específica. Como resultado, o código pode ser executado com muito mais rapidez.” O compilador Burst elimina uma quantidade significativa de bugs de integração que, geralmente, são detectados pelo controle de qualidade.

Ganhando a batalha do Megacity

A Battle Demo apresentada na Unite Austin usou componentes do Heroic: Magic Duel. A equipe da Nordeus utilizou seus conhecimentos em DOTS principalmente em elementos dinâmicos de jogabilidade, com grande quantidade de unidades animadas em um terreno de tamanho limitado.

Isto abriu caminho para o próximo desafio, quando a Nordeus assumiu Megacity. Um imenso mundo aberto com 4,5 milhões de objetos que precisavam ser renderizados, selecionados e carregados, 5.000 carros voadores que precisavam ser simulados e 100.000 fontes de áudio que tinham que ser reproduzidas simultaneamente. E tudo isso tinha que funcionar em plataformas móveis e PCs. Jozef diz, “usamos o DOTS do Unity para tudo no Megacity, como novas técnicas de animação e renderização, sistemas de interface e até mesmo áudio. Podemos usar tudo isso em nossos jogos já existentes e também naqueles em desenvolvimento.”

LWRP ajuda a colocar uma metrópole no celular

Joachim Ante’s keynote address at Unite LA 2018 included an astonishingly complex live demo from Megacity. The demo contains 4.5M mesh renderers, 5,000 dynamic vehicles and 200,000 unique building objects. The vehicles fly on spline-based traffic lanes, never colliding, and there are 100,000 unique audio sources, including neon signs, air-conditioning fans, and cars producing unique sounds to form a rich, realistic audioscape. And it all runs smoothly on smartphones.

“For the Megacity demo, we wanted to show our complex graphics on a mobile version with a very fast frame rate. We used LWRP plus a few custom shader tweaks to make it resemble the PC version as much as possible,” said Jozef. Srdja added, “When you are working on a game that is supposed to stretch the limits of PCs, and then you decide to port it to mobile later, you usually have to rework large parts of it due to performance limitations of mobile platforms. This was not the case with Megacity. DOTS enabled us to use the exact same code running gameplay logic and rendering on a PC and seamlessly scale it down to mobile platforms.”

The Unity Lightweight Render Pipeline optimizes real-time performance on mobile devices by making tradeoffs with lighting and shading. It performs single-pass forward-rendering with one real-time shadow light and light culling per-object (with all lights shaded) in a single pass, minimizing draw calls.

Prefabs aninhados e imersão no DOTS

“A demo do Megacity também foi a primeira vez que entramos em contato com o novo sistema de Prefabs aninhados do Unity, e nossos artistas se encantaram com ele”, de acordo com Jozef. Por exemplo, com os Prefabs aninhados, um edifício grande pode ser composto por vários Prefabs de ambientes pequenos, os quais, por sua vez, podem ser constituídos por vários Prefabs de peças de mobiliário e assim por diante. Os desenvolvedores podem dividir Prefabs em várias entidades para uma melhor eficiência, reutilizar qualquer conteúdo, seja ele pequeno ou grande, e trabalhar em diferentes partes do conteúdo simultaneamente.

O roteiro de produtos da Nordeus é ambicioso, com um comprometimento de 100% com Unity e com a abordagem DOTS para escrever código. Como Srdja diz, “se você está pensando em adotar Unity DOTS, mergulhe nessa. E não tenha medo de desaprender muito do que sabe sobre programação orientada a objetos!”

“DOTS realmente exige uma maneira diferente de pensar, mas depois de uma semana ou duas, finalmente entendemos tudo e conseguimos escrever um código muito melhor. E quando temos que integrar códigos antigos, ECS nos ajuda a fazer isso facilmente.”

Srdja Stetic-Kozic, Senior Software Engineer

“Assim que ficamos sabendo do DOTS, entramos em contato com Unity para testá-lo e ver se formávamos uma parceria. Queremos dar aos nossos jogadores a melhor experiência do usuário possível e uma jogabilidade descomplicada faz parte desta experiência. É claro que estamos particularmente interessados em qualquer coisa que ajude nossos jogos a rodar mais rápido.”

Jozef Oros, Software Engineer

We use cookies to ensure that we give you the best experience on our website. Click here for more information.