Como otimizar um veículo de FiveM: polígonos, LODs e orçamento de texturas

Por Nilo3D · Atualizado:

Um veículo de FiveM está otimizado quando cada arquivo enviado por stream precisa de 16 MiB de memória ou menos, o modelo tem malhas de menor detalhe para a distância e o vehicles.meta diz ao jogo quando trocar entre elas. Na prática isso significa texturas de 2048 pixels ou menores em formato comprimido, quatro níveis de LOD abaixo da malha de alto detalhe e lodDistances como 10, 25, 50, 100, 500, 500.

Qual deve ser a meta?

O FiveM não define limite de polígonos. O que o servidor mede é a memória de que cada arquivo de stream precisa depois de carregado, e ele avisa acima de 16 MiB por arquivo. Então a meta é por arquivo, não por veículo: o .yft, o _hi.yft e o .ytd são checados cada um por si. Os degraus desse aviso estão em arquivos de modelo do veículo e o aviso de oversized assets.

ArquivoO que deixa pesadoO que fazer
.ytdResolução e formato das texturasRedimensionar e comprimir as texturas.
_hi.yftQuantidade de triângulos da malha detalhadaRemover geometria que ninguém vê, reduzir as partes densas.
.yftQuantidade de triângulos dos níveis mais baixos, mais a colisãoFazer LODs mais baixos de verdade em vez de cópias da malha detalhada.

Um número do nosso próprio trabalho: um carro de sim racing que convertemos chegou com cerca de 512.000 triângulos. Depois da conversão e antes de qualquer redução, o arquivo de modelo dele ainda precisava de cerca de 28 MiB de memória virtual, bem acima do primeiro degrau do aviso. Modelos feitos para outros jogos não são feitos para esse orçamento, então conte com ter que reduzir.

Como meço um veículo?

  • Console do servidor. Inicie o resource e leia o console. Para cada arquivo acima de 16 MiB aparece uma linha com o nome do arquivo e os MiB dele. Sem linha, todos os arquivos passaram.
  • Triângulos por nível no Blender. Em Sollumz Tools > Drawables > LOD Tools > Auto LOD, selecione um Drawable Model e o painel mostra LOD Statistics: triângulos e vértices de cada nível que tem malha.
  • Texturas. A memória por textura depende só da resolução e do formato. A tabela está no guia dos arquivos de modelo: uma textura DXT5 de 2048 x 2048 tem 5,33 MiB, uma de 4096 tem 21,3 MiB.

Quais níveis de LOD um veículo tem?

O Sollumz dá cinco slots a todo Drawable Model. Na exportação o de cima vira o _hi.yft e os outros quatro vão para o .yft principal.

Nível no SollumzArquivoValor de lodDistances que encerra o nívelSultan original
Very High_hi.yft1º10 m
High.yft2º25 m
Medium.yft3º50 m
Low.yft4º100 m
Very Low.yft5º500 m

O sexto valor é onde o veículo para de ser desenhado. As distâncias ficam no vehicles.meta, não no modelo:

<!-- _hi, High, Medium, Low, Very Low, fade out (metres) -->
<lodDistances content="float_array">
  10.000000
  25.000000
  50.000000
  100.000000
  500.000000
  500.000000
</lodDistances>

A scooter Faggio original usa 15, 30, 50, 100, 500, 500. Um erro que já vimos em carros convertidos é uma linha como 10, 150, 150, 150, 150, 150: a malha High é desenhada até 150 m e depois o carro some, então os níveis mais baixos nunca aparecem, mesmo que o modelo tenha. O campo é explicado em vehicles.meta explicado, e o que são LODs em o que são LODs em veículos de FiveM.

Como crio LODs com o Sollumz?

Abra Sollumz Tools > Drawables > LOD Tools > Auto LOD. A ferramenta copia uma malha de referência e a reduz para cada nível que você marcar, e então Generate LODs preenche os slots.

ConfiguraçãoPadrãoSignificado
Reference MeshA malha a copiar e reduzir. Use a mais detalhada.
MethodCollapseCollapse é a escolha de uso geral. Un-Subdivide serve para malhas feitas por subdivisão, Planar dissolve áreas planas.
Decimate Step0.6Um passo uniforme aplicado a cada nível.
Per-LOD RatiosDesligadoQuando ligado, cada nível recebe a própria proporção. Os padrões são 0.90, 0.70, 0.50, 0.30 e 0.15 de Very High a Very Low, e um nível pode usar uma quantidade alvo de triângulos no lugar.
Decimate from OriginalDesligadoReduz cada nível a partir da referência em vez de a partir do nível acima.

