한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L1 Processo do jogo no cliente

Carga de renderização com muitos personagens Render/animation cost of crowds

ID da causa cg-crowd · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Quando centenas de jogadores aparecem na mesma tela, como em guerras de castelo ou world bosses, o custo de desenhar tudo passa do que o aparelho aguenta.

Por quê Centenas de personagens e efeitos se sobrepõem na mesma tela → Efeito O custo de animações, sombras, nomes acima dos personagens e efeitos cresce com o número de jogadores → Na tela O FPS cai (60 → 15), todos os movimentos engasgam e os comandos também respondem com atraso

Sintomas
Engasgos, Input lag
Fatores
Paralisação
Quem é afetado
Local ou canal específico, Só eu
Quando
Quando junta muita gente
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Usar simplificação por distância (LOD), limitar o número de personagens exibidos, oferecer opção de efeitos simplificados, reduzir a frequência de atualização das animações.
Números de referência
Mesmo com 0,02–0,1 ms por personagem, 300 personagens somam 6–30 ms. O orçamento do frame a 60 FPS é de 16,7 ms, então só isso já consome mais de 1/3 dele e, no pior caso, estoura.
No gráfico
Sobe com a carga · Frame time, número de personagens na tela
Onde olhar
Comparar o frame time e o CPUBusy/GPUBusy do PresentMon antes e depois de uma guerra de castelo ou world boss. Em build de desenvolvimento, stat Unit no Unreal (tempo da game thread, da render thread e da GPU)
Confirma se
O frame time sobe junto com o número de personagens na tela e melhora na hora ao ativar o limite de personagens exibidos ou a opção de efeitos simplificados
Descarta se
Picos sem relação com o número de jogadores: “Picos de frame time” ou “Coleta de lixo (GC) no cliente”. FPS normal, mas só o movimento dos outros atrasa: “Gargalo no processamento de pacotes na thread principal”
Como verificar
Verificação no ambiente do jogador

Fontes

  1. Introduction to level of detail Unity
    Sem LOD, objetos que aparecem pequenos na tela são desenhados com a mesma complexidade; o LOD reduz o custo de renderização
  2. Animation Budget Allocator in Unreal Engine Epic Games
    Reduz dinamicamente a atualização (tick) das animações de skeletal meshes para manter o tempo gasto com animação dentro do orçamento
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    Com FrameTime, CPUBusy e GPUBusy, dá para saber se é a CPU ou a GPU que atrasa o frame
  4. Stat Commands in Unreal Engine Epic Games
    stat Unit: frame time total e tempo da game thread, da render thread e da GPU

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Engasgos) em outras camadas

Ver o card interativo, com figuras e simulações