[Consoles] Relatório de Desenvolvimento #3

Esta semana, queremos explicar os diversos tipos de LOD, o que LOD significa e no que ele afeta o desempenho.

Estamos de volta com mais um Relatório de Desenvolvimento nos Consoles! Esta semana, queremos explicar os diversos tipos de LOD, o que LOD significa e no que ele afeta o desempenho.

LOD significa “Level of Detail” (Nível de Detalhes), e diversos objetos no PUBG contam com LODs diferentes. Dependendo das circunstâncias, o jogo emprega um LOD mais ou menos detalhado para atingir o equilíbrio ideal entre desempenho e qualidade visual, de modo a proporcionar a melhor experiência de jogo possível. O PUBG em geral usa três LODs diferentes dependendo da situação: LOD 2, LOD 1 ou LOD 0, que é o mais detalhado. Quanto mais detalhado o LOD, mais afeta o desempenho. Só que, apesar de desempenho ser importante, também temos que tomar cuidado para não afetar negativamente a experiência de imersão com LODs menos detalhados.

Um caso comum de LOD em ação é quando os jogadores olham para as construções distantes durante o salto de paraquedas e percebem que elas têm um aspecto simplificado, como se fossem parte de uma maquete. Esse aí é o primeiro LOD, o menos detalhado. No começo de uma partida, até os edifícios mais próximos podem ficar assim, pois o jogo precisa processar muitos objetos diferentes de uma só vez. Os objetos próximos logo mudam para o LOD 0 (mais detalhado), mas se isso acontece rápido ou não depende da potência do seu hardware.

O jogo também aplica três LODs diferentes a personagens: LOD Malha, LOD Osso e LOD AnimNode. Agora uma explicação rápida do que são o LOD Malha e o LOD Osso antes de abordarmos o assunto principal deste Relatório: o LOD AnimNode.

LOD Malha e LOD Osso

O LOD Malha determina o LOD do modelo do personagem. Quando o personagem está perto de você, ele é renderizado como LOD 0 (maior detalhe), enquanto o nível se reduz caso você se afaste. Tudo acontece em etapas: LOD 2, LOD 1 e LOD 0. O jogador não costuma perceber a transição, pois ela ocorre a uma distância tal que o personagem fica minúsculo na tela.

O LOD Osso funciona da mesma forma, determinando quantos ossos se ativam em animações dos personagens. Assim, a distâncias maiores, o jogo não precisa processar animações detalhadas capazes de afetar o desempenho. Menos LOD significa menos vertex e menos dados de ossos a processar, o que melhora bastante o desempenho se comparado a uma situação sem LODs otimizados.

Ter ainda mais LODs (3, 4 etc.) com certeza melhoraria o desempenho ao reduzir o impacto no processador, mas infelizmente pesaria demais na memória e no processamento de dados dos consoles, de modo que não podemos implementar mais níveis de detalhes no momento.

LOD AnimNode

As animações também contam com LODs, chamados LODs AnimNode, mas não podemos aplicá-los tanto quanto o LOD Malha e o LOD Osso, pois as mudanças visuais são bem nítidas.

Animações como corridas, olhadas laterais e usar a mira são movimentos no esqueleto do personagem. O jogo calcula as animações do esqueleto a partir dos membros, o que exige cálculos independentes e animações para braços, pernas, pescoço etc.

Desenvolvemos mais um método de LOD com base no tamanho do modelo do personagem em relação à tela toda. Em seguida, definimos parâmetros para escolher automática e dinamicamente um LOD AnimNode menos detalhado para modelos tão distantes que a mudança visual passe despercebida. Ou seja, isso melhora o desempenho sem afetar a experiência visual ou de jogabilidade de ninguém.

Lembrem-se de que os exemplos visuais abaixo aplicam as mudanças de LOD AnimNode bem de perto só para uma melhor compreensão de como o recurso funciona. Durante o jogo, o LOD AnimNode só muda a grandes distâncias.

Vejam um primeiro exemplo de como o LOD AnimNode funciona no jogo:(As imagens acima foram capturadas a partir de um ambiente de desenvolvimento e têm fins ilustrativos. Durante o jogo, o LOD AnimNode só fica desligado a grandes distâncias)

Nas imagens acima, é possível ver as diferenças entre jogar com LOD AnimNode ligado e desligado.

Quando o LOD AnimNode fica desligado por completo, os personagens não exibem animação nenhuma no modelo, o que resulta em melhor desempenho. No entanto, um personagem agachado precisa de LOD AnimNode na parte inferior do corpo, caso contrário pareceria estar de pé.

No próximo exemplo, configuramos o nosso ambiente de desenvolvimento para desligar o LOD AnimNode quando o personagem ocupa 10% da tela para ajudar a entender melhor o que acontece quando desativamos o LOD AnimNode.

No jogo, o LOD AnimNode só é desligado quando o modelo do personagem fica pequeno demais para que você possa enxergar a mudança.

(As imagens acima foram capturadas a partir de um ambiente de desenvolvimento e têm fins ilustrativos. Durante o jogo, o LOD AnimNode só fica desligado a grandes distâncias)

Vocês devem estar se perguntando: “Mas o que acontece quando eu miro em um inimigo distante com a mira telescópica?”

Ao mirar em um jogador distante, o modelo do personagem vai ocupar uma porcentagem maior da tela e o LOD AnimNode voltará a ser ativado dinamicamente com base no tamanho do modelo em relação à tela, garantindo que não haja impacto negativo no seu jogo.

Para deixar tudo mais claro, abaixo temos um exemplo visual no qual o LOD AnimNode fica programado para se desligar quando o modelo do personagem ocupa 10% da tela.

(A imagem acima foi capturada a partir de um ambiente de desenvolvimento e tem fins ilustrativos. Durante o jogo, o LOD AnimNode só fica desligado a grandes distâncias)

Repetindo: ao jogar o PUBG, essas mudanças só ocorrem quando o modelo está bem distante, ocupando um pedaço minúsculo da tela, então ninguém consegue perceber as mudanças.

Desempenho do LOD AnimNode

O gráfico abaixo compara o desempenho com o LOD AnimNode ativado (azul) e desativado (vermelho) em uma situação com 10 personagens por perto. Reparem na melhoria de 10% de desempenho com o LOD AnimNode desativado.

* Dados captados em um Xbox One X.

Quanto mais modelos próximos estiverem com o LOD AnimNode desligado, maior o desempenho comparado com o LOD AnimNode ligado.

Em resumo: certas animações de modelos de personagem ficam desligadas quando estão a uma distância tamanha que a mudança fique imperceptível. Graças a esse recurso, o desempenho do jogo melhora.

Agradecemos a leitura! A gente se vê no próximo Relatório de Desenvolvimento nos Consoles!

Discuta este artigo
Compartilhar este artigo