Texturas, arquivos e packs · 4 min de leitura

Aviso de "oversized asset" do FiveM: o que é e como corrigir

Ler em: English · Español · Français · Deutsch · Italiano · Polski · Türkçe · Русский

Você inicia o servidor e o console se enche de linhas como esta:

text
Asset <resource>/<file>.ytd uses <size> MiB of physical memory.

Este é o aviso de asset grande demais do FiveM. Não é um erro e o arquivo continua carregando, mas ele mostra quais arquivos são pesados o bastante para dar problema. Veja o que ele mede, por que o tamanho do arquivo em disco diz pouco e como reduzi-los.

O que o FiveM mede

Na inicialização, o FiveM lê o cabeçalho de cada arquivo da pasta stream de um recurso. Esse cabeçalho diz quanta memória o arquivo ocupa depois de carregado, em duas partes: memória física (memória gráfica: texturas e buffers de vértices) e memória virtual (memória do sistema: o resto do asset). Os limites, lidos no próprio código do FiveM, são os mesmos para as duas:

Memória de um arquivoO que o FiveM faz
mais de 16 MiBmostra o aviso
mais de 32 MiBmostra em amarelo
48 MiB ou maisacrescenta: "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)."
mais de 64 MiBmostra em vermelho

O aviso vale por arquivo. Um .ytd de 20 MiB é sinalizado mesmo que o resto do seu servidor seja leve.

Por que o tamanho em disco engana

Arquivos em streaming são comprimidos no disco, e o aviso conta o que eles ocupam carregados. Para uma textura, isso é o tamanho dela no formato da GPU, com todos os níveis de mipmap, arredondado para páginas de memória inteiras. Uma referência aproximada, antes desse arredondamento:

Textura (com mipmaps)DXT1 (sem transparência)DXT5 (com transparência)
1024 × 10240,67 MiB1,33 MiB
2048 × 20482,67 MiB5,33 MiB
4096 × 409610,67 MiB21,33 MiB

Assim, uma única textura DXT5 de 4096 × 4096 já passa do limite sozinha, e um .ytd com algumas texturas de 2048 pode passar do limite parecendo pequeno no explorador de arquivos. O arredondamento para páginas pode deixar o total bem acima da soma das texturas.

Se um arquivo é sinalizado pela memória virtual (do sistema), não são as texturas: são os outros dados do asset, como a colisão. Reduzir as texturas não muda isso.

Encontre de uma vez todos os arquivos grandes demais

Em vez de ler o console, arraste sua pasta resources inteira para o Server Budget. Ele lê os mesmos cabeçalhos no seu navegador (nada é enviado) e lista:

  • Oversized (grandes demais): os arquivos com mais de 16 MiB de memória gráfica, do pior para o menos pior.
  • By resource (por recurso): o que cada recurso transmite, ordenado por memória.
  • Streamed twice (transmitido duas vezes): nomes de arquivo que mais de um recurso transmite. O jogo recebe só um deles, então mantenha uma cópia só.

A lista Oversized do Server Budget conta a memória gráfica. Um arquivo que o console sinaliza só pela memória virtual não aparece nela.

Reduza as texturas

Pegue os arquivos que o Server Budget marca (.ytd, .ydr, .yft, .ydd) e arraste-os para o Asset Optimizer:

  1. Defina Largest texture size (tamanho máximo da textura). 1024 é o padrão; 2048 é uma escolha comum para carros e liveries vistos de perto.
  2. Deixe Add missing mipmaps (adicionar os mipmaps que faltam) marcado: texturas salvas sem eles os recebem de volta.
  3. Confira a estimativa ("At 1024 px: about … less texture memory") e a tabela de arquivos.
  4. Clique em Download the lighter files (.zip) (baixar os arquivos mais leves). Você recebe cada arquivo com o próprio nome: coloque-os no lugar dos antigos.
Asset Optimizer com quatro arquivos stream arrastados: o tamanho de cada um, a maior textura e a memória de textura que 1024 px economizaria, com Add missing mipmaps marcado
Quatro arquivos de teste: um tem texturas de 2048 px e seis não têm mipmaps; em 1024 px economiza uns 9 MB de memória de textura.

Uma textura com mipmaps é reduzida tirando os níveis maiores, sem recomprimir, então ela fica exatamente como era vista de um pouco mais longe. Uma textura sem mipmaps é refeita com todos os níveis, no tamanho que você escolheu, ou no próprio tamanho se for menor.

Pacotes que repetem a mesma textura em vários dicionários também podem compartilhá-la: o Texture Dedupe move as texturas repetidas para um .ytd compartilhado. Depois arraste a pasta de novo para o Server Budget para ver o resultado.

Perguntas

16 MiB é um limite rígido?
Não. O FiveM continua transmitindo o arquivo e só avisa. A partir de 48 MiB, o próprio aviso diz que esses assets vão causar problemas de streaming, então trate tudo acima de 16 MiB como arquivo a reduzir.
O aviso conta o tamanho do arquivo em disco?
Não. Ele conta a memória que o arquivo ocupa depois de carregado, lida do cabeçalho. Um arquivo pode ter bem menos de 16 MB em disco e ainda passar de 16 MiB carregado.
Texturas menores ficam piores?
De perto, uma textura de 1024 fica mais suave que uma de 2048. De longe, o jogo já desenha os níveis menores de mipmap, justamente os que o Asset Optimizer mantém.

A ferramenta para isso

Server Budget

Arraste sua pasta de recursos: memória gráfica e do sistema por recurso, cada arquivo acima de 16 MiB e cada arquivo transmitido duas vezes. No seu navegador, sem enviar nada.

Abrir Server Budget

Também útil aqui: Asset Optimizer · Texture Dedupe

Todas as ferramentas são grátis para testar, com 5 exportações por dia. Entre com o Discord para usá-las.