Otimizando Arquivos para FiveM

Compressão de texturas, mipmaps, LODs, tamanho de arquivo e verificações de crashes em Arquivos transmitidos.

Guias 9 min de leitura
Syntax Platform team
Renderização de Arquivos no motor RAGE

A otimização de Arquivos no FiveM tem um objetivo simples: reduzir o custo de cada arquivo transmitido para o cliente carregar, renderizar e manter na memória. Arquivos menores ajudam, mas o melhor resultado é aquele que reduz a pressão em tempo de execução sem quebrar o Arquivo.

A correção certa depende do arquivo. Um veículo sem LODs precisa de trabalho no modelo. Um dicionário de texturas cheio de texturas alpha superdimensionadas precisa ser redimensionado e ter uma compressão melhor. Um prop com colisão quebrada precisa ter o modelo verificado antes de focar no tamanho das texturas.

Comece pelo arquivo que mais custa

A maioria dos Arquivos transmitidos pesa em um de três pontos: memória de textura, geometria ou referências incorretas. Use o tipo de arquivo para decidir onde procurar primeiro.

ArquivoPrincipal pressãoFerramenta do ZoovdevO que verificar
.ytdMemória de textura, tamanho em disco, mipmaps, formatos alphaOtimizar TexturasDimensões das texturas, compressão DDS, entradas não usadas, mipmaps
.yftGeometria do veículo, fragmentos, comportamento da distância de renderizaçãoOtimizar VeículosResultado dos LODs, nomes de modelos, não enviar _hi.yft
.ydrGeometria do prop, materiais, texturas incorporadasOtimizar PropsQuantidade de materiais, links de texturas, configuração de colisão, integridade da exportação
.yddTamanho dos drawables de Roupas e uso de texturasOtimizar RoupasTamanho das texturas, quantidade de drawables, escala dos itens, testes no menu de Roupas do jogo
.ybnCusto de colisão e limites quebradosFerramentas de criaçãoLimites simples, materiais corretos, posicionamento, testes de crash
fxmanifest.luaCarregamento de recurso e referências de dadosAgente de CódigoEntradas de files, linhas de data_file, caminhos da pasta stream, referências meta

YTD e DDS têm significados diferentes

Um .ytd é um dicionário de texturas RAGE. Ele armazena texturas nomeadas usadas por arquivos .ydr, .yft e .ydd. Um .dds é um formato de arquivo de textura frequentemente usado como formato de origem, exportação ou intermediário para essas entradas de textura.

Quando alguém diz para comprimir um YTD, geralmente se refere a redimensionar e recomprimir as texturas dentro dele. A compressão DDS é uma compressão em blocos de textura da GPU. Ela é diferente da compressão de arquivo estilo ZIP porque a placa gráfica pode acessar diretamente os blocos comprimidos.

FormatoBom usoCompromisso
BC1 / DXT1Texturas difusas ou de cor sem alpha suavePequeno, 8 bytes por bloco de 4x4, mas ruim em gradientes e com alpha limitado
BC3 / DXT5Texturas difusas, pinturas, decalques ou semelhantes a UI que precisam de alphaBom suporte, 16 bytes por bloco de 4x4, o dobro do tamanho de BC1
BC5Mapas normais ou dados de máscara de dois canaisMais limpo para dados de dois canais, escolha errada para texturas coloridas completas
BC7Texturas de cor ou alpha de alta qualidade, pinturas vistas de perto, detalhes pintadosMais limpo que formatos antigos em muitos casos, mas mais lento para codificar, maior que BC1, e cabeçalhos DDS mais recentes podem causar problemas em caminhos de ferramentas mais antigos
Sem compressãoDepuração ou casos especiais em que o formato exige issoUso de memória muito alto. Evite em conteúdo normal transmitido por streaming.

Mipmaps

Mipmaps são cópias menores da mesma textura. Uma textura de 1024 x 1024 recebe níveis de 512 x 512, 256 x 256 e menores em sequência. O renderizador usa os níveis menores quando o objeto está mais distante.

