Otimização FiveM: como resolver texture loss e assets pesados
Como otimizar servidor FiveM e resolver texture loss: ache os assets pesados, reduza texturas com DXT1/DXT5 e mipmaps e tire seus carros do warning vermelho.
· 11 min de leitura
A maioria dos servidores FiveM que sofrem com texture loss, "city bug", entrada lenta e crash no cliente não tem problema de script. O problema é de assets: alguns carros, packs de roupa ou mapas muito mais pesados do que qualquer coisa que a Rockstar coloca no jogo, todos disputando a mesma memória de stream no PC de cada jogador. Este guia mostra de onde vem esse peso, como encontrar e como resolver texture loss no FiveM sem deixar nada mais feio.
Resumo rápido: procure no console do servidor os warnings "Asset ... uses X MiB of physical memory", ordene suas pastas
stream/por tamanho e corrija primeiro os piores. A maior parte da economia vem das texturas: baixe resoluções exageradas, use compressão DXT1/DXT5, mantenha os mipmaps e pare de mandar as mesmas texturas duas vezes.
Por que o tamanho dos assets em stream importa
Tudo o que está na pasta stream/ de um resource custa duas vezes.
- Download ao entrar. Os jogadores baixam todos os arquivos em stream antes de conseguir jogar. O FiveM guarda os arquivos em cache local, então quem volta só baixa o que mudou, mas jogadores novos e qualquer um depois de um update grande pagam o preço inteiro. Um servidor com vários gigabytes de conteúdo em stream perde gente na tela de loading.
- Memória de stream do cliente. O GTA V carrega e descarrega modelos e texturas da memória conforme o jogador se move, com um limite pensado para os assets da própria Rockstar. Quando as texturas de um único carro ocupam a memória de uma dúzia de carros normais, o jogo tira outra coisa para abrir espaço, geralmente as ruas e os prédios ao redor do jogador. Isso é o texture loss.
O tamanho do arquivo no disco é só uma pista. Os arquivos em stream são comprimidos, então um .ytd que parece pequeno pode ocupar muito mais na memória. O FiveM mostra o tamanho em memória, e esse é o número que importa.
O warning de "oversized assets"
Quando um resource inicia, o FXServer lê o tamanho em memória salvo no header de cada arquivo em stream e mostra um warning para tudo que for grande. A mensagem é assim:
Asset my_car/my_car.ytd uses 87.4 MiB of physical memory. Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).Os limites vêm direto do código-fonte do FXServer (ResourceStreamComponent.cpp):
| Tamanho em memória | O que aparece no console |
|---|---|
| 16 MiB ou menos | Nada |
| Acima de 16 MiB | Warning em azul |
| Acima de 32 MiB | Warning em amarelo |
| Acima de 48 MiB | Aparece a frase "Oversized assets can and WILL lead to streaming issues" |
| Acima de 64 MiB | Warning em vermelho |
A checagem é feita separadamente para memória physical (principalmente dados de textura, a parte que vai para a GPU) e memória virtual (os dados do lado da CPU, como a estrutura do modelo e a geometria). Um .ytd grande quase sempre dispara o warning de physical; um .yft ou .ydr muito denso pode disparar o de virtual.
O resource carrega mesmo assim, mas a orientação da equipe da Cfx.re é mirar mais ou menos no que um asset equivalente da Rockstar usa. Trate cada linha vermelha como bug e cada linha amarela como pendência.
Texturas: onde está a maior parte do peso
As texturas ficam dentro de dicionários de textura .ytd (ou embutidas nos modelos, mais sobre isso abaixo). A memória que uma textura usa depende de três coisas: resolução, formato e se ela tem mipmaps.