A redução automática é um ponto de partida. O que conferimos à mão depois:

  • Luzes. Peças pequenas que brilham são as primeiras a sumir na redução. Mantenha a malha original das setas e das lanternas traseiras em todos os níveis, ou proteja essas peças da redução.
  • Peças em bones diferentes. Reduza cada modelo separado para que uma porta nunca divida um vértice com a carroceria.
  • Silhueta. O nível mais baixo só precisa parecer certo a 100 m ou mais. Interior, motor e parte de baixo podem sair inteiros.
  • Rodas de moto. Nos veículos de duas rodas que fizemos, o jogo não desenhou o modelo de roda separado no nível mais baixo. As motos originais resolvem isso colocando uma forma simples de roda dentro da malha da carroceria desse nível, e nós fazemos o mesmo.

Quais tamanhos de textura um veículo deve usar?

Estes são os tamanhos que usamos por função. Nunca aumente a resolução: uma textura que chega em 1024 fica em 1024.

TexturaTamanho
Livery, atlas principal, lentes de farol2048
Normal map da carroceria, pneu1024
Texturas de detalhe que se repetem (carbono, tecido, grades)512
Peças pequenas do interior256
Cores chapadas4 x 4
  • Formato. DXT1 (BC1) sem transparência, DXT5 (BC3) com transparência. Uma textura DXT1 usa metade da memória da mesma textura em DXT5.
  • Cores chapadas. Salve as texturas 4 x 4 de uma cor só sem compressão. Elas não custam quase nada, e a compressão em blocos puxou os nossos cinzas escuros para o roxo e o verde.
  • Texturas compartilhadas. Mapas de specular, normal e sujeira que já existem nas texturas compartilhadas de veículo do jogo não precisam de cópia no seu .ytd.
  • Texturas sem uso. Modelos convertidos carregam texturas que nenhum material usa. Apague.
  • Converta fora do Blender. Redimensione e comprima com uma ferramenta de texturas e carregue o resultado. Salvar as imagens de novo pelo Blender escureceu as nossas.

Posso otimizar um veículo que já está pronto?

Pode, a partir do arquivo fonte. Abra o .blend de onde o veículo foi exportado, adicione os níveis mais baixos e exporte de novo. O que evitamos é importar um .yft pronto no Blender e exportar de volta: essa ida e volta reescreveu valores pequenos do esqueleto, e em um dos nossos veículos isso bastou para quebrar as animações de entrada e saída dele no jogo.

As texturas são mais seguras de mudar depois. Um .ytd pode ser aberto, ter as texturas trocadas por outras menores com os mesmos nomes e ser salvo, sem tocar no modelo. As ferramentas para cada tarefa estão em CodeWalker vs Sollumz.

Checklist de otimização

  1. Nenhuma textura acima de 2048, nenhuma sem compressão a não ser as cores 4 x 4.
  2. Nenhuma textura sem uso no .ytd.
  3. O modelo tem uma malha Very High e quatro níveis mais baixos.
  4. As luzes continuam aparecendo em todos os níveis.
  5. lodDistances tem seis valores crescentes, não o mesmo número repetido.
  6. O console do servidor não imprime nenhuma linha de tamanho para o resource.

O processo inteiro de modelagem está em como fazer um veículo de FiveM no Blender com o Sollumz. Como referência do nosso catálogo, o Coil S-Cooter e os três hoverboards vêm com quatro LODs, de High a Very Low.

Perguntas frequentes

Quantos polígonos um carro de FiveM deve ter?
O FiveM não define limite de polígonos. O servidor mede a memória por arquivo de stream e avisa acima de 16 MiB, então o limite prático é um .yft e um _hi.yft que fiquem cada um nesse tamanho ou abaixo dele.
Quais lodDistances devo usar em um carro add-on?
O Sultan original usa 10, 25, 50, 100, 500, 500 e é um ponto de partida seguro. Cada valor encerra um nível: _hi, High, Medium, Low, Very Low e depois o sumiço.
Como faço LODs no Sollumz?
Use Sollumz Tools > Drawables > LOD Tools > Auto LOD. Escolha a malha de referência, marque os níveis a criar e aperte Generate LODs. Depois confira as luzes e a silhueta à mão.
Qual tamanho de textura é melhor para veículos de FiveM?
Usamos 2048 para a livery ou o atlas principal, 1024 para o normal map da carroceria e os pneus, 512 para detalhes que se repetem e 256 para peças pequenas do interior, tudo em DXT1 ou DXT5.
O _hi.yft conta na checagem de 16 MiB?
Cada arquivo é checado por si. O .yft, o _hi.yft e o .ytd têm que ficar cada um em 16 MiB ou menos para o console não avisar nada.

Fontes

Produtos deste guia

Todos os guias