← Voltar ao início

QuantumHy

Ativo

Hytale • Version 0.4.0

serverperformancefpsclientview-distanceentitiesoptimizationsoloco-op

O QuantumHy deixa seu cliente mais fluido no Hytale cortando o quanto o servidor manda ele desenhar, e ajusta isso por jogador conforme onde você está. Em área aberta você mantém sua visão cheia; num lugar cheio e pesado ele recolhe as coisas pra seu FPS não despencar.

O cliente do Hytale é nativo, então nenhum mod mexe no renderizador. O que um mod de servidor pode fazer é decidir o quanto cada cliente precisa desenhar, e esse é o truque inteiro: menos chunks e entidades na visão significam menos coisas pra desenhar, o que significa mais frames.

Dois limites honestos. Ele só ajuda onde está instalado (seu mundo solo, seu próprio servidor, ou um servidor que o use), não num servidor que você só entra. E ele nunca empurra sua visão além do que você pediu: seu próprio raio de visão é o teto, o QuantumHy só puxa pra baixo.

QuantumHy

Desempenho

Joguei a mesma sessão duas vezes no Hytale 0.7.0: uma sem o QuantumHy e outra com o QuantumHy 0.4.0 na config padrão. Mesmo mundo, mesmo caminho, mesmas configurações do cliente, mesmo PC. Os frame times vêm direto do cliente do Hytale, capturados com o PresentMon (a ferramenta de captura dentro do CapFrameX).

PC de teste

ComponenteEspecificação
CPUAMD Ryzen 5 3600
GPUNVIDIA GeForce GTX 1650 4GB
RAM16 GB (2×8 GB)

O que eu fiz em cada parte

  • Voo rápido (60 s): voei em linha reta sobre terreno que ninguém tinha carregado, bem mais rápido do que dá pra correr, então chunks novos precisam ser gerados e enviados o tempo todo.
  • Multidão de mobs (90 s): parei e spawnei uns 150 animais ao meu redor (ovelhas, vacas, porcos, cabras, galinhas, javalis).
  • Efeitos (60 s): fiquei na multidão e spamei explosões, fogo e partículas de impacto em cima dela.
  • Voltas (60 s): dei voltas ao redor da multidão com efeitos mais leves ainda rolando, então a câmera fica varrendo os mobs.
  • Voo de volta (60 s): voltei voando pelo mesmo caminho.

Resultados

ParteSem QuantumHy (média / 1% low)QuantumHy 0.4.0 (média / 1% low)Frames acima de 50 ms
Voo rápido65 / 7142 / 4840 → 1
Multidão de mobs75 / 21128 / 736 → 0
Efeitos76 / 41121 / 790 → 0
Voltas54 / 19115 / 5812 → 0
Voo de volta58 / 15107 / 4230 → 1
Sessão inteira66 / 14123 / 5688 → 2

1% low é a média do 1% de frames mais lentos, o número que mostra o quanto os travamentos pesam.

De onde vêm os frames

  • Sem o QuantumHy o cliente desenhou uma visão de 24 chunks e recebeu todo mob num raio de 768 blocos. Com o QuantumHy ficou em 12 chunks e mobs até 48 blocos (de umas 190 entidades visíveis pra umas 50). Essa é a troca: você vê menos longe, e a multidão para de custar frames.
  • No voo rápido a borda da visão carrega um pouco atrás de você, porque ninguém se move tão rápido no survival. Correr normal (7 blocos/s) fica bem dentro do que o stream de chunks acompanha.
  • Uma sessão por configuração, então diferenças abaixo de ~5% seriam ruído. As diferenças acima não são.

Como funciona

A cada poucos segundos o QuantumHy conta as entidades nos chunks ao redor de cada jogador como medida do custo de render, suaviza esse sinal e o transforma num único fator de redução. Esse fator move duas alavancas ao mesmo tempo:

  • O raio de visão em chunks, pra parar de transmitir terreno distante quando está movimentado.
  • O raio de stream de entidades em blocos, pra o servidor parar de mandar mobs distantes. Isso é independente dos chunks e é de onde vem a maior parte do ganho quando você está olhando pra uma multidão.

O raio não volta no instante em que a área parece vazia. O expand espera a carga ficar calma, pelo menos metade do disco de density carregado, você parado (não voando) e o mundo sem hitch. Enquanto está em streaming ou no join, os cortes ficam segurados pra o cliente não ser mandado a descartar chunks que está ocupado carregando. No shrink cheio o raio de entidades cai ao piso num passe.