Resolução
A memória cresce com a quantidade de pixels, então cortar a largura e a altura pela metade divide o custo por quatro. Veja quanto custa uma única textura nos tamanhos mais comuns:
| Resolução | Sem compressão (A8R8G8B8) | DXT5 | DXT1 |
|---|---|---|---|
| 4096 × 4096 | 64 MiB | 16 MiB | 8 MiB |
| 2048 × 2048 | 16 MiB | 4 MiB | 2 MiB |
| 1024 × 1024 | 4 MiB | 1 MiB | 0.5 MiB |
| 512 × 512 | 1 MiB | 0.25 MiB | 0.125 MiB |
Some mais ou menos um terço em cima de cada valor para a cadeia completa de mipmaps. Uma única textura 4K sem compressão já basta para disparar o warning vermelho sozinha, e packs de carro muitas vezes vêm com várias.
Formatos de compressão
O GTA V usa formatos DDS com compressão em blocos, também chamados de formatos BC:
- DXT1 (BC1): sem alpha ou com alpha de 1 bit. A opção mais barata. Use na maioria das texturas diffuse sem transparência.
- DXT5 (BC3): canal alpha completo pelo dobro do custo do DXT1. Use quando a textura precisa de transparência suave, como vidro, decals ou cabelo.
- Sem compressão (A8R8G8B8): quatro vezes o custo do DXT5. Só vale a pena em texturas bem pequenas onde os artefatos de compressão ficam óbvios, como alguns elementos de UI.
Exportar tudo sem compressão ou em DXT5 "por garantia" é um erro comum. Converter as texturas sem transparência para DXT1 costuma ser o maior ganho individual num pack de carros.
Mipmaps
Mipmaps são cópias reduzidas de uma textura que o jogo usa para objetos distantes. Eles custam cerca de um terço a mais de memória, mas tirar os mipmaps é uma falsa economia: os objetos distantes passam a tremer e continuam usando a textura em tamanho cheio. Mantenha os mipmaps e economize memória baixando a resolução.
Tamanhos em potência de dois
Use dimensões em potência de dois: 256, 512, 1024, 2048. Não precisa ser quadrado (1024 × 512 funciona). A compressão em blocos trabalha com blocos de 4 × 4 pixels e cada nível de mip corta o tamanho pela metade, então tamanhos quebrados como 1000 × 750 comprimem mal e geram mips menores bagunçados.
Quais texturas dá para reduzir sem medo
Nem toda textura precisa do mesmo nível de detalhe. Uma ordem prática para atacar:
- Pode baixar bastante: texturas do interior e da parte de baixo, motor, pinças de freio, emblemas pequenos, tudo que a câmera quase nunca vê de perto.
- Geralmente dá para cortar pela metade: normal maps e specular maps. Os jogadores percebem uma cor borrada muito antes de perceber um normal map mais suave.
- Mantenha mais alta: a textura principal da lataria ou a livery de um veículo, rostos e as texturas de roupa mais visíveis.
Cuidado com as liveries: cada uma é uma textura separada, então dez liveries 4K custam dez vezes mais, mesmo que só uma apareça por vez.
Modelos: polígonos, LODs e texturas embutidas
Os modelos vão para o stream como .ydr (drawables), .ydd (drawable dictionaries, usados em roupas) e .yft (fragments, usados em veículos e objetos quebráveis). Se esses nomes de arquivo não são familiares, veja formatos de arquivo do GTA V e FiveM.
- Quantidade de polígonos. Modelos feitos para render ou para outros jogos muitas vezes têm muito mais geometria do que o GTA V precisa, inflando a memória virtual e o frame time.
- LODs. O GTA V troca para versões mais simples de um modelo conforme a distância. Um modelo com só um nível de alto detalhe renderiza a malha completa em qualquer distância.
- Texturas embutidas vs compartilhadas. Um modelo pode embutir suas texturas ou referenciar um
.ytdseparado. Se dez props embutem a mesma textura de madeira, você paga dez vezes. Coloque as texturas compartilhadas num único.ytd.
Quando você cria seus próprios props, essas escolhas acontecem na hora de exportar. Props personalizados no FiveM explica como um resource de props é montado.
Veículos: o vilão de sempre
Os veículos são a fonte mais comum de warnings vermelhos, por alguns motivos:
- Modelos convertidos. Carros convertidos de outros jogos muitas vezes trazem dezenas de texturas 4K e malhas extremamente densas.
- Os arquivos
_hi. Um veículo do GTA V é dividido emname.yftename_hi.yft, além dename.ytde muitas vezesname+hi.ytd. Os arquivos_hie+higuardam o modelo e as texturas de alto detalhe usados de perto; os arquivos normais deveriam ser mais leves. Muitas conversões colocam conteúdo em detalhe máximo nos dois, então o carro acaba carregado duas vezes.
Para cada carro apontado, ordene as texturas do .ytd por tamanho e corrija as maiores primeiro. DXT1 nas texturas sem alpha e 512 ou 1024 nas texturas de interior e de detalhe geralmente tiram um carro do vermelho.
Packs de roupa
Packs de roupa são muitos arquivos .ydd e .ytd pequenos. Arquivos individuais raramente disparam warnings; o problema é o volume. Cada drawable e cada variação de textura soma no download, e packs grandes levam o tamanho total em stream para a casa dos gigabytes.
- Remova os drawables que ninguém usa. Roupas de eventos antigos e variações duplicadas vão se acumulando.
- Mantenha as texturas de roupa num tamanho razoável. Uma camiseta não precisa de textura 4K.
- Fique de olho na quantidade de drawables por slot de componente. O GTA V tem um limite por slot, e packs que passam dele fazem a roupa aparecer errada ou nem aparecer.
Packs de roupa no FiveM explica como os packs são estruturados e instalados.
Mapas e MLOs
Mapas e interiores MLO juntam tudo isso, mais os arquivos de posicionamento (.ymap, .ytyp). Confira:
- Dicionários de textura. Mappers muitas vezes mandam um único
.ytdgigante para o interior inteiro. Dividir ou reduzir ajuda, porque o dicionário inteiro é carregado quando qualquer objeto precisa dele. - Colisão. A colisão (
.ybn) deveria ser mais simples que a malha visual. Uma malha de colisão copiada da malha de render é pesada e pode deixar a física instável. - Mapas sobrepostos. Dois mapas mexendo na mesma área causam objetos piscando ou sumindo. Fique com um só.
Para entender melhor como os interiores são montados e carregados, veja MLOs no FiveM.
Auditando seu servidor
Você não precisa otimizar tudo. Encontre os 10% piores e corrija isso.
1. Leia o console
Cada warning na inicialização mostra o resource e o arquivo. Junte todos e ordene por tamanho.
2. Ordene as pastas stream por tamanho
No Linux ou macOS, isto lista os 30 maiores arquivos em stream de todos os resources:
find resources -path '*/stream/*' -type f -exec du -k {} + | sort -rn | head -30No Windows, o PowerShell faz o mesmo:
Get-ChildItem resources -Recurse -File |
Where-Object { $_.FullName -match '\\stream\\' } |
Sort-Object Length -Descending |
Select-Object -First 30 FullName, @{n='MB';e={[math]::Round($_.Length/1MB,1)}}Lembre que o tamanho em disco é comprimido; use para achar candidatos e os warnings do console para confirmar.
3. Encontre duplicados
Servidores grandes acumulam duplicados: dois resources fazendo stream do mesmo carro, um MLO antigo do lado da versão atualizada. Com nomes de arquivo repetidos, uma versão sobrescreve a outra, mas os jogadores continuam baixando as duas. Procure nomes de arquivo repetidos em resources/ e mantenha uma cópia só.
4. Remova o que você não usa
Resources sem ensure não são enviados para os jogadores, mas poluem a auditoria. Apague os packs que não usa, inclusive os carros que ninguém dirige.
Ferramentas
| Ferramenta | Para que serve |
|---|---|
| OpenIV | Abrir arquivos .ytd, .ydr e .yft, ver tamanhos e formatos das texturas, e exportar ou substituir texturas. |
| CodeWalker | Explorar mapas e dados de posicionamento, visualizar modelos e texturas, e editar arquivos .ymap/.ytyp. |
| Sollumz | Add-on gratuito do Blender para importar e exportar modelos do GTA V, incluindo LODs e colisão. |
| Editores de imagem com suporte a DDS | Paint.NET (suporte a DDS nativo), GIMP, ou Photoshop com o Texture Tools Exporter da NVIDIA, para redimensionar e recomprimir texturas. |
Correção típica: exporte as maiores texturas do .ytd no OpenIV, redimensione e recomprima com mipmaps, depois importe de volta.
Scripts também importam, rapidinho
Scripts ainda podem causar travadinhas. Aperte F8 e rode resmon 1 para ver o tempo de CPU do cliente por resource; um script parado deveria ficar perto de 0.00 ms. O culpado de sempre é um loop while true do Wait(0) rodando a cada frame quando só importa perto de um local. Use waits maiores, checagem de distância e eventos. O guia de como criar um servidor tem um checklist rápido de performance para o resto do stack.
Se você está criando props novos em vez de consertar os antigos, o gerador 3D do BLDR cria props prontos para o jogo a partir de um prompt, uma imagem ou um GLB e exporta como um resource de FiveM com arquivos .ydr, .ytd e .ytyp, para você conferir o tamanho das texturas antes que elas cheguem na sua pasta stream/.
Perguntas frequentes
Qual deve ser o tamanho de um asset de FiveM?
O FXServer começa a mostrar warnings quando um arquivo em stream usa mais de 16 MiB de memória physical ou virtual, então 16 MiB é a meta prática. Muitos veículos e props podem ser bem menores que isso. Qualquer coisa acima de 48 MiB recebe o warning explícito de "oversized assets" e deve ser corrigida primeiro.
O warning de oversized assets significa que o resource está quebrado?
Não. O resource carrega normalmente e pode parecer ok num servidor de teste vazio. O warning significa que o asset ocupa uma fatia desproporcional da memória de stream, o que aparece como texture loss e modelos sumindo quando muitos jogadores e assets estão na mesma área.
Reduzir o tamanho das texturas vai deixar meus carros mais feios?
Não de forma perceptível, se você fizer na ordem certa. Texturas de interior, parte de baixo e detalhes podem cair bastante sem diferença visível no jogo normal. Mantenha a lataria e as liveries numa resolução razoável, use DXT1 onde não há transparência e deixe os mipmaps ligados.
Por que os jogadores ainda têm texture loss depois que corrigi os warnings?
O texture loss depende de tudo o que está carregado ao redor do jogador. Muitos assets médios no mesmo lugar, como um encontro de carros do lado de um MLO detalhado, ainda podem esgotar a memória de stream. Continue reduzindo o tamanho total em stream nos lugares onde os jogadores se reúnem.