Optymalizacja zasobów dla FiveM
Kompresja tekstur, mipmapy, LOD-y, rozmiar plików i sprawdzanie awarii streamowanych zasobów.
Optymalizacja zasobów w FiveM ma prosty cel: sprawić, aby załadowanie, renderowanie i przechowywanie każdego streamowanego pliku w pamięci było mniej wymagające dla klienta. Mniejsze pliki pomagają, ale najlepszy efekt daje zmniejszenie obciążenia podczas działania bez uszkadzania zasobu.
Właściwe rozwiązanie zależy od pliku. Pojazd bez LOD-ów wymaga pracy nad modelem. Słownik tekstur pełen zbyt dużych tekstur z kanałem alfa wymaga zmiany rozmiaru i lepszej kompresji. Prop z uszkodzoną kolizją wymaga sprawdzenia modelu, zanim zaczniesz zajmować się rozmiarem tekstur.
Zacznij od pliku, który powoduje obciążenie
Większość streamowanych zasobów obciąża w jednym z trzech obszarów: pamięć tekstur, geometria lub błędne odwołania. Na podstawie typu pliku zdecyduj, gdzie najpierw szukać.
| Plik | Główne obciążenie | Narzędzie Zoovdev | Co sprawdzić |
|---|---|---|---|
.ytd | Pamięć tekstur, rozmiar na dysku, mipmapy, formaty alfa | Optymalizuj tekstury | Wymiary tekstur, kompresja DDS, nieużywane wpisy, mipmapy |
.yft | Geometria pojazdu, fragmenty, zachowanie odległości renderowania | Optymalizuj pojazdy | Wynik LOD, nazwy modeli, brak przesyłanych plików _hi.yft |
.ydr | Geometria propa, materiały, osadzone tekstury | Optymalizuj propy | Liczba materiałów, linki do tekstur, konfiguracja kolizji, poprawność eksportu |
.ydd | Rozmiar drawable odzieży i użycie tekstur | Optymalizuj odzież | Rozmiar tekstur, liczba drawable, skala elementów, testy menu odzieży w grze |
.ybn | Koszt kolizji i uszkodzone granice | Narzędzia do tworzenia | Proste granice, prawidłowe materiały, rozmieszczenie, testowanie awarii |
fxmanifest.lua | Ładowanie zasobu i odwołania do danych | Code Agent | Wpisy files, linie data_file, ścieżki folderu stream, odwołania meta |
YTD i DDS oznaczają różne rzeczy
Plik .ytd to słownik tekstur RAGE. Przechowuje nazwane tekstury używane przez pliki .ydr, .yft i .ydd. Plik .dds to format pliku tekstury często używany jako format źródłowy, eksportowany lub pośredni dla tych wpisów tekstur.
Gdy ktoś mówi o kompresji YTD, zwykle ma na myśli zmianę rozmiaru i ponowną kompresję zawartych w nim tekstur. Kompresja DDS to blokowa kompresja tekstur GPU. Różni się od kompresji archiwów w stylu ZIP, ponieważ karta graficzna może bezpośrednio próbkować skompresowane bloki.
| Format | Dobre zastosowanie | Kompromis |
|---|---|---|
BC1 / DXT1 | Tekstury diffuse lub kolorowe bez płynnego kanału alfa | Mały rozmiar, 8 bajtów na blok 4x4, ale słaba jakość gradientów i ograniczony kanał alfa |
BC3 / DXT5 | Tekstury diffuse, malowania, kalkomanie lub tekstury interfejsowe wymagające alfa | Dobra obsługa, 16 bajtów na blok 4x4, dwa razy większy rozmiar niż BC1 |
BC5 | Mapy normalnych lub dane masek dwukanałowych | Lepszy dla danych dwukanałowych, zły wybór dla pełnokolorowych tekstur |
BC7 | Wysokiej jakości tekstury kolorów lub alfa, malowania oglądane z bliska, malowane detale | W wielu przypadkach czystszy niż starsze formaty, ale wolniejszy w kodowaniu, większy niż BC1, a nowsze nagłówki DDS mogą sprawiać problemy w starszych narzędziach |
| Bez kompresji | Debugowanie lub szczególne przypadki, w których wymaga tego format | Bardzo wysokie użycie pamięci. Unikaj tego w przypadku zwykłej zawartości streamowanej. |
Mipmaps
Mipmaps to mniejsze kopie tej samej tekstury. Tekstura 1024 x 1024 otrzymuje poziomy 512 x 512, 256 x 256 i kolejne, coraz mniejsze. Renderer próbuje niższe poziomy, gdy obiekt znajduje się dalej.
Dobre mipmaps zmniejszają migotanie, pełzające krawędzie i szum podczas próbkowania tekstur z daleka. Dodają dane tekstury, ale w przypadku propów świata, pojazdów, odzieży i zasobów mapy zwykle jest to właściwy kompromis. Wygeneruj mipmaps po końcowej zmianie rozmiaru i kompresji, aby łańcuch odpowiadał wyeksportowanej teksturze.
- Zachowaj mipmaps dla pojazdów, propów, odzieży, znaków i powierzchni mapy, które mogą być widoczne z daleka.
- Uważaj przy usuwaniu mipmaps z teksturami mającymi krawędzie alfa. Zasób może wyglądać ostro w Podglądzie, a w grze mocno migotać.
- Pomijaj mipmaps tylko z konkretnego powodu, na przykład gdy ścieżka tekstury nigdy nie jest próbkowana z daleka.
Rozmiary tekstur będące potęgami 2
Używaj rozmiarów tekstur będących potęgami 2, często zapisywanych jako PO2, POT lub power of 2: 64, 128, 256, 512, 1024, 2048 i 4096. W przypadku zasobów RAGE i GTA jest to zasada bezpieczeństwa, a nie tylko nawyk utrzymywania porządku podczas eksportu.
Tekstury niebędące PO2 mogą powodować więcej problemów niż tylko marnowanie pamięci. W ścieżkach RAGE mogą zakłócać próbkowanie lub nie działać w sposób, który wygląda na niezwiązany z rozmiarem. Częstym złym efektem jest przenikanie tekstur: materiał zaczyna pobierać piksele z pobliskich wpisów tekstur w słowniku, przez co prop, pojazd lub element odzieży wygląda tak, jakby odwoływał się do niewłaściwej tekstury.
Praktyczne docelowe rozmiary tekstur
Nie ma jednego użytecznego limitu rozmiaru dla każdego serwera. Rzeczywisty limit zależy od liczby zasobów streamowanych jednocześnie, odległości, z jakiej gracze podchodzą do zasobu, formatu tekstury i sprzętu klienta. Powszechnie przyjętą w społeczności wartością ostrzegawczą jest pojedynczy słownik tekstur osiągający około 16 MB fizycznej pamięci tekstur. Traktuj to jako powód do sprawdzenia zasobu, a nie jako zasadę zaliczenia lub niezaliczenia.
| Zasób | Dobry punkt wyjścia | Uwagi |
|---|---|---|
| Małe propy, drobne elementy, kalkomanie | 256 do 512 | Używaj 1024 tylko wtedy, gdy gracz czyta tekst lub ogląda powierzchnię z bliska. |
| Czytelne znaki, plakaty, markowe propy | 512 do 1024 | Używaj 2048 dla dużych, oglądanych z bliska grafik z czytelnymi detalami. Przed zwiększeniem rozmiaru przytnij puste obszary. |
| Malowania pojazdów i mapy diffuse | 1024 do 2048 | Używaj 4096 dla pojazdów wystawowych oglądanych z bliska lub malowań o wysokiej szczegółowości, a następnie sprawdź koszt pamięci. |
| Mapy normalnych pojazdów, chropowatość, specular, maski | 512 do 1024 | Często mogą być mniejsze niż mapa diffuse. Użyj właściwego formatu danych, na przykład BC5 dla map normalnych. |
| Odzież | 512 do 1024 | Zarezerwuj 2048 dla dużych ubrań z widocznymi detalami. Małe akcesoria rzadko tego potrzebują. |
| MLO i tekstury mapy | 512 do 1024 na ponownie używany materiał | Dziel słowniki logicznie i zmniejsz liczbę powtarzających się powierzchni 2K lub 4K, zanim ruszysz geometrię. |
| Rozmiar tekstury | BC1 / DXT1 z mipmaps | BC3 / DXT5 lub BC7 z mipmaps |
|---|---|---|
| 1024 x 1024 | Około 0,7 MiB | Około 1,3 MiB |
| 2048 x 2048 | Około 2,7 MiB | Około 5,3 MiB |
| 4096 x 4096 | Około 10,7 MiB | Około 21,3 MiB |
Optymalizacja pojazdów i _hi.yft
W przypadku pojazdów główna optymalizacja po stronie modelu polega na generowaniu LOD-ów dla plików .yft. Nie dodawaj wersji _hi.yft do optymalizatora pojazdów Zoovdev. Optymalizator pomija ten typ i tworzy dane LOD na podstawie zwykłych plików modeli pojazdów.
Większy zoptymalizowany plik .yft może być dobrym wynikiem. Plik może zawierać więcej danych, ponieważ ma teraz modele o niższym poziomie szczegółowości do renderowania z daleka. Zaletą jest to, że klienci mogą renderować mniej wymagającą geometrię, gdy pojazd jest daleko. Oszczędności tekstur dla pojazdów zwykle pochodzą z powiązanych plików .ytd.
- Prześlij zwykłe pliki pojazdu
.yft, a nie pliki_hi.yft. - Optymalizuj pliki
.ytdosobno za pomocą optymalizacji tekstur. - Sprawdź tworzenie pojazdu, oddalanie się od niego, powrót do niego oraz ponowne uruchomienie zasobu.
- Zachowaj zgodność nazw modeli, nazw słowników tekstur i odwołań w meta pojazdu.
Propy, odzież i kolizje
Propy w .ydr i odzież w .ydd zwykle zyskują na rozsądnej geometrii, mniejszej liczbie zbędnych materiałów i mniejszych słownikach tekstur. Jeśli tekstury są osadzone w drawable, sprawdź po eksporcie zarówno wynik modelu, jak i tekstur.
Kolizja w .ybn powinna być prostsza niż siatka wizualna. Nieprawidłowe granice mogą powodować problemy z fizyką, zepsute interakcje lub crashe, które wyglądają na niezwiązane z modelem. Sprawdź kolizję w grze po eksporcie, szczególnie w przypadku MLO, dużych propów i przeniesionych fragmentów mapy.
Kontrole zasobu i manifestu
FiveM automatycznie streamuje assets umieszczone w folderze stream/ zasobu. Nie wymieniaj streamowanych plików .ytd, .yft, .ydr ani .ydd w files tylko dlatego, że znajdują się w stream/. Używaj manifestu do odwołań do plików danych i meta, które wymagają jawnego ładowania.
files {
'data/**/*.meta'
}
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'Błędne linie data_file mogą sprawić, że poprawny asset będzie wyglądał na uszkodzony. Jeśli streamowane pliki znajdują się w prawidłowym folderze stream/, ale zasób nadal działa nieprawidłowo, sprawdź odwołania meta, nazwy plików i deklaracje plików danych, zanim obwinisz kompresję.
Objawy crashy i jak je zawęzić
Crashe assetów często pojawiają się jako objawy zamiast czytelnej nazwy pliku. Możesz zobaczyć komunikat o nieprawidłowym wskaźniku, błędy pamięci neither virtual nor physical, zawieszenia zapytań DirectX lub GPU, failed to call inflate() for streaming file albo crash występujący tylko wtedy, gdy ktoś tworzy pojazd, zbliża się do obszaru, otwiera menu odzieży lub uruchamia zasób.
- Odtwórz crash na lokalnym lub testowym serwerze z jak najmniejszą liczbą uruchomionych zasobów.
- Wyłącz ostatnio dodane streamowane assets, a następnie włączaj je ponownie połowami, aż crash wróci.
- W przypadku pojazdów twórz po jednym modelu naraz. Sprawdź tworzenie, krótką jazdę, streaming z dystansu i ponowne uruchomienie zasobu.
- Aby sprawdzić tekstury, tymczasowo zamień
.ytdna sprawdzony słownik lub usuń opcjonalne tekstury, aby oddzielić problemy z teksturami od problemów z modelami. - Sprawdź
fxmanifest.lua,files,data_file, ścieżki folderów stream i odwołania meta. - Zwróć uwagę, kiedy występuje crash. Przy dołączaniu wskazuje na globalną mapę, odzież lub zasoby ładowane zawsze. Przy zbliżaniu się wskazuje na mapę, prop lub MLO. Przy tworzeniu wskazuje na pojazd. Przy otwieraniu menu wskazuje na zawartość peda lub odzieży.
Dobry proces pracy w Zoovdev
- Przetwórz słowniki tekstur przez Optymalizuj tekstury i sprawdź wymiary, kompresję, mipmapy oraz użycie kanału alfa.
- Przetwórz pliki pojazdów
.yftprzez Optymalizuj pojazdy bez przesyłania plików_hi.yft. - Użyj Optymalizuj propy dla modeli propów i Optymalizuj odzież dla drawable odzieży.
- Użyj Code Agent, aby sprawdzić manifesty zasobów, odwołania do plików danych i nazewnictwo assetów, gdy zasób nadal działa nieprawidłowo.
- Przetestuj zoptymalizowany zasób w grze, zanim połączysz go z dużym pakietem produkcyjnym.
Powiązane materiały
Formaty plików, assety Gen9 i procesy pracy z teksturami pojazdów są bezpośrednio związane z optymalizacją.