Texturas, archivos y packs · 4 min de lectura

Aviso de "oversized asset" de FiveM: qué significa y cómo arreglarlo

Leer en: English · Français · Deutsch · Português · Italiano · Polski · Türkçe · Русский

Arrancas tu servidor y la consola se llena de líneas como esta:

text
Asset <resource>/<file>.ytd uses <size> MiB of physical memory.

Este es el aviso de asset demasiado grande de FiveM. No es un error y el archivo sigue cargándose, pero te dice qué archivos son lo bastante pesados como para dar problemas. Aquí tienes qué mide, por qué el tamaño del archivo en disco dice poco y cómo reducirlos.

Qué mide FiveM

Al arrancar, FiveM lee la cabecera de cada archivo de la carpeta stream de un recurso. Esa cabecera indica cuánta memoria ocupa el archivo una vez cargado, en dos partes: memoria física (memoria gráfica: texturas y buffers de vértices) y memoria virtual (memoria del sistema: el resto del asset). Los umbrales, leídos en el propio código de FiveM, son los mismos para ambas:

Memoria de un archivoLo que hace FiveM
más de 16 MiBmuestra el aviso
más de 32 MiBlo muestra en amarillo
48 MiB o másañade: "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)."
más de 64 MiBlo muestra en rojo

El aviso es por archivo. Un .ytd de 20 MiB se marca aunque el resto de tu servidor sea ligero.

Por qué el tamaño en disco engaña

Los archivos en streaming van comprimidos en disco, y el aviso cuenta lo que ocupan cargados. En una textura, eso es su tamaño en el formato de la GPU, con todos sus niveles de mipmap, redondeado a páginas de memoria completas. Una guía aproximada, antes de ese redondeo:

Textura (con mipmaps)DXT1 (sin transparencia)DXT5 (con transparencia)
1024 × 10240,67 MiB1,33 MiB
2048 × 20482,67 MiB5,33 MiB
4096 × 409610,67 MiB21,33 MiB

Así, una sola textura DXT5 de 4096 × 4096 ya supera el límite por sí sola, y un .ytd con unas cuantas texturas de 2048 puede pasarlo mientras parece pequeño en el explorador de archivos. El redondeo a páginas puede hacer que el total sea bastante mayor que la suma de las texturas.

Si un archivo se marca por memoria virtual (del sistema), no son las texturas: son los demás datos del asset, como su colisión. Reducir las texturas no cambiará eso.

Encuentra de una vez todos los archivos demasiado grandes

En vez de leer la consola, arrastra toda tu carpeta resources a Server Budget. Lee las mismas cabeceras en tu navegador (no se sube nada) y muestra:

  • Oversized (demasiado grandes): los archivos de más de 16 MiB de memoria gráfica, empezando por el peor.
  • By resource (por recurso): lo que transmite cada recurso, ordenado por memoria.
  • Streamed twice (transmitidos dos veces): nombres de archivo que más de un recurso transmite. El juego solo recibe uno, así que deja una sola copia.

La lista Oversized de Server Budget cuenta la memoria gráfica. Un archivo que la consola marca solo por memoria virtual no aparecerá en ella.

Reduce las texturas

Toma los archivos que marca Server Budget (.ytd, .ydr, .yft, .ydd) y arrástralos al Asset Optimizer:

  1. Define Largest texture size (tamaño máximo de textura). 1024 es el valor por defecto; 2048 es una opción habitual para coches y libreas que se miran de cerca.
  2. Deja marcado Add missing mipmaps (añadir los mipmaps que faltan): las texturas guardadas sin ellos los recuperan.
  3. Revisa la estimación ("At 1024 px: about … less texture memory") y la tabla de archivos.
  4. Haz clic en Download the lighter files (.zip) (descargar los archivos más ligeros). Obtienes cada archivo con su propio nombre: colócalos en lugar de los antiguos.
Asset Optimizer con cuatro archivos de stream cargados: el tamaño de cada uno, su textura más grande y la memoria de textura que ahorraría 1024 px, con Add missing mipmaps marcado
Cuatro archivos de prueba: uno tiene texturas de 2048 px y seis no tienen mipmaps; a 1024 px ahorra unos 9 MB de memoria de textura.

Una textura que tiene mipmaps se reduce quitando sus niveles más grandes, sin recomprimir, así que se ve exactamente igual que desde un poco más lejos. Una textura sin mipmaps se reconstruye con todos sus niveles, al tamaño que elegiste, o con su propio tamaño si es más pequeña.

Los packs que repiten la misma textura en muchos diccionarios también pueden compartirla: Texture Dedupe mueve las texturas repetidas a un .ytd compartido. Luego arrastra la carpeta otra vez a Server Budget para ver el resultado.

Preguntas

¿16 MiB es un límite estricto?
No. FiveM sigue transmitiendo el archivo y solo avisa. Desde 48 MiB, su propio aviso dice que esos assets causarán problemas de streaming, así que trata todo lo que supere 16 MiB como un archivo que hay que reducir.
¿El aviso cuenta el tamaño del archivo en disco?
No. Cuenta la memoria que ocupa el archivo una vez cargado, leída de su cabecera. Un archivo puede pesar bastante menos de 16 MB en disco y seguir superando 16 MiB cargado.
¿Se verán peor las texturas más pequeñas?
De cerca, una textura de 1024 se ve más suave que una de 2048. A distancia, el juego ya dibuja los niveles de mipmap más pequeños, que son justo los que conserva el Asset Optimizer.

La herramienta para esto

Server Budget

Arrastra tu carpeta de recursos: memoria gráfica y del sistema por recurso, cada archivo de más de 16 MiB y cada archivo transmitido dos veces. En tu navegador, sin subir nada.

Abrir Server Budget

También útil aquí: Asset Optimizer · Texture Dedupe

Todas las herramientas son gratis para probar, con 5 exportaciones al día. Inicia sesión con Discord para usarlas.