Como uma equipe de seis pessoas portou o LEGO® Builder's Journey para o Apple Vision Pro em apenas três meses

Começando com o Apple Arcade, o LEGO Builder's Journey, do Light Brick Studio, um jogo de quebra-cabeça multiplataforma imersivo, vem ganhando força de forma consistente. Veja o que a equipe aprendeu quando abraçou a nova era da computação espacial e trouxe o título para o Apple Vision Pro.
Como um estúdio iniciante em realidade mista pode desenvolver a imersão do Apple Vision Pro e, ao mesmo tempo, permanecer fiel à experiência de jogo em outras plataformas?
Como os blocos LEGO® são produtos físicos reais, o Light Brick Studio estava ciente dos desafios de criar uma experiência em que os jogadores interagem com elementos de jogabilidade na sala. Para o lançamento do jogo no Apple Vision Pro, o tempo também foi uma limitação. Embora a equipe tenha executado outras portas de plataforma com interfaces 2D em um ou dois meses, o prazo de três meses foi curto para essa nova entrada na computação espacial.
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Navegando em uma nova dimensão
“Depois de conhecer os limites da plataforma para o jogo e seu design de jogabilidade, você pode criar praticamente qualquer tipo de experiência que quiser”, explica Mikkel Fredborg, líder técnico da Light Brick Studios.
Para a equipe, trazer um jogo para o visionOS foi “principalmente um desafio técnico de fazê-lo rodar sem problemas e então aproveitar a experiência completa”. Isso significou implementar diversas reformulações técnicas, incluindo um redesenho completo da interface do usuário (IU) para colocar elementos de IU antes simples na sala. A equipe também teve que atualizar suas ferramentas e métodos de renderização para garantir a qualidade visual e a imersão do produto final. Balancear os sistemas Unity e RealityKit em paralelo acrescentou mais obstáculos à otimização do desempenho.
“Fizemos muitas versões diferentes, e esta foi a mais complexa porque o Apple Vision Pro é muito diferente das outras plataformas”, diz Karsten Lund, diretor administrativo do Light Brick Studio. “A expectativa era ver até onde poderíamos levar a experiência, e funcionou muito bem.”
Os resultados
- Construiu os 80 níveis do título e 60.353 peças de LEGO para o Apple Vision Pro em menos de 100 dias
- Economizou semanas de atraso no desenvolvimento com o suporte da equipe Unity PolySpatial
- Mantivemos todas as áreas de jogo intactas com apenas otimizações de desempenho específicas, mas sem alterações no fluxo geral do jogo
- Implementou uma transição suave com um estilo de realidade mista aberta que se torna mais envolvente conforme o jogador avança
Nintendo Switch é uma marca registrada da Nintendo.

Reformulando a interface do usuário e o design da jogabilidade
LEGO Builder's Journey tem uma interface de usuário mínima, contendo no máximo 20 botões para ações como carregar jogos salvos e reiniciar um nível, então reformulá-lo foi uma tarefa mais fácil do que seria para muitos jogos. Eles fizeram o redesenho da interface do usuário no Unity, pegando GameObjects e anexando colisores a eles para fazer a entrada funcionar corretamente, imitando a linguagem de design do visionOS.
A equipe também teve que levar em conta a flexibilidade do movimento corporal. Com exceção da interface do usuário, tudo no jogo é construído com peças de LEGO em uma ferramenta chamada LEGO Digital Designer. A equipe sempre tentou simular o espaço 3D em uma superfície 2D, mas com o Apple Vision Pro, eles tiveram que levar em conta o fato de que o jogador poderia se mover em qualquer lugar. Para acomodar uma experiência completa de 360 graus, a equipe retrabalhou modelos existentes projetados para serem vistos apenas de ângulos específicos para garantir que não houvesse furos na geometria do modelo. Para reduzir as chamadas de desenho, várias malhas também foram combinadas em GameObjects únicos.
Fredborg diz: “Conseguimos levar em conta que um jogador pode andar por todo o caminho e então fazer uma otimização completa de 360 graus do modelo. Nós nos livramos de toda a geometria que estava dentro dos tijolos quando os importamos para o jogo, então removemos todos os detalhes internos, pois você nunca os vê. Conseguimos pegar as ferramentas automatizadas que temos e ajustá-las para trabalhar com a experiência de simulação completa.”

