Manifesto de Desenvolvimento: Performance

O Path of Exile recebe conteúdos e recursos significantes várias vezes por ano à medida em que liberamos novas expansões e ligas de desafio. Manter o jogo com uma boa performance com estas adições é um desafio constante. Esse post de manifesto detalhará alguns desses problemas e o que temos feito sobre o assunto.

Performance do Servidor e Oscilação do Lockstep
O modo Lockstep funciona permitindo que a simulação do jogo só siga seu caminho ao completar e corrigir as informações recebidas pelo servidor. É por isso que ele não perde a sincronia - porque está fazendo exatamente as mesmas decisões que o servidor fez. Algumas vezes, no entanto, as informações necessárias não foram recebidas a tempo e o frame atual precisa ser renderizado sem fazer com que a simulação se mova adiante. Esta pequena travada é diferente de um congelamento do cliente porque os efeitos de partículas continuam, mas tudo continua travado no lugar. Uma vez que os arquivos corretos tenham sido recebidos, o cliente acelera o tempo ligeiramente para se atualizar com o servidor.

Existem duas possíveis razões pelas quais os arquivos podem se atrasar - latência de internet e performance do servidor.

Alguns usuários possuem conexões de internet instáveis. Flutuações em sua latência se manifestam como oscilações do lockstep. Quando ficamos sabendo de problemas de rede com os provedores, nós reportamos estes problemas a eles para que sejam resolvidos para que as pessoas possam jogar de forma adequada.

Problemas de performance com os servidores e instâncias de nosso jogo também podem causar oscilações do Lockstep. Apesar da performance do tempo de execução do software nos servidores, na maioria das vezes, só afetarem o tamanho das nossas contas com hospedagem, situações complexas de combate podem, ocasionalmente, demorar demais para calcular um frame de resultados e fazer com que aquele frame oscile.

Recentemente nós identificamos alguns problemas relacionados à performance de combate que agora estão na nossa mira para serem consertados. Ainda não temos uma solução para estes, mas as adicionaremos assim que tivermos (nas próximas semanas?).

Uso de Memória, Síncronos de Carregamento e Tempo de Carregamento
Vou começar explicando como o gerenciamento de memória do Path of Exile funciona. Isso fará com que seja mais fácil entender o que estamos fazendo para melhorá-lo.

Para mostrar um conteúdo artístico na tela ou tocar um som, isso tem que ser carregado na memória. O Path of Exile possui em torno de 7,7gb de conteúdos e nós só podemos carregar uma pequena parte deles de uma vez. Carregar um conteúdo faz com que o jogo pause enquanto está sendo lido no disco. É pra isso que as telas de carregamento servem, e existem dois tipos de telas de carregamento nas quais podemos carregar conteúdos.
A tela de carregamento que aparece quando você inicia o jogo é a mais apropriada para conteúdos que provavelmente serão utilizados na sessão do jogo. Isso inclui coisas como as classes de personagens principais ou itens.

Telas de carregamento que aparecem antes de mapas são melhores para conteúdos que acontecem durante aquele mapa, como tipos de ambientes, monstros e habilidades utilizadas por eles.

Se um tipo de conteúdo não é carregado corretamente em uma dessas telas, então ele fará com que o cliente do jogo o carregue quando ele aparecer pela primeira vez. Por exemplo, ao abrir um Cofre você pode gerar um Exilado Renegado aleatório. Se os efeitos e microtransações que o Exilado Renegado utiliza já não estiverem carregados, então o cliente para, potencialmente de uma forma bem perigosa.

Pré-carregar conteúdos tem um custo significante: Tudo que é carregado no começo aumenta a quantidade de tempo que o Path of Exile demora para carregar. Isso também aumenta o uso de memória. Em uma versão 32-bit do Windows, somente o carregamento de 3gb de arquivos são permitidos. Em uma versão 64-bit do Windows, o Path of Exile pode carregar 4gb de arquivos de uma vez. Se isso for excedido, o jogo trava e fecha, pois não consegue alocar mais memória. Ele pode até mesmo travar e fechar antes de exceder, por problemas de fragmentação de memória (se não existirem buracos grandes o suficiente para encaixar os arquivos, devido a uma grande sessão de jogo).

