Em armazenamento lento, como um HDD, a leitura de texturas e modelos de um mundo aberto não acompanha o deslocamento do personagem: entidades aparecem tarde ou o jogo engasga esperando a leitura.
Por quê Deslocamento rápido com montaria ou teletransporte, ou entrada em um lugar cheio de gente, exige muitas texturas e modelos novos de uma vez → Efeito Um armazenamento lento como o HDD não lê na velocidade necessária, as leituras se acumulam na fila e alguns carregamentos fazem a thread principal esperar até o fim → Na tela Texturas borradas por um tempo, prédios e personagens aparecendo tarde, e engasgos ou travamentos nos momentos em que o jogo espera a leitura
Em movimento ou ao trocar de mapa, Quando junta muita gente
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Externo (Externo)
O que fazer (Equipe de desenvolvimento)
Usar streaming assíncrono que não faça a thread principal esperar a leitura, pré-carregar conforme a direção e a velocidade do deslocamento, mostrar primeiro versões de baixa resolução (mipmaps) e modelos simples e trocar depois, limitar por um instante a velocidade de deslocamento ou usar uma tela de carregamento quando o streaming atrasar em deslocamentos rápidos, informar nos requisitos mínimos e recomendados se o SSD é obrigatório.
O que fazer (Externo)
Orientar os jogadores a instalar o jogo em um SSD e a verificar se há downloads ou varreduras de antivírus rodando no mesmo disco.
Números de referência
Segundo a Microsoft, discos rígidos antigos leem dezenas de MB por segundo e SSDs NVMe leem vários GB por segundo; jogos da geração anterior usavam cerca de 50 MB por segundo para streaming. Um jogo pensado para a velocidade de um SSD, que lê muito mais que isso, tende a não acompanhar o deslocamento quando roda em HDD.
No gráfico
Alto só em alguns · Número de picos de frame (por tipo de armazenamento), latência de leitura do disco
Onde olhar
Registrar juntos, durante deslocamentos rápidos, PhysicalDisk\Avg. Disk sec/Read (tempo médio de uma leitura) e Current Disk Queue Length do Monitor de Desempenho do Windows e o frame time do PresentMon. Em build de desenvolvimento, stat Streaming e stat AsyncLoad no Unreal, e o aviso AssetBundle.asset/allAssets no Profiler do Unity (o resultado foi pedido antes de o carregamento terminar e a thread principal ficou esperando)
Confirma se
Em deslocamentos rápidos, a latência de leitura e a fila do disco disparam e, no mesmo momento, há picos de frame ou texturas e entidades aparecem tarde. A mesma cena rodando em SSD não tem o problema
Descarta se
Disco ocioso e texturas borradas: “Falta de memória de vídeo (VRAM)”. Normal a partir da segunda visita ao mesmo lugar: “Carregamento síncrono e compilação de shaders na thread principal”
Como verificar
Verificação no ambiente do jogador
Saiba mais
Se o jogo trava só na primeira vez e depois fica normal, o caso está mais para “Carregamento síncrono e compilação de shaders na thread principal”; se o problema se repete a cada deslocamento e só em PCs com armazenamento lento, é esta causa. A “Falta de memória de vídeo (VRAM)”, em que texturas são descarregadas e recarregadas porque a memória de vídeo não basta, também deixa texturas borradas, então verifique a espera de leitura do disco junto com o uso de memória de vídeo. A verificação em tempo real do antivírus também pode entrar no meio toda vez que o jogo abre um arquivo e atrasar ainda mais a leitura.
Fontes
DirectStorage is coming to PCMicrosoft Discos rígidos antigos leem dezenas de MB por segundo e SSDs NVMe, vários GB por segundo; o orçamento de streaming de assets dos jogos da geração anterior era de cerca de 50 MB por segundo; jogos de mundo aberto leem e descartam a paisagem distante em tempo real durante o deslocamento
Texture and mesh loadingUnity O upload síncrono lê e envia os dados em um único frame na thread principal e causa uma pausa visível; o upload assíncrono faz o streaming ao longo de vários frames
Texture Streaming Overview for Unreal EngineEpic Games O streamer aumenta e reduz a resolução das texturas (mips) conforme o ponto de vista, faz a maior parte do cálculo em threads de trabalho assíncronas e carrega primeiro os mips visíveis na tela
Profiler markers referenceUnity Aviso AssetBundle.asset/allAssets: o resultado foi pedido antes de o carregamento terminar, e a thread principal parou para esperar
Stat Commands in Unreal EngineEpic Games stat Streaming (memória e quantidade de texturas em streaming), stat AsyncLoad (estatísticas de carregamento assíncrono)
Windows Performance Monitor Disk Counters ExplainedMicrosoft Avg. Disk sec/Read é o tempo médio para concluir uma leitura (latência de I/O); Current Disk Queue Length é o tamanho da fila do disco no momento da medição