Optymalizacja zasobów dla FiveM

Kompresja tekstur, mipmapy, LOD-y, rozmiar plików i sprawdzanie awarii streamowanych zasobów.

Poradniki 7 min czytania
Syntax Platform team
Render zasobu silnika RAGE

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ć.

PlikGłówne obciążenieNarzędzie ZoovdevCo sprawdzić
.ytdPamięć tekstur, rozmiar na dysku, mipmapy, formaty alfaOptymalizuj teksturyWymiary tekstur, kompresja DDS, nieużywane wpisy, mipmapy
.yftGeometria pojazdu, fragmenty, zachowanie odległości renderowaniaOptymalizuj pojazdyWynik LOD, nazwy modeli, brak przesyłanych plików _hi.yft
.ydrGeometria propa, materiały, osadzone teksturyOptymalizuj propyLiczba materiałów, linki do tekstur, konfiguracja kolizji, poprawność eksportu
.yddRozmiar drawable odzieży i użycie teksturOptymalizuj odzieżRozmiar tekstur, liczba drawable, skala elementów, testy menu odzieży w grze
.ybnKoszt kolizji i uszkodzone graniceNarzędzia do tworzeniaProste granice, prawidłowe materiały, rozmieszczenie, testowanie awarii
fxmanifest.luaŁadowanie zasobu i odwołania do danychCode AgentWpisy 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.

FormatDobre zastosowanieKompromis
BC1 / DXT1Tekstury diffuse lub kolorowe bez płynnego kanału alfaMały rozmiar, 8 bajtów na blok 4x4, ale słaba jakość gradientów i ograniczony kanał alfa
BC3 / DXT5Tekstury diffuse, malowania, kalkomanie lub tekstury interfejsowe wymagające alfaDobra obsługa, 16 bajtów na blok 4x4, dwa razy większy rozmiar niż BC1
BC5Mapy normalnych lub dane masek dwukanałowychLepszy dla danych dwukanałowych, zły wybór dla pełnokolorowych tekstur
BC7Wysokiej jakości tekstury kolorów lub alfa, malowania oglądane z bliska, malowane detaleW 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 kompresjiDebugowanie lub szczególne przypadki, w których wymaga tego formatBardzo 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óbDobry punkt wyjściaUwagi
Małe propy, drobne elementy, kalkomanie256 do 512Używaj 1024 tylko wtedy, gdy gracz czyta tekst lub ogląda powierzchnię z bliska.
Czytelne znaki, plakaty, markowe propy512 do 1024Uż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 diffuse1024 do 2048Uż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, maski512 do 1024Często mogą być mniejsze niż mapa diffuse. Użyj właściwego formatu danych, na przykład BC5 dla map normalnych.
Odzież512 do 1024Zarezerwuj 2048 dla dużych ubrań z widocznymi detalami. Małe akcesoria rzadko tego potrzebują.
MLO i tekstury mapy512 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 teksturyBC1 / DXT1 z mipmapsBC3 / DXT5 lub BC7 z mipmaps
1024 x 1024Około 0,7 MiBOkoło 1,3 MiB
2048 x 2048Około 2,7 MiBOkoło 5,3 MiB
4096 x 4096Około 10,7 MiBOkoło 21,3 MiB
Przybliżone zużycie pamięci przez tekstury z pełnymi łańcuchami mipmap. Rzeczywisty rozmiar YTD może się różnić, ponieważ słowniki zawierają nazwy, nagłówki i wiele wpisów tekstur.

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 .ytd osobno 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.

lua
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.

  1. Odtwórz crash na lokalnym lub testowym serwerze z jak najmniejszą liczbą uruchomionych zasobów.
  2. Wyłącz ostatnio dodane streamowane assets, a następnie włączaj je ponownie połowami, aż crash wróci.
  3. W przypadku pojazdów twórz po jednym modelu naraz. Sprawdź tworzenie, krótką jazdę, streaming z dystansu i ponowne uruchomienie zasobu.
  4. Aby sprawdzić tekstury, tymczasowo zamień .ytd na sprawdzony słownik lub usuń opcjonalne tekstury, aby oddzielić problemy z teksturami od problemów z modelami.
  5. Sprawdź fxmanifest.lua, files, data_file, ścieżki folderów stream i odwołania meta.
  6. 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

  1. Przetwórz słowniki tekstur przez Optymalizuj tekstury i sprawdź wymiary, kompresję, mipmapy oraz użycie kanału alfa.
  2. Przetwórz pliki pojazdów .yft przez Optymalizuj pojazdy bez przesyłania plików _hi.yft.
  3. Użyj Optymalizuj propy dla modeli propów i Optymalizuj odzież dla drawable odzieży.
  4. 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.
  5. 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ą.

optimizationfivemassetsytdddsyftlodmipmapsbc7crashes
1358 wyświetleń