Tekstury, pliki i paczki · 3 min czytania

Ostrzeżenie FiveM "oversized asset": co oznacza i jak to naprawić

Czytaj w języku: English · Español · Français · Deutsch · Português · Italiano · Türkçe · Русский

Uruchamiasz serwer, a konsola zapełnia się liniami takimi jak ta:

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

To ostrzeżenie FiveM o zbyt dużych zasobach (oversized asset). To nie błąd i plik nadal jest streamowany, ale pokazuje, które pliki są na tyle ciężkie, że mogą sprawiać kłopoty. Poniżej: co jest mierzone, dlaczego rozmiar pliku na dysku mało mówi i jak zmniejszyć te pliki.

Co mierzy FiveM

Przy starcie serwera FiveM czyta nagłówek każdego pliku w folderze stream zasobu. Nagłówek mówi, ile pamięci plik zajmuje po wczytaniu, w dwóch częściach: physical (pamięć graficzna: tekstury i vertex buffery) i virtual (pamięć systemowa: reszta zasobu). Progi odczytane z kodu FiveM są dla obu takie same:

Pamięć jednego plikuCo robi FiveM
powyżej 16 MiBwyświetla ostrzeżenie
powyżej 32 MiBwyświetla je na żółto
48 MiB i więcejdodaje: "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)." (Zbyt duże zasoby mogą i BĘDĄ powodować problemy ze streamingiem, np. modele się nie wczytują ani nie renderują.)
powyżej 64 MiBwyświetla je na czerwono

Ostrzeżenie dotyczy pojedynczego pliku. Plik .ytd o rozmiarze 20 MiB zostanie oznaczony, nawet jeśli reszta serwera jest lekka.

Dlaczego rozmiar na dysku myli

Pliki streamowane są na dysku skompresowane, a ostrzeżenie liczy to, co zajmują po wczytaniu. Dla tekstury to jej rozmiar w formacie GPU, ze wszystkimi poziomami mipmap, zaokrąglony do pełnych stron pamięci. Przybliżenie przed tym zaokrągleniem:

Tekstura (z mipmapami)DXT1 (bez przezroczystości)DXT5 (z przezroczystością)
1024 × 10240,67 MiB1,33 MiB
2048 × 20482,67 MiB5,33 MiB
4096 × 409610,67 MiB21,33 MiB

Pojedyncza tekstura 4096 × 4096 DXT5 jest więc sama w sobie ponad granicą, a .ytd z kilkoma teksturami 2048 może ją przekroczyć, choć w eksploratorze plików wygląda na małe. Zaokrąglanie do stron może sprawić, że suma będzie wyraźnie większa niż suma tekstur.

Jeśli plik jest oznaczony za virtual (pamięć systemową), to nie tekstury: to inne dane zasobu, np. jego kolizja. Zmniejszanie tekstur tego nie zmieni.

Znajdź wszystkie za duże pliki naraz

Zamiast czytać konsolę, przeciągnij cały folder resources do Server Budget. Narzędzie czyta te same nagłówki w przeglądarce (nic nie jest wysyłane) i wyświetla:

  • Oversized: pliki powyżej 16 MiB pamięci graficznej, najgorsze na górze.
  • By resource (wg zasobu): ile pamięci streamuje każdy zasób, posortowane.
  • Streamed twice (streamowane dwa razy): nazwy plików, które streamuje więcej niż jeden zasób. Gra dostaje tylko jeden z nich, więc zostaw jedną kopię.

Lista Oversized w Server Budget liczy pamięć graficzną. Plik, który konsola oznacza tylko za pamięć wirtualną, się w niej nie znajdzie.

Zmniejsz tekstury

Weź pliki oflagowane przez Server Budget (.ytd, .ydr, .yft, .ydd) i przeciągnij je do Asset Optimizer:

  1. Ustaw Largest texture size (największy rozmiar tekstury). 1024 to wartość domyślna; 2048 to częsty wybór dla samochodów i malowań oglądanych z bliska.
  2. Zostaw zaznaczone Add missing mipmaps (dodaj brakujące mipmapy): tekstury zapisane bez nich je odzyskają.
  3. Sprawdź szacunek ("At 1024 px: about … less texture memory", czyli około … mniej pamięci tekstur przy 1024 px) i tabelę plików.
  4. Kliknij Download the lighter files (.zip) (pobierz lżejsze pliki, .zip). Dostaniesz każdy plik pod jego nazwą: podmień nimi stare.
Asset Optimizer z czterema przeciągniętymi plikami stream: rozmiar każdego pliku, największa tekstura i pamięć tekstur, jaką da 1024 px, z zaznaczonym Add missing mipmaps
Cztery pliki testowe: jeden ma tekstury 2048 px, a sześć nie ma mipmap; przy 1024 px oszczędza około 9 MB pamięci tekstur.

Tekstura z mipmapami jest zmniejszana przez usunięcie jej największych poziomów, bez ponownej kompresji, więc wygląda dokładnie tak samo z trochę większej odległości. Tekstura bez mipmap jest budowana od nowa ze wszystkimi poziomami, w wybranym rozmiarze, a jeśli jest mniejsza, we własnym.

Paczki, które powtarzają tę samą teksturę w wielu słownikach, mogą ją też współdzielić: Texture Dedupe przenosi powtarzające się tekstury do jednego wspólnego .ytd. Potem przeciągnij folder ponownie do Server Budget, by zobaczyć wynik.

Pytania

Czy 16 MiB to twarda granica?
Nie. FiveM nadal streamuje plik i tylko ostrzega. Od 48 MiB własne ostrzeżenie mówi, że takie zasoby spowodują problemy ze streamingiem, więc traktuj wszystko powyżej 16 MiB jako plik do zmniejszenia.
Czy ostrzeżenie liczy rozmiar pliku na dysku?
Nie. Liczy pamięć, jaką plik zajmuje po wczytaniu, odczytaną z nagłówka pliku. Plik może mieć na dysku wyraźnie poniżej 16 MB, a po wczytaniu nadal przekraczać 16 MiB.
Czy mniejsze tekstury będą wyglądać gorzej?
Z bliska tekstura 1024 jest mniej ostra niż 2048. Z daleka gra i tak rysuje mniejsze poziomy mipmap, a dokładnie te zachowuje Asset Optimizer.

Narzędzie do tego

Server Budget

Przeciągnij folder resources: pamięć graficzna i systemowa na zasób, każdy plik powyżej 16 MiB i każdy plik streamowany dwa razy. W przeglądarce, nic nie jest wysyłane.

Otwórz Server Budget

Przydatne także tutaj: Asset Optimizer · Texture Dedupe

Więcej poradników

Wszystkie poradniki →

Każde narzędzie możesz wypróbować za darmo: 5 eksportów dziennie. Zaloguj się przez Discord, aby z nich korzystać.