Archivos de modelo del vehículo (yft, _hi.yft, ytd) y el aviso de assets sobredimensionados

Por Nilo3D · Actualizado:

Un vehículo de FiveM va en stream como un modelo .yft, un modelo de alto detalle _hi.yft y un diccionario de texturas .ytd. FXServer mide cuánta memoria necesita cada archivo una vez cargado y muestra un aviso por encima de 16 MiB. Por encima de 48 MiB añade que los assets sobredimensionados "can and WILL lead to streaming issues", es decir, que van a causar problemas de streaming. La solución habitual son texturas más pequeñas y comprimidas.

¿Qué son los archivos .yft, _hi.yft y .ytd?

Los tres archivos tienen funciones fijas, y sus nombres deben seguir el nombre de modelo de 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
ArchivoContenidoCuándo lo usa el juego
<model>.yftEl vehículo como fragment: las mallas de menor detalle, los bones (puertas, ruedas, asientos) y la colisión.Siempre, mientras el vehículo exista.
<model>_hi.yftLa malla de alto detalle.Solo cerca de la cámara, dentro del primer valor de lodDistances de vehicles.meta.
<txdName>.ytdTodas las texturas del vehículo.Siempre.
<txdName>+hi.ytdCopias opcionales de las texturas a mayor resolución.Cerca de la cámara.

El juego construye él mismo el nombre del modelo de alto detalle añadiendo _hi al nombre del modelo siempre que la primera distancia de LOD es mayor que cero, así que el archivo debe llamarse exactamente así. Las piezas de tuning son archivos de modelo pequeños y separados en la misma carpeta, con los nombres que figuran en carcols.meta.

¿Qué significa el aviso de oversized assets?

Cuando un resource se inicia, FXServer lee la cabecera de cada archivo de stream y calcula cuánta memoria ocupará una vez cargado. Si es demasiada, muestra una línea como esta en la consola del 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).

El número no es el tamaño del archivo en disco. Los archivos de stream están comprimidos, y la cabecera registra el tamaño de los datos descomprimidos en dos partes: memoria virtual (datos de estructura) y memoria física (sobre todo píxeles de texturas y geometría de mallas). Cada parte se comprueba por separado.

Memoria de un archivoLínea de la consola
16 MiB o menosNo se muestra nada.
Más de 16 MiBSe muestra en azul.
Más de 32 MiBSe muestra en amarillo.
Más de 48 MiBSe añade la frase "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)".
Más de 64 MiBSe muestra en rojo.

Estos escalones son los del código fuente de FXServer (ResourceStreamComponent.cpp). El aviso tiene que ver con los ordenadores de los jugadores, no con el servidor: cada jugador que esté cerca del vehículo tiene que mantener ese archivo en memoria. Mantén cada archivo en 16 MiB o menos y la consola se queda en silencio.

Para ver ese número de un archivo antes de arrancar el servidor, suéltalo en la calculadora de memoria de texturas YTD. También lista cada textura con la memoria que ocupa.

¿Cuánta memoria usa una textura?

La memoria de una textura depende de la resolución y del formato, no del aspecto de la imagen. Reducir a la mitad el ancho y el alto deja la memoria en una cuarta parte. Los formatos comprimidos guardan 4 u 8 bits por píxel en lugar de 32. Los mipmaps añaden más o menos un tercio.

ResoluciónDXT1 / BC1 (sin alfa)DXT5 / BC3 (alfa)32 bits sin comprimir
512 x 5120.17 MiB0.33 MiB1.33 MiB
1024 x 10240.67 MiB1.33 MiB5.33 MiB
2048 x 20482.67 MiB5.33 MiB21.3 MiB
4096 x 409610.7 MiB21.3 MiB85.3 MiB

Los valores incluyen los mipmaps. Una sola textura de 4096 sin comprimir ya supera todos los escalones del aviso, y una única textura de 4096 en DXT5 pasa de 16 MiB por sí sola. Un .ytd con unas cuantas texturas 4K es el origen más común del aviso.

¿Cómo reduzco un vehículo sobredimensionado?

  1. Localiza el archivo. La línea de la consola nombra el resource y el archivo. Arregla primero el más grande.
  2. Reduce las texturas grandes. Las texturas de carrocería e interior a 2048 o 1024 bastan para un vehículo visto a la distancia normal de juego. Las piezas pequeñas, los emblemas y las luces rara vez necesitan más de 512.
  3. Comprímelas. Usa DXT1 (BC1) para las texturas sin transparencia y DXT5 (BC3) para las que la tienen. Evita los formatos sin comprimir.
  4. Borra las texturas que no se usan. Los modelos convertidos suelen arrastrar texturas que ningún material utiliza.
  5. No dupliques las texturas compartidas. Las texturas que usan varios vehículos pueden estar en un único diccionario definido como padre en txdRelationships de vehicles.meta.
  6. Reduce la malla. Si el archivo del aviso es un .yft, el modelo tiene demasiados polígonos, o el .yft principal contiene la malla de detalle completo en lugar de los LOD más bajos.
  7. Reinicia el resource y vuelve a leer la consola. Si no hay ninguna línea, todos los archivos están en 16 MiB o menos.

Los ajustes de LOD, lodDistances y los tamaños de textura según su función están en cómo optimizar un vehículo FiveM.

¿Qué papel tienen los LOD?

El .yft principal está pensado para contener las versiones más ligeras del modelo, y el _hi.yft la detallada. Gracias a esa división, el juego mantiene en memoria solo un modelo ligero para los vehículos que están lejos. Una conversión que pone la misma malla pesada en los dos archivos duplica la memoria y hace que cada vehículo lejano cueste lo mismo que uno cercano.

Los niveles y sus distancias se explican en qué son los LOD en los vehículos de FiveM. En nuestro propio catálogo, el Coil S-Cooter y los tres hoverboards traen cuatro LOD, de High a Very Low.

Preguntas frecuentes

¿Qué es el límite de 16 MB de FiveM?
Es el primer escalón de la comprobación de tamaño de assets de FXServer. Un archivo de stream que necesita más de 16 MiB de memoria física o virtual una vez cargado recibe un aviso en la consola. Es un aviso, no un bloqueo, pero los assets grandes pueden no cargar para los jugadores.
¿Por qué mi archivo de 5 MB aparece como 40 MiB?
El aviso muestra el uso de memoria después de cargar, no el tamaño en disco. Los archivos de stream están comprimidos, así que el tamaño cargado puede ser varias veces el tamaño del archivo.
¿Cuál es la diferencia entre .yft y _hi.yft?
El .yft contiene las mallas de menor detalle, el esqueleto y la colisión, y siempre está cargado. El _hi.yft contiene la malla de alto detalle y solo se carga cuando el vehículo está cerca de la cámara.
¿Qué tamaño de textura debería usar un vehículo de FiveM?
Texturas comprimidas de 2048 o 1024 para las superficies principales y de 512 o menos para los detalles mantienen la mayoría de los vehículos por debajo de 16 MiB. Una sola textura de 4096 en DXT5 ya usa unos 21 MiB con mipmaps.
¿El aviso significa que mi servidor tiene lag?
No. La comprobación tiene que ver con la memoria en el lado de los jugadores. El riesgo son modelos o texturas que cargan tarde o no cargan, sobre todo cuando hay muchos vehículos pesados en un mismo sitio.

Fuentes

Productos de esta guía

Todas las guías