Mod Lordgit voltou com outra análise profunda do NXT, desta vez se concentrando nas empolgantes atualizações que podemos fazer no futuro.
Hoje - dando sequência ao meu post anterior - vou abordar as possíveis atualizações futuras do NXT, bem como os desafios que nos esperam para torná-las realidade.
O nível dos detalhes técnicos será parecido com o do post anterior, mas devido ao número de tópicos a serem abordados, não vou ser tão incrivelmente minucioso quanto da última vez. Além disso, devo dizer que nenhuma destas atualizações futuras está totalmente definida ainda.
Depois que todos estiverem usando o novo cliente, poderemos saber quais delas podemos introduzir no RuneScape.
Tendo dito isto, vamos começar!
Mapas Normais e Resoluções Maiores de Texturas
Provavelmente no topo da nossa lista estão os mapas normais e as texturas de alta resolução. Essas duas melhorias juntas resultariam no melhor custo-benefício para aprimorar ainda mais os gráficos depois do lançamento do NXT.
Mapas normais dão a aparência de mais detalhes geométricos na forma de vetores normais de superfície a objetos que atualmente têm uma aparência muito lisa ao serem iluminados. Isso teria o efeito secundário de exibir muito mais detalhes de iluminação, especialmente com os novos recursos de luz que utilizam vetores normais de superfície como dados de entrada (irradiação, oclusão de ambiente, iluminação especular melhorada, etc).
Porém, temos dois grandes desafios pela frente para implementar os mapas normais. O primeiro é o enorme trabalho de produzi-los a partir de versões em alta resolução de todos os modelos existentes no RuneScape, alguns dos quais nem existem! O segundo é descobrir uma forma de introduzi-los com cuidado para não destruir a continuidade visual do jogo. Há também a questão do maior uso de memória da GPU, mas isso só deve afetar os jogadores com máquinas muito antigas.
A segunda melhoria relacionada às texturas tem como propósito permitir que os artistas criem texturas de alta resolução. De forma geral, atualmente os artistas só podem criar texturas 128x128, uma resolução muito baixa para um jogo moderno, principalmente agora que alguns jogos já dão suporte para texturas de resolução 4K! Dobrar a resolução para 256x256 nos daria muito mais detalhes na superfície da textura para trabalhar, mas eu pessoalmente gostaria de ver texturas ainda maiores. Mais uma vez, o desafio é o mesmo que com mapas normais: a produção de texturas de alta resolução, requisitos maiores de memória de GPU e a continuidade visual apresentada pelo mundo do jogo.
Sistema de Animação Melhorado
Há um bom tempo, um novo sistema de produção de animações vem sendo criado. Isso vai finalmente permitir que usemos ferramentas padrão no setor de jogos, como Maya, para produzir nossas animações. Isso vai tirar a nossa dependência dos nossos processos e ferramentas de animação desenvolvidas internamente, que além de serem obscuras e complicadas para se trabalhar, ainda produzem um conjunto de dados muito ineficiente. O novo processo permitirá que as animações tenham um sistema de articulações adequado, mas o grande desafio tem sido automatizar a conversão das nossas animações existentes para o novo formato, um feito verdadeiramente épico!
Essas mudanças de ferramenta vão melhorar muito a vida dos nossos animadores, já que as animações no momento são muito demoradas e inconvenientes de serem criadas. São necessárias também mais melhorias no processo para aprimorar a qualidade das animações do RuneScape.
Uma dessas melhorias seria passar a usar um processo baseado puramente em quatérnions, que não precisa quantizar substancialmente os dados de quadro durante a exportação de dados, mantendo tudo em ponto flutuante durante todo o processo de exportação a partir do Maya. Isso ajuda a eliminar pequenos erros na animação, além de torná-las mais fluidas e eficientes de se produzir.
Sombras de Luzes Pontuais e Sombras Suaves por Proximidade Percentual
Para ajudar a completar nossos sistema unificado de iluminação e sombras dinâmicas, o acréscimo de sombras de luzes pontuais é fundamental! Já falei sobre o desafio de equilibrar a qualidade e o desempenho do nosso sistema de sombras de luz solar totalmente dinâmico, e isso não vai ser diferente para as luzes pontuais. Na verdade, isso pode acabar sendo ainda mais difícil, já que teremos que dar suporte a sombras de muitas fontes de luz, então possivelmente será preciso passarmos para um sistema de sombreamento diferido ou um processo de renderização modular (ou seja Forward+).
Há também melhorias que podem ser feitas à filtragem do mapa de sombras. Atualmente usamos uma série de kernels de filtro retangular ao fazer a amostragem dos mapas de sombra para dar a ilusão de sombras com bordas suaves, mas na melhor das hipóteses isso é um fingimento. As sombras suaves por proximidade percentual tentam renderizar precisamente as sombras que ficam mais nítidas com a proximidade, que exibem uma região de sombra e penumbra com base na distância do oclusor, então isso será algo apenas para as placas de vídeo mais avançadas.
Iluminação Global Melhorada
Como vocês devem ter visto no meu post anterior, o acréscimo de irradiação e oclusão de ambiente teve um impacto significativo na iluminação do RuneScape. A questão agora é: como podemos aprimorar isso?
O novo sistema de iluminação global representa uma enorme melhoria em relação ao cliente Java, mas não pode ser melhorado muito além disso. Poderíamos usar uma combinação de oclusão direcional do espaço de tela (SSDO) e oclusão de ambiente em larga escala, mas os benefícios seriam mínimos.
O melhor caminho a seguir é elevar verdadeiramente o nível dos gráficos. Isso seria feito através de uma solução de iluminação em tempo real conhecida como rastreamento cônico de voxel, que é essencialmente um rastreamento de raios aproximado que é usado para obter luz indireta do primeiro reflexo. Atualmente a melhor implementação é oferecida pela Nvidia GameWorks, mas ela depende de recursos de GPU muito avançados, então poucos jogadores teriam acesso a ela.
Há uma solução que exige menos do computador, conhecida como volumes de propagação de luz em cascata (LPV), que funcionaria em mais máquinas, mas ela apresenta problemas de qualidade e estabilidade, principalmente a grandes distâncias. Alguns jogos que usam LPV adotam uma abordagem híbrida, recorrendo à SSDO depois que a LVP atinge seus limites, o que também poderia ser uma opção para nós.
Reflexos Melhorados e Iluminação Baseada em Imagem
Os reflexos nos jogos são, na verdade, uma forma de simular a iluminação especular indireta do ambiente - na vida real, todo objeto exibe essa característica em diferentes graus. A quantidade de luz refletida por um objeto depende do quão brilhante é a superfície do objeto. Reflexos de espaço de tela e mapas cúbicos com correção de paralaxe são duas técnicas modernas que tentam contornar as limitações dos reflexos planares padrões e dos reflexos de sondas ambientais posicionadas manualmente.
O melhor que podemos esperar inicialmente é provavelmente a introdução de reflexos de espaço de tela em modelos que já possuem mapeamento ambiental, o que também permitiria reflexos em superfícies curvas. Para além disso, seria legal combinar essa técnica com mapas cúbicos com correção de paralaxe, mas isso exigiria envolvimento dos artistas e mudanças no processo.
Sombreamento Baseado em Física (PBS)
O sombreamento baseado em física já existe há um bom tempo nos jogos modernos. Esse é o nome dado ao uso de equações de iluminação melhoradas que tentam simular a forma como a luz interage com as superfícies dos objetos de uma maneira mais correta fisicamente do que outros modelos de iluminação tradicionais utilizados em jogos. Essa também é uma forma de criar materiais e texturas que funcionam independentemente do ambiente de iluminação. Muitas das técnicas foram trazidas da indústria de efeitos visuais do cinema, mas só se tornaram viáveis com a chegada de placas de vídeo mais modernas.
Outro aspecto fraco do modelo de iluminação atual do RuneScape é a falta geral de reflexão especular ou, em outras palavras, a forma como as coisas são tão opacas. O NXT agora sempre aplica uma quantia padrão de iluminação especular no terreno e nos modelos caso ela não tenha sido especificada pelos artistas, o que melhora a vibração da iluminação até certo ponto. Porém, como ela é aplicada em tudo, essa iluminação precisa ser sutil para que as coisas todas não pareçam ser de plástico.
A PBS já pode ser obtida programaticamente até certo ponto, bastando adicionar uma função de distribuição de refletância bidirecional (BRDF) melhorada às equações de iluminação usadas na renderização dos modelos e terrenos no cliente NXT. Porém, sem o envolvimento dos artistas, os benefícios não seriam vistos. Se houver tempo, podemos melhorar as configurações de iluminação de alta qualidade, principalmente agora que as novas opções gráficas nos dão mais flexibilidade nesse sentido.
Atenuação/Decaimento de Luzes e Luzes de Área Melhoradas
O modelo atual de atenuação e decaimento de luz pontual usado no RuneScape não é intuitivo para os artistas e causa muitos efeitos indesejados que podem ser vistos tanto em Java quanto, até certo ponto, no NXT. Se passarmos para um modelo padrão de atenuação/decaimento de luz pontual (ou mesmo um modelo de decaimento do quadrado inverso baseado em física, como usado pelo Unreal 4), o decaimento das luzes seria mais natural e facilitaria a vida dos nossos artistas. O problema de tornar isso realidade, assim como no caso de muitas outras melhorias, é saber como atualizar as luzes pontuais atuais sem destruir os ambientes de iluminação já existentes.
Luzes de área (fontes de luz não pontuais) permitiriam aos artistas um controle maior sobre as áreas influenciadas pelas luzes. Um exemplo disso seria uma luz com uma superfície retangular plana. As luzes de área também andam de braços dados com o sombreamento baseado em física. O desafio seria a integração do processo, o suporte do mecanismo e o treinamento de artistas para utilizá-las de forma eficaz.
Iluminação de Partículas e Billboards Melhorada
Outro recurso que quero melhorar é a falta de iluminação em partículas e billboards. A iluminação realística de partículas ainda não tem uma boa solução em tempo real, mas há soluções que vão além da difusão de Lambert básica, que tentam levar em consideração a densidade das nuvens de partículas para simular as suas próprias sombras e transparência. Se essa solução for combinada com a projeção de sombras de partículas, a aparência das cenas será mais consistente, além de ter o benefício de poder reutilizar os mesmos efeitos de partícula em ambientes com iluminação diferente.
Iluminação Volumétrica e Raios de Sol
Jogos de gerações anteriores modelavam aspectos da iluminação volumétrica, como os raios de sol entre as nuvens, usando uma única técnica de pós-processamento. Apesar de ser um efeito bonito, ele não é muito convincente, além de exibir pequenos erros com frequência e ser limitado a apenas uma fonte de luz dominante.
A melhor solução unificada para simular fenômenos naturais como raios de sol é uma técnica conhecida como dispersão de luz volumétrica. Essa é uma solução mais abrangente que permite criar raios de várias fontes diferentes, não apenas o sol, além de cuidar de toda a dispersão atmosférica que você precisar. Nenhuma dessas técnicas exigiria muito envolvimento artístico ou processual, tornando-as candidatos ideais para melhorar nosso modelo existente de dispersão de luz e neblina.
Vulkan, DirectX12 e Metal - minha nossa!
Há muitas novidades quando o assunto é APIs de renderização. Essas novas APIs foram criadas em nível mais baixo do que as formas atuais do OpenGL e DirectX, com interfaces mais parecidas com console, tudo com o objetivo de reduzir o uso da CPU ao fazer as chamadas de API e permitir a renderização em vários núcleos.
Talvez você se surpreenda em saber que nenhuma dessas novas APIs lhe beneficiarão muito com apenas uma conversão direita do OpenGL ou D3D, presumindo que a renderização seja feita em uma única thread. Porém, elas se destacam muito quando permitem que os desenvolvedores criem buffers de comandos na GPU para passagens de renderização em vários núcleos da CPU. Ainda assim, se a principal limitação para o desempenho dos seus aplicativos for a placa de vídeo, não haverá muitos ganhos. A maioria das máquinas que conseguem executar o NXT é limitada pela GPU, não pela CPU, principalmente quando o hardware é menos avançado.
Mas isso não quer dizer que não temos a intenção de dar suporte a essas incríveis APIs! A verdade é que mal podemos esperar para experimentar pelo menos uma delas - os desenvolvedores gráficos adoram tudo o que dê uma chance de melhorar o desempenho. Entre os três, o Vulkan provavelmente vai ser o vencedor, já que funciona em várias plataformas e adiciona backends para DirectX12, enquanto o Metal não nos ofereça muito mais, apenas toma mais tempo dos desenvolvedores e complica mais a etapa de renderização.
Mas não vai ser o caso de simplesmente adicionar um backend de Vulkan, pois como já mencionei, a renderização com vários núcleos é onde essas APIs mostram a sua força, então será preciso adaptar nossa arquitetura de renderização para permitir isso.
Utilização de Vários Núcleos Melhorada
O cliente NXT utiliza os outros núcleos da CPU para carregamento de recursos, irradiação, operação de cache de disco e áudio. É por isso que o tempo de carregamento do jogo foi reduzido significativamente para a maioria dos jogadores que possuem um bom processador. Porém, isso foi feito para sistemas específicos sem grandes preparações e, de forma geral, os núcleos adicionais da CPU não são acionados, principalmente quando nada está sendo carregado.
Então você me pergunta: como podemos aproveitar mais o poder de processamento não utilizado? Daqui para frente, é preciso desenvolver um sistema de trabalho multi-core para fins gerais. Com um sistema assim, podemos fazer processamento paralelo com mais precisão em computadores que ofereçam essa possibilidade. Dois exemplos disso são as animações e a atualização de partículas, que podem ser muito pesadas para a CPU, e que ainda são calculadas por uma única thread no cliente NXT.
Se adicionarmos suporte para o Vulkan, qualquer sistema de trabalho novo terá um papel fundamental em tornar realidade a construção do buffer de comandos em paralelo multi-core. Isso definitivamente garantiria que muitos núcleos fossem totalmente utilizados durante a maior parte da renderização, levando a ganhos enormes no desempenho da CPU.
Suporte ao Navegador
A execução do cliente no navegador ainda é um plano real, mas não será possível na data de lançamento devido a limitações atuais dos navegadores (como a ausência de threads reais, suporte para instruções vetoriais e WebGL 2.0). Porém, a boa notícia é que esses recursos estão presentes até certo ponto na versão beta dos navegadores, então em algum momento no futuro próximo (com sorte, no fim de 2016), eles serão incluídos nas versões públicas. Quando isso acontecer, nós também já deveremos ter uma versão para navegador do RuneScape NXT pronta para ser jogada, já que já temos acesso beta aos recursos que faltam, permitindo que continuemos o desenvolvimento até as versões novas dos navegadores serem disponibilizadas ao público.
Interfaces Escalonáveis
Muitos de vocês perguntaram se as interfaces do RuneScape vão funcionar corretamente em telas de 2K, 4K e 8K no futuro. A resposta é que atualmente elas não funcionam bem nessas telas de alto PPI porque tudo é posicionado de acordo com as coordenadas exatas dos pixels na tela.
Corrigir isso representa um trabalho enorme, e a solução ideal de usar um espaço de dispositivo normalizado para posicionar todos os elementos da interface pode não ser viável devido à enorme quantidade de componentes que foram programados sob medida. Talvez tenhamos que criar uma solução inovadora para que o sistema possa redimensionar as interfaces de modo inteligente de acordo com a resolução.
Comentários Finais
Esperamos que o NXT seja só o começo e que, depois do lançamento, possamos trabalhar nesses recursos novos para deixar a sua experiência no RuneScape melhor e mais imersiva.
Obrigado pela atenção!
Mod Lordgit
Programador Gráfico Principal