Aby zapewnić działanie twoich wysp na wszystkich obsługiwanych platformach, Fortnite ma pewne ograniczenia pamięci.
W Unreal Editor dla Fortnite (UEFN) możesz korzystać z rozszerzonych możliwości pamięci, aby tworzyć większe i bardziej zróżnicowane gry. Aby wykorzystać to w pełni, warto zrozumieć sposób, w jaki obliczane jest użycie pamięci w UEFN.
Podział świata
World Partition odpowiada za całą magię kryjącą się za tworzeniem przygód na dużej wyspie. Funkcja ta automatycznie dzieli świat na siatkę i streamuje tylko niezbędne komórki.
World Partition wykorzystuje streaming, który ładuje i rozładowuje komórki, oraz Hierarchical Level of Detail (HLOD), który grupuje i zmniejsza ilość szczegółów na zasobach w miarę oddalania się kamery gracza.
Aby dowiedzieć się więcej na temat systemu World Partition, streamingu i HLOD, patrz Streaming i poziomy HLOD.
Jak obliczane jest zużycie pamięci
UEFN oblicza zużycie pamięci na podstawie danych wygenerowanych w czasie konwertowania. Oznacza to, że:
Szybkie wyniki w przypadku dużych wysp.
Spójne wyniki za każdym razem, gdy przeprowadzasz obliczenia na tej samej wersji wyspy, w tej samej wersji Fortnite i na tym samym urządzeniu.
Szeroka obsługa większej liczby typów zasobów i SceneGraph.
System obliczania pamięci w UEFN działa tylko w czasie edycji i nie można go używać do oceny zużycia pamięci w czasie gry. Służy do sprawdzania, czy podstawowe zużycie pamięci przez wyspę nie przekracza rozsądnego progu.
Jednak niestandardowa logika czasu wykonywania może prowadzić do wysokiego zużycia pamięci, co może powodować problemy dla graczy, ograniczając ich możliwość gry na twojej wyspie. Zalecamy korzystanie z profilera przestrzennego, aby uzyskać lepszy obraz tego, jak wyspa wykorzystuje pamięć i działa podczas rozgrywki, co pozwoli graczom uniknąć problemów ze stabilnością lub wydajnością.
Układ sesji
Kiedy załadujesz się do swojej sesji, w swoim interfejsie zobaczysz pasek Aktualne zużycie pamięci.
Pasek pokazuje maksymalnie 100 000 jednostek pamięci, aby dać ci obraz zużycia pamięci na twojej wyspie.
Po włączeniu strumieniowania pamięć jest obliczana na podstawie pozycji gracza na wyspie, a nie całkowitej pamięci używanej przez wszystkie zasoby na wyspie. Wykonanie obliczenia pamięci zapewni najdokładniejsze wartości zużycia pamięci dla każdej komórki streamingu.
Niektóre zasoby pozostaną w pamięci niezależnie od pozycji gracza i będą zwiększać zużycie pamięci w dowolnym miejscu na mapie. Większość zasobów będzie ładowana i usuwana w miarę ich przesyłania, a pasek będzie aktualizowany, aby to odzwierciedlić.
Wszystkie zasoby, do których odwołuje się poziom (w tym urządzenia, krajobrazy, niestandardowe siatki i tekstury itp.) liczą się do całkowitego zużycia pamięci.
Zwróć uwagę, że jeśli jakikolwiek obszar w twoim poziomie przekroczy 100 000, publikacja wyspy nie będzie możliwa.
Jako użytkownik UEFN możesz przekroczyć limit 100,000 na termometrze, o ile nie publikujesz swojej zawartości. Pamiętaj, że osoby współpracujące z tobą na konsoli mogą napotkać sprzętowy limit dostępnej pamięci, który spowoduje wyrzucenie ich z sesji. Będą one mogły połączyć się ponownie, gdy problem zostanie rozwiązany.
Wprowadzanie zmian w zawartości
System wymaga aktualnych skonwertowanych danych, aby dokładnie obliczyć użycie pamięci. Po wprowadzeniu zmian w treści za pomocą edycji na żywo lub smartfona zobaczysz komunikat Wyślij zmiany, nawet jeśli wskaźnik trybu edycji pokazuje Aktualne, ponieważ edycja na żywo nie odświeża skonwertowanych danych używanych do obliczeń pamięci.
Dopóki nie wyślesz zmian, pasek zużycia będzie nadal aktualizowany, ale będzie pokazywał nieaktualną wartość. Koszt modyfikacji treści nie zostanie odzwierciedlony.
Uruchamianie obliczeń pamięci
Twoja wyspa musi być w stanie działać na wszystkich obsługiwanych platformach sprzętowych, aby można było ją opublikować.
Przed publikacją koniecznie upewnij się, że projekt nie przekracza limitów pamięci. Z listy rozwijanej Projekt wybierz Uruchom obliczenia pamięci.
Proces ten oblicza pamięć używaną w każdej komórce.
Zostanie wyświetlone okno dialogowe z prośbą o przesłanie wersji prywatnej. Kliknij przycisk i obserwuj pasek postępu.
Ewentualnie możesz dodać opis wersji projektu.
U dołu ekranu pojawi się wyskakujące okienko z informacją, że trwa obliczanie pamięci.
Po zakończeniu przesyłania wyskakujące okienko zmieni się, wskazując, że obliczenia zostały rozpoczęte.
W kliencie pojawi się wynik obliczenia pamięci. Naciśnięcie Kontynuuj przywróci kontrolę nad postacią gracza.
Po zakończeniu postać gracza teleportuje się z powrotem do pierwotnej lokalizacji sprzed rozpoczęcia obliczeń, a ty zobaczysz jeden z dwóch statusów:
Jeśli w swoim projekcie masz włączony streaming, możesz oblecieć wyspę, aby zobaczyć ilość miejsca zajmowanego przez różne obszary.
Jeśli streaming jest wyłączony, pasek Użycie pamięci zmienia się podczas przelotu. Dzięki temu możesz zidentyfikować obszary w poziomie, które mogą przekraczać budżet.
Jeśli wyspa przekroczyła budżet, przed publikacją musisz naprawić problemy z pamięcią lokalną.
Moja wyspa przekroczyła budżet. Co mogę zrobić?
Istnieje wiele strategii oszczędzania pamięci po osiągnięciu limitu. Wypróbuj dowolną kombinację poniższych opcji:
Po obliczeniu pamięci możesz otworzyć arkusz ze 100 zasobami wymagającymi największej ilości pamięci na twojej wyspie. Wybierz Okno > Dziennik komunikatów > Wyniki testu pamięci.
W poniższej tabeli znajdziesz definicje poszczególnych terminów:
Termin Objaśnienie Zasób
Zwykle jest to nazwa zasobu w przeglądarce zawartości. Niektóre zasoby mogą być wyświetlane jako „Zasób Fortnite” – jest to nazwa przypisywana do zasobów, które nie zostały utworzone w twoim projekcie, ale wciąż zwiększają zużycie pamięci wyspy.
Typ
Jest to rodzaj zasobu. Na przykład Tekstura, Materiał, Poziom i inne.
# Odwołania aktorów
Liczba aktorów odwołujących się do zasobu w sposób bezpośredni lub pośredni.
# Odwołania pakietów
Liczba skonwertowanych pakietów odwołujących się do zasobu. Zwykle ta liczba się zwiększa, jeśli do zasobu odwołuje się wiele komórek World Partition.
Rozmiar
Rozmiar zasobu. Jest to wartość, jaką dany zasób wnosi do paska bieżącego zużycia pamięci w próbkowanej lokalizacji.
Streamuj tekstury tam, gdzie to możliwe. Oznacza to tworzenie tekstur dostosowanych do streamowania (wymiary będące potęgą dwójki) oraz konfigurowanie tekstur tak, aby generowane były mipmapy. Jeśli tekstur nie można streamować, zawsze będą używać maksymalnej ilości pamięci, niezależnie od tego, z jakiej odległości są używane. Więcej informacji można znaleźć na stronie Zmiana wielkości tekstur.
Włącz streaming w panelu World Partition. Choć jest to konieczność w przypadku dużych wysp, mniejsze wyspy również mogą skorzystać ze streamingu, zwłaszcza jeśli zawartość staje się zbyt gęsta.
Gdy streaming jest włączony, upewnij się, że tam, gdzie to możliwe, aktorzy mają włączoną opcję „Jest przestrzennie załadowane”. W przeciwnym razie zostaną skonwertowani w pakiecie poziomu głównego i zawsze będą ładowani. Jest to szczególnie istotne w przypadku aktorów proxy streamowania krajobrazu, ponieważ mogą zawierać wiele danych kolizji, które zazwyczaj lepiej streamować na żądanie.
Rozmieść zawartość wyspy równomiernie. Zgromadzenie zbyt wielu aktorów na małym obszarze uniemożliwi streamowanie treści i przyczyni się do przekroczenia budżetu pamięci.
Zmniejsz liczbę urządzeń używanych na wyspie. Urządzenia są jednymi z najbardziej kosztownych aktorów, jakich można umieścić. Jednak umieszczenie instancji tego samego urządzenia wiąże się ze znacznie niższym kosztem pamięci.
Rzuć okiem na okno Rozmiar projektu. Jeśli widzisz na dysku obiekty zajmujące dużo pamięci, istnieje prawdopodobieństwo, że będą one również zajmować dużo pamięci w czasie wykonywania programu. Aby sprawdzić wielkość projektu, kliknij menu rozwijane Projekt i wybierz Wielkość projektu.
Obniż poziom jakości LOD-ów niestandardowych zasobów, zwłaszcza tych, które są widoczne tylko z daleka.
Zasoby wykorzystuj wielokrotnie. W lesie składającym się ze 100 drzew użyj 5 różnych rodzajów i powielaj je, zamiast używać 100 unikatowych drzew. Będzie to miało ogromny wpływ na ilość zajmowanej pamięci.
* Jeśli używasz poziomów HLOD, generuj je przez cały czas trwania projektu i upewnij się, że generujesz je tylko dla obiektów widocznych z daleka.
Skorzystaj z funkcji Warstwy danych, jeśli wyspy można podzielić na konfiguracje, które nie mają być wyświetlane jednocześnie. Na przykład: podziemny loch, do którego nie można dotrzeć, chyba że gracz wejdzie do świątyni.
Mniejsza złożoność siatki niestandardowych treści. Siatki składające się z wielu wielokątów wiążą się z wyższym kosztem pamięci. Edytuj siatkę, klikając ją dwukrotnie w Przeglądarce zawartości, i dostosuj wartość Zachowaj procent trójkąta w sekcji Ustawienia Nanite. Użycie niższej wartości obniży złożoność siatki i zmniejszy koszt pamięci aktora.
Rozwiązywanie innych problemów
Aby weryfikacja przebiegła poprawnie, twórcy muszą mieć włączony streaming oraz generowanie mipmap dla tekstur. Jeśli dla dowolnej z tekstur w opcji MipGenSettings wybrano ustawienie Brak mipmap, dotychczas nie była ona oznaczana flagą po przesłaniu wyspy do publikacji. Jednak teraz tekstura w projekcie, dla której w opcji MipGenSettings wybrano ustawienie Brak mipmap, spowoduje niepowodzenie weryfikacji.
Należy pamiętać, że od tego wymogu dotyczącego streamingu oraz mipmap obowiązują następujące wyjątki:
Ta reguła dotyczy tylko tekstur zawierających ponad 1 milion tekseli. Jeśli na przykład po przemnożeniu wymiary tekstury wynoszą mniej niż 1 048 576, wówczas taka tekstura przejdzie pomyślnie weryfikację, nawet jeśli w opcji MipGenSettings wybrano ustawienie Brak mipmap.
Tekstury w grupie UI nie muszą mieć włączonego streamingu.