Por outro lado, se nós optarmos por não pré-carregar conteúdos, então teremos travadas significantes que ocorrerão durante o gameplay quando conteúdos forem encontrados pela primeira vez. Em discos rígidos mais lentos, ou quando antivírus ou desfragmentadores de disco estão rodando, os congelamentos relacionados a síncronos de carregamento podem demorar bastante tempo. Isso é inaceitável durante o combate, por razões óbvias.

Por vários anos nós vínhamos mantendo uma lista seletiva de conteúdos que deveriam ser pré-carregados. Estávamos tentando atingir um equilíbrio perfeito entre carregar as coisas que eram necessárias, mas não carregar muitas coisas para que não excedêssemos a memória permitida. A medida em que o tamanho de nossos arquivos foram aumentando, nós tivemos que desenvolver sistemas cada vez mais complexos para gerenciar quais conteúdos deveriam estar na memória o tempo todo.

Recentemente temos dado uma varrida por todo este conteúdo para descobrir qual a hora exata para carregar cada um deles. A primeira parte destas mudanças foi lançada no 2.2.1e, e temos mais por vir no 2.2.2 na semana que vem e em patches subsequentes. As mudanças até agora reduziram tanto o travamento do síncrono de carregamento quanto a memória utilizada/tempo de carregamento. As raras travadas e fechamentos que ocorriam ao mudar de áreas em sistemas 64-bit já não existem mais.

Ao mesmo tempo, um dos nossos programadores orientado à performance tem trabalhado em um novo tipo de sistema de gerenciamento que pode carregar conteúdos de forma assíncrona. Isso resultará em uma redução adicional do tempo de carregamento e reduções posteriores ao travamento. Esse sistema ainda não está pronto para ser testado, mas esperamos que seu lançamento seja mais pro final deste ano.

Sobrecarga de Áudio
Alguns jogadores optam por desabilitar o áudio para melhorar a performance do cliente e reduzir o uso de memória.

Atualmente estamos trabalhando na mudança para o sistema de áudio FMOD, que é uma engine comercial excelente. Isso tanto oferecerá melhorias na performance do cliente, quanto também reduzir o uso de memória, nos permitindo manter os arquivos de áudio de forma compactada na memória. Esperamos fazer o lançamento desta melhoria juntamente com a liga de desafio 2.3.0.

Draw Calls
Todo objeto quer precisa ser renderizado em uma cena é um Draw Call. Processar tudo isso consome o CPU (junto a qualquer renderização posterior acontecendo na GPU). No Windows XP isso fica extremamente lento. Reduzindo o número de Draw Calls ajuda a melhorar a performance em situações onde o CPU é o gargalo, e não a GPU.

Recentemente nós encontramos um problema que afeta certos tipos de iluminações no Path of Exile. Isso aumentaria drasticamente o número de Draw Calls na cena quando essas iluminações estivessem presentes. Nós já enviamos o conserto para este problema (que ajudou a reduzir Draw Calls) e temos um conserto exclusivo para o Labirinto sendo testado para um patch posterior.

Cliente 64-bit com DirectX 11
No futuro pretendemos lançar um cliente alternativo do Path of Exile como um executável 64-bit que utilizará o DirectX 11 ao invés do DirectX 9. Será preciso possuir Windows Vista ou superior (e um CPU 64-bit) para rodá-lo. O cliente antigo ainda funcionará para o Windows XP ou máquinas 32-bit, mas não possuirão as melhorias de performance que virão com o DirectX 11. Este lançamento está sendo planejado para 2017.

