P: Agradeço por se juntarem a nós! O jogo está incrível! Podem nos contar quais são seus principais objetivos para Star Wars: Galactic Racer™ e do que se trata o jogo?
Andrei Shires, cofundador e chefe de tecnologia da Fuse Games: Nosso trabalho como equipe de tecnologia é, em princípio, simples: proporcionar a melhor experiência possível aos jogadores. Tudo o que fazemos visa esse objetivo.
Karl Wickens, diretor de arte técnica do estúdio na Fuse Games: Do ponto de vista técnico, nossos principais objetivos eram um conteúdo de alta fidelidade e uma apresentação cinemática, sem comprometer a taxa de quadros consistente nem a fluidez dos comandos.
P: Por que a Unreal Engine 5 foi escolhida para este projeto e quais recursos da UE5 mais se destacaram para vocês durante o desenvolvimento (e por quê)?
Shires: Avaliamos vários motores logo no início. O mais importante era encontrar um que nos permitisse desenvolver rapidamente com um padrão muito alto e consistente, para que pudéssemos manter o foco na criação do jogo, e não no desenvolvimento de uma tecnologia de base do zero. O destaque da Unreal Engine 5 foi muito claro nessa questão, especialmente pela forma como o Nanite, o Lumen e o World Partition funcionam em conjunto. Essa combinação foi extremamente atraente para um jogo como o nosso.
Wickens: Sabíamos que precisaríamos ampliar a equipe rapidamente, e o uso de um motor pronto para uso, com práticas recomendadas bem estabelecidas, facilitou muito a integração. Isso também acelerou nossa própria curva de aprendizado e nos permitiu incorporar ferramentas e conteúdos adquiridos como ponto de partida para nossos próprios ativos específicos do jogo.
P: Os jogos de corrida expõem cada milissegundo de latência. Quais foram os maiores desafios técnicos para fazer com que os veículos parecessem responsivos em velocidades tão altas?
Shires: Algumas coisas. Para que um jogo de corrida pareça consistente e justo, a simulação física deve ser executada na taxa de quadros total, independentemente da taxa de quadros do jogo, e ser rápida o suficiente para lidar com veículos que se deslocam — e se chocam — em velocidades extremas. Nos empenhamos bastante para tornar essa simulação física o mais sólida possível, pois todo o restante depende dela: consistência, justiça, baixa latência e um veículo que realmente responda da maneira que você espera ao fazer uma curva.
Wickens: Uma coisa que teve enorme importância — não exatamente a renderização, mas algo relacionado a ela — foi o gerenciamento simultâneo de várias "camadas" diferentes de cada nível. Há a malha de renderização, que é baseada principalmente no Nanite. Há uma camada de colisão separada para a simulação de corridas. E há a cena do Lumen: a geometria 3D que alimenta a iluminação global, além da cena de campo distante além dela. À medida que você corre em um nível, várias camadas de dados ficam ativas ao mesmo tempo — algumas visíveis, outras não; algumas afetam a física da corrida, outras, a iluminação. Passamos muito tempo ajustando a resolução de cada uma delas, testando o que realmente ficava perceptível quando era deixado de fora da cena com traçado de raio do Lumen, para atingirmos as taxas de quadros de que precisávamos.
P: Como o Nanite permitiu que a equipe usasse ativos altamente detalhados, incluindo veículos com milhões de triângulos, sem deixar de buscar um desempenho fluido? Além disso, que tipo de resultados concretos a equipe observou em termos de qualidade visual e tempo de produção?
Wickens: O Nanite foi uma verdadeira mudança de paradigma em relação ao antigo mundo baseado em LOD, onde escolhíamos cuidadosamente o orçamento de triângulos para cada nível de detalhe de um ativo. Com o Nanite, fornecemos uma versão fixa de alta resolução e deixamos que ele determine dinamicamente o número de triângulos necessários para a cena. A abordagem tradicional de LOD é cara de produzir e, como os LODs funcionam em faixas fixas, é inerentemente ineficiente — há um ponto ideal em cada faixa em que os detalhes ficam adequados, e uma faixa em cada lado em que não se obtém a qualidade que seria possível. O Nanite também eliminou o "popping" que ocorria quando os recursos alternavam entre as faixas de LOD, já que, em vez disso, ele apresenta os detalhes de maneira suave.
Os ganhos de fidelidade também foram tangíveis em alguns aspectos inesperados. Nosso chefe de conteúdo continua muito satisfeito por podermos utilizar diretamente os ativos dos veículos em corrida para criar imagens de marketing em close-up, sem nenhum trabalho extra de modelagem. Esses mesmos ativos funcionaram como adereços de cinemática, e no modo de foto é possível chegar bem perto e ainda ver os detalhes se mantendo, sem nenhum dos artefatos de popping que os LODs costumavam causar.
O tempo de produção é uma história interessante. O antigo pipeline de LOD parecia o trabalho manual de acabamento de móveis. Cada corte importa: cada loop de aresta precisa conquistar seu lugar em um pequeno orçamento de triângulos. O Nanite elimina grande parte dessa sobrecarga técnica. Ainda existe, só que foi reduzida significativamente, o que torna o trabalho acessível a mais artistas e permite que eles avancem mais rapidamente.
Shires: Eu concordo. A maior mudança que vi foi poder fazer com que um nível ou veículo tivesse uma boa aparência e funcionasse com uma boa taxa de quadros ao mesmo tempo. No pipeline antigo, importávamos malhas lindas e a taxa de quadros caía imediatamente até que os LODs fossem finalizados, então víamos "como o jogo ficaria" e "como seria a jogabilidade" como dois momentos distintos, separados por semanas.
Com o Nanite, conseguimos que ativos sem nenhuma otimização fossem exibidos com boa qualidade visual e boa taxa de quadros já nas fases iniciais do desenvolvimento. Essa foi a verdadeira mudança para mim. Não é que o jogo tenha ficado mais bonito, porque acho que também poderíamos ter alcançado uma qualidade visual semelhante com os LODs, mas é o quanto conseguimos iterar mais rapidamente nessa experiência; quanto mais passamos pelo ciclo de iteração, melhor fica o nosso jogo.
Até adicionamos um modelo de destróier estelar que havia sido feito para os filmes. A Unreal Engine nos permitiu colocá-lo diretamente no nível, e funcionou perfeitamente no PS5. Foi algo bem especial.
P: Como o Lumen e a renderização baseada em física ajudaram a criar uma iluminação convincente em diferentes ambientes e horas do dia? Vocês poderiam falar sobre como isso impactou os fluxos de trabalho dos artistas e os tempos de iteração?
Wickens: O Lumen nos permitiu alcançar uma linha de base de iluminação atraente, se não totalmente polida, muito rapidamente e permitiu que a equipe de iluminação iterasse diferentes aparências para um nível em uma passagem aproximada antes de tomar uma decisão.
Um dos resultados mais interessantes no lado do PBR foi um fluxo de trabalho que criamos para amostrar cores do mundo real em nosso material de referência e convertê-las em cores de referência fisicamente precisas para nossos ativos. Isso eliminou grande parte da adivinhação na escolha das cores de textura — adivinhação que varia muito dependendo do monitor do usuário, do brilho do cômodo ou da iluminação ambiente, já que nem todo artista trabalha em um ambiente com controle de cores.
Combinamos isso com ferramentas de validação personalizadas da Unreal Engine que mostram aos artistas onde determinada cor se situa em uma escala percentual, desde muito escuro e escuro, passando pelos tons médios, até claro e muito claro, além de alertas para qualquer coisa que fique totalmente fora desse intervalo. Os artistas costumam começar escolhendo cores que parecem adequadas de forma isolada, no Photoshop, mas que não ficam bem quando renderizadas no motor. Contar com esse framework consistente de PBR significava que, independentemente de alguém estar criando texturas para personagens, veículos ou ambientes — muitas vezes de forma isolada uns dos outros —, tudo se encaixava corretamente uma vez iluminado na cena do Lumen, sem nenhuma disparidade visual entre eles.
P: Como vocês otimizaram a Unreal Engine para fornecer taxas de quadros consistentes e preservar a sensação de velocidade?
Wickens: Criamos uma ferramenta de validação bastante complexa que codifica nossas especificações técnicas em regras aplicadas de fato. Veja a densidade de triângulos do Nanite: o Nanite aceita sem problemas quantos triângulos você enviar, mas ainda assim queremos uma densidade consistente na entrada, por isso calculamos uma densidade-alvo por objeto com base em seu tamanho e curvatura.
A cada check-in, cada ativo é testado em relação às regras definidas para seu tipo, tudo o que não for aprovado é sinalizado e reunido em painéis de controle em todo o repositório de conteúdo. Esse é só um exemplo das mais de 250 regras que temos para os diversos tipos de ativos. Todo o sistema existe para nos dar a certeza de que tudo o que chega ao jogo atinge o padrão de qualidade necessário.
P: Como a equipe garante a consistência visual em vários tipos de hardware?
Shires: Isso remete aos mesmos princípios. Se o jogo mantiver a taxa de quadros na resolução, ele terá uma boa aparência em qualquer plataforma. A Unreal Engine lida bem com a consistência multiplataforma. Mas as concessões são inevitáveis, por isso o objetivo é entender quais concessões estamos escolhendo e quais estão ocorrendo acidentalmente, além de garantir que estejamos fazendo concessões nos pontos certos. Dedicamos muito esforço especificamente aos PCs de baixo desempenho e ao Xbox Series S, então se você comparar o Series S e o Series X lado a lado, a diferença é visível, mas explicável — um hardware melhor traz vantagens.
Durante a maior parte da produção, analisávamos semanalmente as plataformas em questão. Um diretor de arte técnica, um diretor técnico, um engenheiro gráfico e, muitas vezes, um artista sênior de iluminação se reuniam na frente das mesmas telas para comparar o PlayStation com o Xbox, ou o console com o PC, analisando detalhadamente as configurações específicas de cada plataforma para corrigir quaisquer discrepâncias não intencionais.
Quando os inevitáveis vídeos comparativos do YouTube começarem a chegar, queremos que os jogadores percebam o quanto nos esforçamos especificamente para o hardware deles — que mesmo nos equipamentos mais fracos o jogo ainda tem boa aparência, ainda roda muito bem e mantém a taxa de quadros, mesmo nos casos em que foi necessário fazer concessões.
Wickens: Pois é, a gente comparava literalmente duas configurações de hardware lado a lado na mesma tela de TV, toda semana. Também investimos pesado, desde o início, em testes de jogabilidade em contexto, em vez de criar conteúdo isoladamente e encaixá-lo no final. Isso é uma parte importante da nossa cultura e algo sobre o qual conversamos muito na hora de contratar.
Realizamos testes multijogador e esboçamos os níveis desde o início, reunindo usuários de PlayStation, Xbox, PCs de ponta e PCs com especificações mais modestas na mesma sessão, para que problemas em hardwares específicos fossem identificados rapidamente. Ao circular por essas sessões, era possível ver o jogo em uma dúzia de telas e configurações diferentes. Além disso, as compilações automáticas diárias apresentam o desempenho em todos os consoles em um único gráfico, o que nos permite confirmar se nossas decisões de escalabilidade para hardware de baixo desempenho estão realmente se mantendo em termos de taxa de quadros e memória.