Gerenciando posicionamento no modo limitado
No início, a equipe decidiu projetar no modo Bounded, onde eles tinham que operar dentro de um volume definido. Se tentassem trabalhar fora desse volume, os elementos eram cortados e não eram vistos. Eles decidiram adotar as limitações do modo Bounded, onde não há informações sobre a posição/orientação da cabeça, dos olhos ou das mãos do jogador, a menos que uma interação seja realizada. Quando o jogador realiza um gesto de pinça, o jogo sabe onde está a mão e com qual objeto está interagindo. Quando a pitada acaba, a informação também acaba. Nesse sentido, é semelhante a uma tela sensível ao toque, onde você só sabe o que o jogador está fazendo quando ele toca na tela.
“Não sabíamos o que as pessoas estavam olhando, o que foi uma grande mudança, especialmente porque nossa jogabilidade exige que os jogadores olhem para um tijolo para selecioná-lo”, diz Fredborg. “Depois que superamos todos esses limites, funcionou muito bem e se encaixou bem no sistema. Acabou sendo muito bom operar dessa forma, já que tudo é conduzido na mesma direção da experiência do usuário.”
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Dando uma mão aos shaders do MaterialX
Nas primeiras versões do LEGO Builder's Journey, a equipe usou uma versão personalizada do Lightweight Render Pipeline (LWRP) da Unity e depois mudou para o High Definition Render Pipeline (HDRP) para portas de Xbox e PlayStation . Para o Apple Vision Pro, eles tiveram que primeiro converter tudo para ser baseado no Universal Render Pipeline (URP) e no Shader Graphe depois transferir para o RealityKit da Apple.
Para fazer isso, eles traduziram shaders criados no Shader Graph em shaders do MaterialX que eles puderam carregar no RealityKit. Mas a equipe encontrou obstáculos, descobrindo que os resultados não estavam bem otimizados e precisavam de mais trabalho do que o previsto.
Eles planejaram a otimização manual, mas descobriram que precisavam automatizar o processo para ganhar escala. Eles fariam patches manuais nos shaders, encontrariam código duplicado e substituiriam essa seção do código para garantir que ele seria executado apenas uma vez. “Foi um desafio fazer as coisas funcionarem sem problemas”, admite Fredborg, “mas acho que a equipe da PolySpatial está fazendo um ótimo trabalho ao avançar para otimizar as coisas”.

Encontrando a melhor luz
Devido ao curto tempo de resposta do jogo, eles precisavam encontrar soluções rapidamente. “Tivemos que encontrar soluções para aumentar o realismo do jogo e ainda oferecer suporte a luzes e sombras em tempo real ”, diz Fredborg. “Essa foi uma das maiores mudanças.”
Inicialmente, eles pegaram a iluminação baseada em imagem do Apple Vision Pro, com o objetivo de adicioná-la corretamente aos materiais que queriam incluir, como plástico e diferentes variações. Eles tiveram que lidar com elementos difíceis de resolver, como impressões digitais e arranhões nos tijolos.
Como o jogo foi desenvolvido inicialmente para os primeiros iPhones, ele tem uma iluminação muito simples. A equipe usou uma textura de volume – uma textura 3D com oclusão de ambiente incorporada – para que pudessem obter amostras de qualquer lugar da cena. Eles coletavam amostras de pontos e analisavam quanta oclusão ambiental estava acontecendo. Como texturas 3D não são suportadas no Apple Vision Pro, eles tiveram que converter a textura de volume em texturas 2D e fazer amostragem manual delas. Este agora é um processo automatizado no PolySpatial, mas não estava disponível quando a equipe do Light Brick Studio começou.

A equipe começou usando sombreamento de tijolos plásticos e este sistema de amostragem de textura de volume. Depois, eles incorporaram Luzes em Tempo Real e, como a textura do volume envolvia a cena, eles precisaram modificar a iluminação externa. Quando eles começaram o desenvolvimento, não era possível substituir a iluminação baseada em imagem, então eles tiveram que amostrar um mapa de cubo diferente e então diminuir a luz da iluminação baseada em imagem do RealityKit.
“O que estávamos fazendo não era realmente possível, mas encontramos uma solução alternativa diminuindo a suavidade do tijolo e aumentando valores diferentes antes de enviá-lo para a iluminação do RealityKit”, explica Fredborg. “Os desenvolvedores terão mais facilidade, já que substituir a iluminação baseada em imagem agora é possível no PolySpatial e no RealityKit.”