Bons mipmaps reduzem cintilação, bordas tremidas e amostragem ruidosa de texturas à distância. Eles adicionam dados à textura, mas para props do mundo, veículos, roupas e Arquivos de mapa, geralmente é uma troca vantajosa. Gere mipmaps após o redimensionamento e a compressão finais para que a sequência corresponda à textura exportada.

  • Mantenha mipmaps para veículos, props, roupas, placas e superfícies de mapa que podem ser vistas de longe.
  • Tenha cuidado ao remover mipmaps de texturas com bordas em alpha. O Arquivo pode parecer nítido em uma Prévia e cintilar muito no jogo.
  • Só deixe de usar mipmaps por um motivo específico, como um caminho de textura que nunca é amostrado à distância.

Tamanhos de textura em potência de 2

Use tamanhos de textura em potência de 2, muitas vezes escritos como PO2, POT ou power of 2: 64, 128, 256, 512, 1024, 2048 e 4096. Para Arquivos de RAGE e GTA, esta é uma regra de segurança, não apenas um hábito de exportação organizado.

Texturas que não são PO2 podem fazer mais do que desperdiçar memória. Em caminhos do RAGE, elas podem quebrar a amostragem ou falhar de formas que parecem não ter relação com o tamanho. Um resultado ruim comum é o vazamento de textura: o material começa a buscar pixels de entradas de textura próximas no dicionário, fazendo com que um prop, veículo ou item de roupa pareça estar referenciando a textura errada.

Tamanhos práticos de textura

Não há um limite único de tamanho que seja útil para todos os servidores. O limite real depende de quantos recursos são transmitidos por streaming ao mesmo tempo, de quão perto os jogadores chegam do Arquivo, do formato da textura e do hardware do cliente. Um alerta comum na comunidade é quando um único dicionário de texturas chega a cerca de 16 MB de memória física de textura. Considere isso um motivo para inspecionar o Arquivo, não uma regra de aprovado ou reprovado.

ArquivoBom ponto de partidaNotas
Props pequenos, itens decorativos, decalques256 a 512Use 1024 apenas quando o jogador ler ou inspecionar a superfície de perto.
Placas legíveis, cartazes, props com marca512 a 1024Use 2048 para artes grandes, próximas e legíveis. Recorte espaços vazios antes de aumentar o tamanho.
Pinturas de veículos e mapas difusos1024 a 2048Use 4096 para veículos de exibição vistos de perto ou pinturas com muitos detalhes, depois teste o custo de memória.
Mapas normais, de rugosidade, especulares e máscaras de veículos512 a 1024Muitas vezes, estes podem ser menores que o mapa difuso. Use o formato de dados correto, como BC5 para mapas normais.
Roupas512 a 1024Reserve 2048 para peças grandes com detalhes visíveis. Acessórios pequenos raramente precisam disso.
MLOs e texturas de mapa512 a 1024 por material reutilizadoDivida os dicionários de forma lógica e reduza superfícies 2K ou 4K repetidas antes de mexer na geometria.
Tamanho da texturaBC1 / DXT1 com mipmapsBC3 / DXT5 ou BC7 com mipmaps
1024 x 1024Cerca de 0,7 MiBCerca de 1,3 MiB
2048 x 2048Cerca de 2,7 MiBCerca de 5,3 MiB
4096 x 4096Cerca de 10,7 MiBCerca de 21,3 MiB
Memória de textura aproximada usando cadeias completas de mipmaps. O tamanho real do YTD pode variar porque os dicionários incluem nomes, cabeçalhos e várias entradas de textura.

Otimização de veículos e _hi.yft

Para veículos, a principal otimização do lado do modelo é gerar LODs para os arquivos .yft. Não inclua versões _hi.yft no otimizador de veículos do Zoovdev. O otimizador ignora esse tipo e cria dados de LOD a partir dos arquivos normais de modelo de veículo.