Estabilidade do Servidor
Nós tivemos um número inaceitável de problemas com a estabilidade do servidor nas últimas semanas. Nossa arquitetura de rede envolve um conjunto de servidores Master em Dallas, TX. Nossos gateways ao redor do mundo (na Europa, América, Brasil, Austrália, etc.) se conectam a estes servidores Master. Caso aconteça um incidente de rede na internet em algum lugar, isso afetará esta conexão, então usuários no gateway afetado serão desconectados. Se o incidente de rede ocorre no datacenter onde se encontram nossos servidores Master, ou próximo a ele, então todos os usuários são afetados. Recentemente temos vistos rupturas como estas quase todos os dias.
Estes problemas de rede geralmente estão fora de nosso controle, mas a parcela de responsabilidade do nosso lado faz com que nós entreguemos uma boa experiência de jogo para vocês. Estamos verificando agressivamente quais opções estão disponíveis para nós para que consigamos resolver isso. Pode ser que isso envolva migrar os servidores Master para longe de sua localidade atual, por exemplo.

A boa notícia é que, fora estes problemas de rede, a estabilidade dos servidores atuais em si (diferente de sua conectividade com a internet) está bem sólida no momento. Nós tivemos problemas no passado onde parte do nosso código se chocou com o recente aumento de jogadores, mas todos estes problemas já foram resolvidos.

Conclusão
Normalmente nós faríamos essas melhorias sem atrair nenhuma atenção para como as partes internas do jogo funcionam ou o que está errado. Muitas discussões têm acontecido na comunidade a respeito da performance recentemente, então nós esperamos que este post ajude a explicar alguns dos desafios técnicos que temos resolvido e algumas das melhorias promissoras que esperamos realizar. Como vocês podem ver, algumas das melhorias acontecerão logo logo, e outras serão lançadas nos próximos meses. Vários de nossos programadores agora estão permanentemente trabalhando com melhoria de performance, e já estamos colhendo os frutos destes investimentos. Estamos realmente empenhados em continuar melhorando a performance do Path of Exile a medida em que liberamos alguns dos conteúdos interessantes e ligas de desafio que estão por vir.
Último bump em 6 de abr de 2016 22:58:17
Fazendo parte do grupo que parou de jogar recentemente devido à performance atualmente risível do jogo, fico feliz em saber que vocês reconhecem diversos problemas relacionados à performance do jogo (mas não todos).

O que mais me impressiona no Path of Exile é como um jogo com uma engine tão precária conseguiu chegar tão longe, mas já é mais que passada a hora de admitir que essa engine nasceu ultrapassada, e portar o jogo pra algo melhor, afinal, os problemas financeiros que a GGG tinha ao começar o jogo não existem mais, e certamente é possível pra vocês adquirirem ferramentas da nova geração.

É surreal um jogo como Path of Exile, sem nada de mais, ter problemas pra rodar até em pcs da nasa. SURREAL.

A última vez que olhei a data estávamos em 2016, Direct X11 foi lançado, salvo engano, em 2009, e a versão de 64bits do jogo só tem um vago 2017 como data de lançamento? Triste saber que terei que esperar no mínimo um ano pra voltar a jogar. Mais triste ainda é ver vocês cometerem o mesmo erro, mas agora sem justificativa, pois a nova versão também já nascerá ultrapassada.

Eu sinceramente acho que o problema da GGG é arrogância em reconhecer os diversos problemas da engine desse jogo, e talvez apego sentimental a ela, porque ela PRECISA ser mudada se vocês quiserem que esse jogo continue.

Caso eu esteja errado e o problema seja financeiro, sugiro duas coisas:

>Primeiro que vocês utilizem uma engine multiplataforma, possibilitando que uma maior gama de pessoas possam jogar, e saindo da porcaria do Windows: https://www.khronos.org/vulkan/

>Segundo que vocês façam uma campanha de financiamento dos custos necessários pra esse port, como um kickstarter, mas diretamente do site da GGG, não seria muito diferente dos pacotes de apoiadores, mas diretamente ligado a essa intenção, de refazer o jogo, com transparência com relação aos custos. Tenho mais que certeza absoluta que a campanha seria um sucesso.
Durian | 0.6 | Automated Item Search - https://www.pathofexile.com/forum/view-thread/1507190
ExileTrade | Advance Item Search - https://www.pathofexile.com/forum/view-thread/1602257

Reportar Post do Fórum

Reportar Conta:

Tipo de Reporte

Informação Adicional