Criando uma sombra suave
A equipe do Light Brick Studio também precisava encontrar uma solução para as sombras. Embora sombras possam ser adicionadas a certos elementos no Apple Vision Pro, isso não é padrão. Para fazer isso, a equipe renderizou a sombra no Unity como um mapa de altura ou profundidade, enviou-o para o RealityKit e fez uma nova amostragem lá. Eles renderizaram a cena como um mapa de sombras no backend Metal no Unity e depois a passaram para o lado de renderização do RealityKit.
“O que você pode fazer por meio da renderização é limitado se você ainda precisa atingir 90 quadros por segundo. Fizemos um mapa de sombras muito pequeno, 64 x 64 pixels, e então combinamos os níveis do mipmap nos canais RGBA de uma única textura, que pode então ser amostrada com uma única amostra no RealityKit para produzir algo que se parece com uma sombra suave”, explica Fredborg. “Então, quando o tijolo está muito próximo da superfície, as sombras são bem nítidas, mas quando ele está em cima, a sombra é mais suave. Fizemos isso com uma amostra de textura.”

Para as Realtime Lights do Unity, eles usaram o PolySpatial Lighting Node no Shader Graph, que se expandiu para vários nós do Shader Graph quando foi convertido para o RealityKit.
“Para o RealityKit, a única maneira de alterar shaders é por meio de uma interface semelhante ao Shader Graph”, diz Fredborg. No lado do Unity , a equipe descobriu que era possível criar uma função de código personalizada no Shader Graph e, desde que isso seguisse certas regras específicas, ele poderia ser convertido em um gráfico de nós do MaterialX posteriormente. “Isso realmente nos ajudou muito”, ele continua, “caso contrário, seria um monstro de espaguete dentro de um monstro de espaguete em Shader Graphs”.

Otimizando a 90 fps
À medida que a equipe levava os recursos visuais para uma nova dimensão, eles enfrentaram alguns obstáculos para manter a plataforma funcionando sem problemas. O desenvolvimento ocorreu como um sistema de duas partes, passando tudo do Unity para o RealityKit, que tem diferentes técnicas de renderização. Isso significava que o Unity cuidava da lógica do jogo, enquanto o RealityKit cuidava da renderização dos visuais, e a otimização era necessária para rodar sem problemas a 90 quadros por segundo. Um dos principais desafios era identificar se o gargalo vinha do Unity ou do RealityKit, e a equipe precisaria de várias tentativas para encontrar a solução.
“No começo, o pacote PolySpatial refletia tudo o que fazíamos no Unity no RealityKit, então cada GameObject ou transformação estaria lá, e naquela época não podíamos desativar a transferência ou reflexão de camadas específicas. Ele refletiu tudo, desde a renderização da interface do usuário, a renderização da tela e o sistema de partículas do animador”, explica Fredborg. “Agora, há um filtro que permite configurá-lo para não rastrear camadas específicas, mas naquela época, tivemos que descobrir uma maneira de limpar tudo o que não veríamos no lado do RealityKit.”

A equipe precisava otimizar as hierarquias do GameObject. Em outras plataformas, os tijolos são três ou mais GameObjects vinculados, mas para o visionOS, eles definem um máximo de dois GameObjects por tijolo para limitar o vai e vem entre o Unity e o RealityKit. Isso funcionou muito bem e foi uma grande vitória para a equipe.
Melhorar a animação em stop motion também foi um destaque. O jogo contém cachoeiras animadas que trocam malhas em tijolos. Eles consistiam em centenas de GameObjects diferentes, que eram bem lentos. “Acabamos abordando isso de forma escalonada em vez de fazer cada quadro para cada GameObject”, diz Fredborg. “Nós esperávamos e fazíamos isso a cada poucos quadros entre os diferentes riachos da cachoeira. Ajudou muito.”
Encontrar as melhores soluções e parceiros
Ao longo da jornada de desenvolvimento do Apple Vision Pro, a equipe do Light Brick Studio teve que se manter ágil, resolver problemas rapidamente e iterar para acertar.
“Acho que é preciso usar óculos para entender”, diz Fredborg. “Recomendamos fazer várias construções e usar o dispositivo o máximo possível para focar no toque e no movimento. Você tem o simulador que pode ser executado no Mac para ter uma ideia de como as coisas estão funcionando, mas a entrada é diferente. É uma plataforma muito mais física.”
No final, a equipe ficou muito feliz com o resultado do jogo, em parte graças ao trabalho com um forte parceiro de suporte. “A equipe da PolySpatial foi muito receptiva tanto no Slack quanto nos fóruns de discussão”, ele continua. “Quando estávamos bloqueados, eles nos respondiam rapidamente com soluções, o que era muito útil. Eles realmente nos apoiaram e queriam fazer a melhor versão possível do PolySpatial.”


Crie para o Apple Vision Pro hoje com o Unity 2022 LTS
Fale com nossa equipe para saber como podemos ajudar você a aproveitar as ferramentas e fluxos de trabalho poderosos do Unity para criar experiências espaciais atraentes.
Explore o estudo de caso
Preencha este formulário para ter acesso às últimas histórias de sucesso de clientes