Um .yft otimizado maior pode ser um bom resultado. O arquivo pode conter mais dados porque agora tem modelos com menos detalhes para renderização à distância. O benefício é que os clientes podem renderizar geometria mais leve quando o veículo está longe. A economia de textura para veículos geralmente vem dos arquivos .ytd relacionados.

  • Envie os arquivos normais de veículo .yft, não arquivos _hi.yft.
  • Execute a otimização de textura nos arquivos .ytd separadamente.
  • Teste gerar o veículo, afastar-se dele, voltar até ele e reiniciar o recurso.
  • Mantenha alinhados os nomes dos modelos, os nomes dos dicionários de textura e as referências meta do veículo.

Props, roupas e colisão

Props em .ydr e roupas em .ydd geralmente se beneficiam de uma geometria adequada, menos materiais desperdiçados e dicionários de textura menores. Se as texturas estiverem incorporadas ao drawable, verifique a saída do modelo e das texturas após a exportação.

A colisão em .ybn deve ser mais simples que a malha visual. Limites incorretos podem causar problemas de física, interação quebrada ou travamentos que parecem não ter relação com o modelo. Teste a colisão no jogo após a exportação, principalmente para MLOs, props grandes e partes do mapa movidas.

Verificações de recurso e manifesto

O FiveM transmite automaticamente os Arquivos colocados na pasta stream/ de um recurso. Não liste arquivos transmitidos .ytd, .yft, .ydr ou .ydd em files apenas porque estão em stream/. Use o manifesto para referenciar arquivos de dados e meta que precisam de carregamento explícito.

lua
files {
    'data/**/*.meta'
}

data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'

Linhas data_file incorretas podem fazer um Arquivo válido parecer quebrado. Se os arquivos transmitidos estiverem na pasta stream/ correta, mas o recurso ainda se comportar mal, verifique as referências meta, os nomes dos arquivos e as declarações de arquivos de dados antes de culpar a compressão.

Sintomas de travamento e como investigá-los

Travamentos causados por Arquivos geralmente aparecem como sintomas em vez de um nome de arquivo claro. Você pode ver mensagens sobre ponteiro inválido, erros de memória neither virtual nor physical, travamentos de consulta DirectX ou GPU, failed to call inflate() for streaming file, ou um travamento que só acontece quando alguém gera um veículo, se aproxima de uma área, abre um menu de roupas ou inicia um recurso.

  1. Reproduza o travamento em um servidor local ou de teste, com o menor número possível de recursos em execução.
  2. Desative os Arquivos transmitidos adicionados recentemente e reative-os em grupos pela metade até o travamento voltar.
  3. Para veículos, gere um modelo de cada vez. Teste a geração, uma curta condução, a transmissão à distância e o reinício do recurso.
  4. Para verificar texturas, substitua temporariamente o .ytd por um dicionário comprovadamente funcional ou remova texturas opcionais para separar problemas de textura de problemas de modelo.
  5. Verifique fxmanifest.lua, files, data_file, os caminhos da pasta stream e as referências meta.
  6. Observe quando o travamento acontece. Ao entrar, aponta para mapa global, roupas ou recursos sempre carregados. Ao se aproximar, aponta para um mapa, prop ou MLO. Ao gerar, aponta para um veículo. Ao abrir um menu, aponta para conteúdo de ped ou roupas.

Um bom fluxo de trabalho no Zoovdev

  1. Execute os dicionários de textura em Otimizar texturas e verifique dimensões, compressão, mipmaps e uso de alfa.
  2. Execute os arquivos de veículo .yft em Otimizar veículos sem enviar _hi.yft.
  3. Use Otimizar props para modelos de props e Otimizar roupas para drawables de roupas.
  4. Use o Code Agent para inspecionar manifestos de recursos, referências de arquivos de dados e nomes de Arquivos quando um recurso ainda se comportar mal.
  5. Teste o recurso otimizado no jogo antes de misturá-lo novamente a um grande pacote de produção.

Leitura relacionada

Formatos de arquivo, Arquivos Gen9 e fluxos de trabalho de textura de veículos estão diretamente ligados ao trabalho de otimização.

optimizationfivemassetsytdddsyftlodmipmapsbc7crashes
1.358 leituras