Recursos

  • Raio de visão em chunks adaptativo guiado pela densidade local de entidades, limitado ao seu próprio raio
  • Raio de stream de entidades adaptativo em blocos, a grande alavanca em áreas cheias de mobs
  • Freeze de expand até carga, cobertura e MSPT estarem calmos (sem dente de serra 6↔13)
  • Opt-out persistente por jogador via /q optimize off, sem afetar os demais jogadores
  • Override global opcional de LOD de entidades, desligado por padrão, para admins que querem um culling mais forte no mundo inteiro
  • Suavização de densidade pra a visão de quem se move não ficar oscilando
  • Tomada de controle automática do LeanCore pra os dois mods nunca brigarem pelo raio de visão
  • Log detalhado opcional no servidor que explica cada decisão por jogador a cada passada (off por padrão)
  • Checagem de update no boot, só para operadores ou durkz.quantumhy.admin (opt-out com checkForUpdates)
  • Limite da distância de desenho do cliente pra o cliente parar de desenhar o que o servidor parou de enviar
  • Alívio pra cliente sobrecarregado: um cliente que fica pra trás recebe raio menor e envio de chunks mais suave
  • Orçamento de efeitos distantes pra partículas e sons 3D; efeitos perto de você sempre passam
  • Atenção à memória do LeanCore: raio menor enquanto o LeanCore reporta o heap apertado
  • Extras opcionais, desligados por padrão: menos updates de posição pra entidades distantes, merge de itens mais largo sob pressão no servidor

Instalação

  1. Baixe QuantumHy-0.4.0.jar na aba Files da CurseForge
  2. Coloque o JAR na pasta mods/ do servidor, ou no solo Windows: %AppData%\Hytale\UserData\Mods
  3. Inicie o servidor. A config é criada como QuantumHy.json na pasta de dados do plugin

Comandos

/q status
/q optimize on
/q optimize off
/q help

Aliases: /quantumhy, /qhy. Jogadores veem apenas o próprio estado de otimização em /q status; admins e o console do servidor veem o estado completo do runtime.

Config

As configurações do servidor ficam no QuantumHy.json, criado no primeiro boot. As escolhas dos jogadores ficam no PlayerPreferences.json. Os padrões funcionam de cara: sem teto fixo de visão, adapta só quando está cheio. Defina targetClientViewRadius acima de 0 pra trocar distância de visão por FPS em todo lugar. Defina checkForUpdates como false pra pular a checagem de versão no boot. Referência completa das chaves: documentação.

Permissões

  • durkz.quantumhy.admin: receber avisos de update in-game e ver o /q status completo. Operadores do servidor herdam isso via *.

Rodando com o LeanCore

Se você roda o LeanCore junto, o QuantumHy resolve a sobreposição pra você. Os dois podem ajustar o raio de visão do cliente e só um deve, então o QuantumHy assume: no boot ele detecta o LeanCore, desliga a governança de raio de visão do LeanCore e passa a controlar o raio ele mesmo. O LeanCore continua fazendo todo o resto (raio de simulação, throughput de chunks, memória). Você não precisa tocar na config do LeanCore. Defina leanCoreTakeover como false pra deixar o LeanCore em paz, ou yieldToLeanCoreViewRadius como true pra deixar o LeanCore manter o raio de visão.

Recomendado

  • Solo ou seu próprio servidor: deixe os padrões. Você só perde distância de visão quando está realmente cheio.
  • Quer FPS em todo lugar: defina targetClientViewRadius entre 12 e 16 pra limitar a distância de visão até em área aberta.
  • Prefere os limites originais do servidor: use /q optimize off. Sua escolha persiste após reiniciar.
  • Ligue verboseLog só pra diagnosticar; o padrão é off.
  • Deixe checkForUpdates ligado a menos que você não queira o aviso de JAR novo para operadores.

Limitações conhecidas

  • O QuantumHy não consegue ler o FPS do cliente. Ele reage à densidade local de entidades, ao estado de streaming, à pressão de entidades visíveis e ao MSPT do servidor.
  • /q optimize off desliga os ajustes de visão e stream de entidades daquele jogador. Controles globais ativados explicitamente por um admin ainda afetam o mundo.

Licença

Licença MIT

Para donos de servidor

Precisa de permissões, comandos e config?

O guia completo cobre cada permissão, comando de admin, exemplos LuckPerms e todas as opções de configuração.

Ler documentação do servidor