FiveM oversized assets: reduce los .ytd sin perder calidad
¿FiveM dice que un asset usa 76 MiB de physical memory? Qué significa el aviso de oversized assets, por qué rompe el streaming y cómo reducir los .ytd.
Por Termi
- Streaming
- Textures
- Performance
- Desktop app
En esta página
- Qué significa el aviso
- Por qué los oversized assets rompen el streaming
- Physical memory frente a virtual memory
- ¿Cuánto es demasiado?
- Encuentra todos los oversized assets de tu servidor
- Reduce las texturas .ytd sin perder calidad
- La forma manual y su pega
- Redúcelas con el Stream Optimizer
- Qué preajuste elegir
- Lo que nunca toca
- Baja los lodDistances de los coches addon
- Preguntas frecuentes
- ¿Un oversized asset puede crashear mi servidor?
- ¿Son 16 MiB un límite estricto?
- ¿A partir de qué tamaño avisa FiveM de los oversized assets?
- ¿Y si el aviso nombra un archivo .yft o .ydr?
- ¿Tienen que hacer algo los jugadores?
- Qué plan lo incluye
Arrancas tu servidor de FiveM y la consola se llena de avisos como este: “Asset … uses 76.0 MiB of physical memory. Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).” La mayoría de owners lo ignora, porque el servidor funciona. Luego los jugadores empiezan a avisar de carreteras que se vuelven una papilla borrosa, edificios que nunca cargan, coches que aparecen como cajas grises. Es el aviso haciéndose realidad. Esta guía explica qué significa el mensaje, cuánto es demasiado y cómo reducir los texture dictionaries .ytd sobredimensionados sin que tus mapas y coches se vean peor.
Respuesta corta
El aviso significa que un archivo en streaming necesita más memoria gráfica de la que FiveM quiere cargar de golpe, casi siempre por texturas 4K. Mantén cada .ytd por debajo de unos 16 MiB de physical memory. La solución segura más rápida es quitar los mayores niveles de mip de las texturas sobredimensionadas, que es lo que hace el Stream Optimizer de FiveDock con un clic, con copia de seguridad de los originales.
Qué significa el aviso
Así se ve el mensaje en la consola del servidor. Los nombres de tus resources serán distintos:
Asset example_resource/example_props_txd.ytd uses 76.0 MiB of physical memory. Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).
Asset example_vehicle/example_vehicle+hi.ytd uses 24.0 MiB of physical memory.Léelo de izquierda a derecha:
El servidor imprime la línea cuando arranca un resource, así que te avisa del problema antes de que ningún jugador lo vea. El archivo sigue haciendo streaming. FiveM solo te advierte de que cada jugador que se acerque tendrá que cargar ahora 76 MiB de una pieza.
Por qué los oversized assets rompen el streaming
GTA V se diseñó para cargar el mundo en trozos pequeños según te mueves. Mantiene un pool de memoria limitado para lo que te rodea y no deja de meter y sacar cosas de él. Un solo texture dictionary de 76 MiB ocupa por sí solo buena parte de ese pool. Cuando varios coinciden en la misma zona del mapa, al juego se le acaba el sitio y empieza a soltar cosas que todavía necesita. Los jugadores lo ven así:
Los jugadores con mucha VRAM lo notan más tarde que los que tienen una tarjeta de 4 GB, así que el mismo servidor puede verse bien para el owner y roto para la mitad de los jugadores.
Physical memory frente a virtual memory
Cada archivo de GTA V en streaming se divide en dos partes. La memoria virtual guarda la estructura: nombres, formatos, la lista de texturas. La memoria physical guarda los datos de píxeles en bruto que van a la tarjeta gráfica. En un .ytd, casi todo el peso es physical, y ese es el número del que avisa FiveM.
¿Cuánto es demasiado?
El objetivo habitual, con el que trabajan la mayoría de desarrolladores de FiveM, es 16 MiB de physical memory por asset. Por debajo, FiveM calla. Por encima sale el aviso, y cuanto más te pases, más probables son los problemas de arriba. 16 MiB no es un muro, pero tómalo como presupuesto para cada .ytd.
El tamaño de una textura en memoria depende solo de tres cosas: su resolución, su formato y sus niveles de mip. La tabla muestra una textura con su cadena de mips completa:
size DXT1 DXT5 A8R8G8B8 (uncompressed)
4096x4096 10.7 MiB 21.3 MiB 85.3 MiB
2048x2048 2.7 MiB 5.3 MiB 21.3 MiB
1024x1024 0.7 MiB 1.3 MiB 5.3 MiB
512x512 0.2 MiB 0.3 MiB 1.3 MiBAsí, una sola textura 4096×4096 en DXT5 ya cuesta 21,3 MiB, más que todo el presupuesto. Un pack de mapa con tres de ellas, un par de normal maps y algunas texturas de remate cae justo en los 76 MiB del ejemplo. Una textura 4K sin comprimir es peor aún, con 85,3 MiB ella sola. La mayoría de los oversized assets son simplemente texturas 4K que nadie necesitaba en 4K.
Encuentra todos los oversized assets de tu servidor
La consola solo muestra el aviso mientras arranca el servidor, mezclado con todo lo demás, y es fácil perder alguno. Tienes dos opciones mejores.
example_resource stream/example_props_txd.ytd
this texture dictionary allocates 76.0 MiB of graphics memory (61.2 MiB on disk),
more than the 16.0 MiB a pack should stay underAsset Doctor también marca los modelos que hacen streaming en dos packs y los resources que nunca arrancan, así que un solo escaneo cubre los motivos habituales por los que un mapa o un coche sale mal. Si dos packs traen el mismo archivo de mapa, la guía de conflictos de mapas explica qué rompe eso.
Reduce las texturas .ytd sin perder calidad
Cada textura de un .ytd está guardada varias veces: a tamaño completo, luego a la mitad, a un cuarto, a un octavo y así hasta unos pocos píxeles. Esas copias son los niveles de mip. El juego elige el nivel que corresponde al tamaño de la superficie en pantalla. Una pared a 20 metros recibe un mip pequeño, y el de tamaño completo solo se usa cuando pegas la cara a ella.
Eso te da una forma de reducir una textura sin tocar sus píxeles: quitar los niveles de mip más grandes. Una textura de 4096×4096 sin sus dos primeros niveles pasa a ser de 1024×1024, con exactamente los píxeles que el juego ya mostraba desde cualquier distancia normal. No se redimensiona, recomprime ni recodifica nada, así que no aparece desenfoque nuevo ni artefactos de bloques. Cada nivel que quitas reduce la memoria a más o menos una cuarta parte.
Ten en cuenta cuánta pantalla hay. En un monitor de 1920×1080, ni una pared que ocupe toda la vista muestra más de unos 2000 píxeles de ancho, así que una textura 4K en una farola o en la puerta de un coche es memoria gastada en un detalle que ningún jugador ve.
La forma manual y su pega
Sin herramienta, la solución es así:
Funciona, pero al guardar en DXT la imagen se comprime por segunda vez, y cada pasada añade artefactos, sobre todo en normal maps y texto. En un servidor con unos cientos de coches y una docena de mapas, además, son días de trabajo.
Redúcelas con el Stream Optimizer
El Stream Optimizer de la app de escritorio de FiveDock aplica el truco de los niveles de mip a todos los .ytd de una carpeta a la vez. Recorta las texturas sobredimensionadas hasta el mayor nivel de mip que cabe en tu límite y deja el resto de los datos de píxeles byte por byte como estaban.
Lo mismo desde la línea de comandos, con el archivo del aviso de arriba:
> fivedock optimize C:\server\resources\example_resource
1 .ytd file under C:\server\resources\example_resource, textures over 1024px
stream\example_props_txd.ytd 76.0 MiB -> 12.0 MiB
example_wall_d 4096x4096 -> 1024x1024 DXT5
example_wall_n 4096x4096 -> 1024x1024 DXT5
example_floor_d 4096x4096 -> 1024x1024 DXT1
example_floor_n 4096x4096 -> 1024x1024 DXT1
example_trim_d 2048x2048 -> 1024x1024 DXT5
kept example_sign_emis 2048x2048 emissive
Would free 64.0 MiB of game memory. Nothing was written; add --apply --backup <dir>.Un escaneo no escribe nada. Añade --apply --backup <dir> para escribir los archivos más pequeños y guardar los originales en esa carpeta. En este ejemplo el archivo pasa de 76,0 MiB a 12,0 MiB, por debajo del presupuesto de 16 MiB, y el aviso desaparece en el siguiente arranque.
Qué preajuste elegir
Empieza con Equilibrado, pasa conduciendo por lo que ha cambiado y sube a Ligero en los pocos assets donde notes diferencia.
Lo que nunca toca
No se pierde nada
Si eliges una carpeta de copia, los originales se copian allí antes de escribir nada. Para deshacer, cópialos de vuelta.
Baja los lodDistances de los coches addon
En los vehículos, las texturas son solo la mitad de la historia. Cada coche de vehicles.meta tiene una lista lodDistances: las distancias, en metros, a las que pasa de su modelo de alto detalle a otros más simples, y el último valor es a qué distancia se dibuja como mucho. Muchos coches addon traen valores muy por encima de los del juego base, así que todos los coches de una calle con mucho tráfico se mantienen a detalle completo, +hi.ytd incluido, desde cientos de metros.
<Item>
<modelName>example_car</modelName>
<lodDistances content="float_array">
40.000000
80.000000
200.000000
400.000000
1000.000000
1000.000000
</lodDistances>
</Item>Marca Optimizar distancia LOD en el Stream Optimizer, o pasa --lod en la línea de comandos. Cada valor baja como mucho a 15, 30, 70, 140, 250 y 250 metros, cerca del juego base. Un valor que ya es más bajo nunca se sube, y solo cambian los números del archivo.
> fivedock optimize C:\server\resources\example_vehicle --lod --no-textures
1 .meta file with lodDistances
data\vehicles.meta example_car 40 / 80 / 200 / 400 / 1000 / 1000 -> 15 / 30 / 70 / 140 / 250 / 250
Nothing was written; add --apply --backup <dir>.Preguntas frecuentes
¿Un oversized asset puede crashear mi servidor?
No. El servidor solo envía el archivo. El coste lo paga el juego de cada jugador, y se nota como pérdida de texturas, modelos que faltan y crashes en el cliente, más a menudo en tarjetas con poca VRAM.
¿Son 16 MiB un límite estricto?
No, un archivo de 20 MiB suele hacer streaming bien por sí solo. El problema llega con muchos archivos sobredimensionados en un mismo sitio. 16 MiB por .ytd es el presupuesto que te mantiene a salvo en cualquier mapa, con cualquier número de jugadores alrededor.
¿A partir de qué tamaño avisa FiveM de los oversized assets?
FXServer revisa cada archivo en streaming cuando arranca su resource e imprime Asset <resource>/<file> uses <size> MiB of physical memory. para cualquier archivo de más de 16 MiB, en azul por encima de 16 MiB, en amarillo por encima de 32 MiB y en rojo por encima de 64 MiB. La frase “Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).” solo se añade pasados los 48 MiB. La misma comprobación se hace con la virtual memory de un archivo, y entonces la línea termina en of virtual memory.. Los umbrales están en el ResourceStreamComponent.cpp de FXServer.
¿Y si el aviso nombra un archivo .yft o .ydr?
Entonces las texturas están incrustadas en el archivo del modelo. El Stream Optimizer solo lee archivos .ytd, así que primero mueve las texturas a un .ytd aparte con OpenIV o CodeWalker, o pide al autor una versión más ligera.
¿Tienen que hacer algo los jugadores?
No. Tras reiniciar, los archivos modificados tienen un hash nuevo, y cada jugador descarga la versión más pequeña la próxima vez que entre.
Prueba después de optimizar. Pasa por cada mapa que hayas cambiado y mira los coches de cerca. Si algún asset se ve demasiado blando, devuelve su original desde la carpeta de copia o vuelve a pasarlo con el preajuste Ligero.
Qué plan lo incluye
El Stream Optimizer está en todos los planes, en la app de escritorio y en el CLI. Todo corre en tu máquina y tus archivos nunca salen de ella. Asset Doctor forma parte del plan Metro y vigila tu servidor en vivo por si aparecen nuevos oversized assets, para que el siguiente pack de coches en 4K se detecte antes de que lo encuentren tus jugadores. Compara los planes o mira todas las funciones.