Como otimizar um veículo de FiveM: polígonos, LODs e orçamento de texturas
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.
| Arquivo | O que deixa pesado | O que fazer |
|---|---|---|
.ytd | Resolução e formato das texturas | Redimensionar e comprimir as texturas. |
_hi.yft | Quantidade de triângulos da malha detalhada | Remover geometria que ninguém vê, reduzir as partes densas. |
.yft | Quantidade de triângulos dos níveis mais baixos, mais a colisão | Fazer 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 Sollumz | Arquivo | Valor de lodDistances que encerra o nível | Sultan original |
|---|---|---|---|
| Very High | _hi.yft | 1º | 10 m |
| High | .yft | 2º | 25 m |
| Medium | .yft | 3º | 50 m |
| Low | .yft | 4º | 100 m |
| Very Low | .yft | 5º | 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ção | Padrão | Significado |
|---|---|---|
| Reference Mesh | A malha a copiar e reduzir. Use a mais detalhada. | |
| Method | Collapse | Collapse é a escolha de uso geral. Un-Subdivide serve para malhas feitas por subdivisão, Planar dissolve áreas planas. |
| Decimate Step | 0.6 | Um passo uniforme aplicado a cada nível. |
| Per-LOD Ratios | Desligado | Quando 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 Original | Desligado | Reduz 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.
| Textura | Tamanho |
|---|---|
| Livery, atlas principal, lentes de farol | 2048 |
| Normal map da carroceria, pneu | 1024 |
| Texturas de detalhe que se repetem (carbono, tecido, grades) | 512 |
| Peças pequenas do interior | 256 |
| Cores chapadas | 4 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
- Nenhuma textura acima de 2048, nenhuma sem compressão a não ser as cores 4 x 4.
- Nenhuma textura sem uso no
.ytd. - O modelo tem uma malha Very High e quatro níveis mais baixos.
- As luzes continuam aparecendo em todos os níveis.
lodDistancestem seis valores crescentes, não o mesmo número repetido.- 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
- FXServer source: asset size check (ResourceStreamComponent.cpp)
- Sollumz, Blender add-on for GTA V assets
Produtos deste guia
- Coil S-Cooter: Patinete Elétrico FiveM
- Airglider: Hoverboard FiveM
- Girlboard: Hoverboard FiveM
- Neonboard: Hoverboard FiveM
Todos os guias
- Como instalar um resource FiveM do Cfx.re Escrow (Granted Assets)
- Como adicionar um veículo custom num servidor ESX, QBCore ou QBox
- O que são LODs em veículos FiveM?
- Como adicionar um veículo add-on a um servidor FiveM
- vehicles.meta explicado, campo por campo
- handling.meta explicado: campos, unidades e flags
- carvariations.meta e carcols.meta explicados
- vehiclelayouts.meta explicado: assentos, pontos de entrada e animações
- Referência de data_file do fxmanifest para veículos
- Arquivos de modelo do veículo (yft, _hi.yft, ytd) e o aviso de asset grande demais
- Solução de problemas de veículo add-on no FiveM: causas e correções
- Como resolver "You lack the required entitlement" em um servidor FiveM
- Como converter um mod de carro single-player do GTA 5 em add-on de FiveM
- Como um hoverboard de FiveM funciona sem script
- Como fazer um veículo de FiveM no Blender com o Sollumz 2.9
- Como configurar a colisão de veículo no Sollumz
- Comprar veículos FiveM: o que conferir antes de pagar
- Pack de carros FiveM vs veículos avulsos
- Carro de marca real no FiveM: pode ou não?
- CodeWalker vs Sollumz: qual ferramenta usar em veículos de FiveM?
