Arquivos de modelo do veículo (yft, _hi.yft, ytd) e o aviso de asset grande demais
Um veículo de FiveM é enviado por stream como um modelo .yft, um modelo de alto detalhe _hi.yft e um dicionário de texturas .ytd. O FXServer mede quanta memória cada arquivo precisa depois de carregado e imprime um aviso acima de 16 MiB. Acima de 48 MiB ele acrescenta que assets grandes demais "can and WILL lead to streaming issues". Texturas menores e comprimidas são a correção de sempre.
O que são os arquivos .yft, _hi.yft e .ytd?
Os três arquivos têm funções fixas, e os nomes deles têm que seguir o nome do modelo do vehicles.meta.
stream/
mycar.yft model: lower LODs, skeleton, collision
mycar_hi.yft model: high detail version shown up close
mycar.ytd textures (name matches <txdName>)
mycar+hi.ytd optional: high resolution versions of the same textures
| Arquivo | Conteúdo | Quando o jogo usa |
|---|---|---|
<model>.yft | O veículo como fragment: as malhas de menor detalhe, os bones (portas, rodas, assentos) e a colisão. | Sempre, enquanto o veículo existir. |
<model>_hi.yft | A malha de alto detalhe. | Só perto da câmera, dentro do primeiro valor de lodDistances do vehicles.meta. |
<txdName>.ytd | Todas as texturas do veículo. | Sempre. |
<txdName>+hi.ytd | Cópias opcionais das texturas em resolução maior. | Perto da câmera. |
O próprio jogo monta o nome do modelo de alto detalhe somando _hi ao nome do modelo sempre que a primeira distância de LOD está acima de zero, então o arquivo tem que se chamar exatamente assim. As peças de tuning são arquivos de modelo pequenos e separados na mesma pasta, com os nomes listados no carcols.meta.
O que significa o aviso de oversized assets?
Quando um resource inicia, o FXServer lê o cabeçalho de cada arquivo de stream e calcula quanta memória ele vai ocupar depois de carregado. Se for demais, ele imprime uma linha como esta no console do servidor:
Asset mycar/mycar.ytd uses 62.5 MiB of physical memory. Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).
O número não é o tamanho do arquivo em disco. Os arquivos de stream são comprimidos, e o cabeçalho registra o tamanho dos dados descompactados em duas partes: memória virtual (dados de estrutura) e memória física (principalmente pixels de textura e geometria de malha). Cada parte é verificada separadamente.
| Memória de um arquivo | Linha do console |
|---|---|
| 16 MiB ou menos | Nada é impresso. |
| Acima de 16 MiB | Impressa em azul. |
| Acima de 32 MiB | Impressa em amarelo. |
| Acima de 48 MiB | A frase "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)" é acrescentada. |
| Acima de 64 MiB | Impressa em vermelho. |
Esses degraus são os do código-fonte do FXServer (ResourceStreamComponent.cpp). O aviso é sobre os computadores dos jogadores, não sobre o servidor: cada jogador perto do veículo tem que manter aquele arquivo na memória. Mantenha cada arquivo em 16 MiB ou menos e o console fica quieto.
Para ver esse número de um arquivo antes de ligar o servidor, solte o arquivo na calculadora de memória de texturas YTD. Ela também lista cada textura com a memória que ocupa.
Quanta memória uma textura usa?
A memória de uma textura depende da resolução e do formato, não da aparência da imagem. Cortar a largura e a altura pela metade reduz a memória a um quarto. Formatos comprimidos guardam 4 ou 8 bits por pixel em vez de 32. Os mipmaps somam cerca de um terço.
| Resolução | DXT1 / BC1 (sem alpha) | DXT5 / BC3 (alpha) | 32 bits sem compressão |
|---|---|---|---|
| 512 x 512 | 0.17 MiB | 0.33 MiB | 1.33 MiB |
| 1024 x 1024 | 0.67 MiB | 1.33 MiB | 5.33 MiB |
| 2048 x 2048 | 2.67 MiB | 5.33 MiB | 21.3 MiB |
| 4096 x 4096 | 10.7 MiB | 21.3 MiB | 85.3 MiB |
Os valores incluem mipmaps. Uma única textura 4096 sem compressão já passa de todos os degraus do aviso, e uma única textura 4096 em DXT5 fica acima de 16 MiB sozinha. Um .ytd com um punhado de texturas 4K é a origem mais comum do aviso.
Como reduzir um veículo grande demais?
- Ache o arquivo. A linha do console dá o nome do resource e do arquivo. Corrija o maior primeiro.
- Redimensione as texturas grandes. Texturas de carroceria e de interior em 2048 ou 1024 bastam para um veículo visto da distância normal de jogo. Peças pequenas, emblemas e luzes raramente precisam de mais que 512.
- Comprima as texturas. Use DXT1 (BC1) para texturas sem transparência e DXT5 (BC3) para texturas com transparência. Evite formatos sem compressão.
- Apague as texturas sem uso. Modelos convertidos costumam carregar texturas que nenhum material usa.
- Não duplique texturas compartilhadas. Texturas usadas por vários veículos podem ficar em um dicionário definido como pai em
txdRelationshipsdo vehicles.meta. - Reduza a malha. Se o arquivo do aviso é um
.yft, o modelo tem polígonos demais, ou o.yftprincipal contém a malha de detalhe total em vez de LODs mais baixos. - Reinicie o resource e leia o console de novo. Nenhuma linha significa que todo arquivo está em 16 MiB ou menos.
As configurações de LOD, o lodDistances e os tamanhos de textura por função estão em como otimizar um veículo FiveM.
Onde os LODs entram nisso?
O .yft principal é feito para guardar as versões mais leves do modelo, e o _hi.yft a detalhada. É essa divisão que permite ao jogo manter só um modelo leve na memória para os veículos que estão longe. Uma conversão que coloca a mesma malha pesada nos dois arquivos dobra a memória e deixa todo veículo distante tão caro quanto um próximo.
Os níveis e as distâncias deles são explicados em o que são LODs em veículos de FiveM. Do nosso próprio catálogo, o Coil S-Cooter e os três hoverboards vêm com quatro LODs, de High a Very Low.
Perguntas frequentes
- O que é o limite de 16 MB do FiveM?
- É o primeiro degrau da verificação de tamanho de asset do FXServer. Um arquivo de stream que precisa de mais de 16 MiB de memória física ou virtual depois de carregado recebe um aviso no console. É um aviso, não um bloqueio, mas assets grandes podem deixar de carregar para os jogadores.
- Por que meu arquivo de 5 MB aparece como 40 MiB?
- O aviso mostra o uso de memória depois de carregar, não o tamanho em disco. Os arquivos de stream são comprimidos, então o tamanho carregado pode ser várias vezes o tamanho do arquivo.
- Qual é a diferença entre .yft e _hi.yft?
- O .yft guarda as malhas de menor detalhe, o esqueleto e a colisão e está sempre carregado. O _hi.yft guarda a malha de alto detalhe e só é carregado quando o veículo está perto da câmera.
- Que tamanho de textura um veículo de FiveM deve usar?
- Texturas comprimidas de 2048 ou 1024 nas superfícies principais e de 512 ou menos nos detalhes mantêm a maioria dos veículos abaixo de 16 MiB. Uma única textura 4096 em DXT5 já usa cerca de 21 MiB com mipmaps.
- O aviso significa que meu servidor está com lag?
- Não. A verificação é sobre a memória do lado dos jogadores. O risco são modelos ou texturas que carregam tarde ou não carregam, ainda mais quando há muitos veículos pesados em um mesmo lugar.
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
- 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 otimizar um veículo de FiveM: polígonos, LODs e orçamento de texturas
- 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?
