16x MapFix V1.1.4.0


16x MapFix V1.1.4.0
Naprawa mapy FS25 16x – przyczyna źródłowa + narzędzie do jej rozwiązania
Dlaczego mapy 16x (i większe) w Farming Simulator 25 ulegają awarii z błędem „allocReg”
Czy utknąłeś na „100% kompilacji shaderów”? Oto pełna diagnoza i narzędzie
co umożliwia ładowanie i synchronizację w trybie wieloosobowym na normalnym sprzęcie.
Ważny:
Czy podoba Ci się to narzędzie?
Możesz wesprzeć jego rozwój na Ko-fi – napisz proszę „16x Map Fix”, żebym wiedział, nad czym mam teraz pracować.
Zdiagnozowano na dedykowanym serwerze i kliencie z 16 GB pamięci RAM, oba z tą samą mapą 16x.
Narzędzie zmniejszyło liczbę błędów „allocReg” na oryginalnej mapie 16x z 878 987 do 0, dzięki czemu mapa stała się dostępna w trybie wieloosobowym.
Krótko mówiąc (TL;DR), awaria „allocReg” jest w rzeczywistości spowodowana dwoma różnymi problemami, które wyglądają identycznie:
Przyczyna Rozwiązanie
Wymagania pamięci dla jednego gracza – mapa 16x wymaga około 20–32 GB podczas początkowej kompilacji danych o gęstości (mapy gęstości); 16 GB jest niewystarczające.
Duży plik wymiany (ponad 48 GB) + DX11 → wczytuje się oryginalna, niezmodyfikowana mapa. Tryb wieloosobowy
Rejestr kafelków o stałej pojemności w module synchronizacji mapy gęstości działa poprzez zmniejszenie zapisywalnej warstwy gęstości mapy do 8192 pikseli w przypadku map gęstości 16384 pikseli – patrz narzędzie poniżej.
Dowód, że to nie problem z pamięcią RAM w trybie wieloosobowym: dedykowany serwer z 262 GB pamięci RAM nadal generował te same błędy 3014 „allocReg”. Więcej pamięci RAM ani większy plik stronicowania nie pomagają w trybie wieloosobowym – problem rozwiązuje jedynie mniejsza liczba kafelków.
Przyczyna szczegółowo opisana.
Przepełnione warstwy (owoce, gleba, chwasty, warstwa informacyjna) to zapisywalne mapy gęstości „szczegółów terenu” w grze – orzesz, siejesz i zbierasz plony w ich obrębie, wszędzie, nawet poza widocznym obszarem, a serwer monitoruje całą mapę. Zapisywalne dane nie mogą korzystać z „wirtualnego teksturowania” (gdzie przesyłane są tylko widoczne, tylko do odczytu pola); dlatego warstwy te muszą znajdować się w całości w pamięci i być rejestrowane. Ich wymagania dotyczące zasobów skalują się wraz z obszarem mapy: 16x oznacza 16-krotność liczby pól. W trybie dla jednego gracza klient ładuje własne, wstępnie skompilowane pliki .gdm; jedynym wąskim gardłem jest krótkotrwały skok zużycia pamięci podczas początkowej kompilacji, który jest obsługiwany przez odpowiednio duży plik stronicowania.
W trybie wieloosobowym serwer przesyła mapy gęstości do każdego dołączającego klienta, który rekompiluje je na bieżąco za pomocą rejestru kafelków o stałym rozmiarze (TiledBitmapOperationCompiler). Gęstość 16384 pikseli prowadzi do przepełnienia – a tym samym do tysięcy operacji „allocReg”. Stanowi to sztywny limit pojemności, niezależny od pamięci RAM; właśnie dlatego nawet serwery z 262 GB pamięci RAM zawodzą, a efektywny górny limit GIANTS dla trybu wieloosobowego jest czterokrotnie większy od standardowego rozmiaru (4x): Mapa 4x to największy obszar, którego gęstość zapisu mieści się zarówno w rejestrze, jak i w synchronizacji na połączenie.
Narzędzie
tool/mapfix.py + tool/Optimize-Map.bat (przeciągnij i upuść w systemie Windows). Zmniejsza każdą nadmierną gęstość lub warstwę informacyjną (16384 pikseli, potęga dwójki) mapy do bezpiecznych dla silnika 8192 pikseli – dokładnie takiej rozdzielczości, w jakiej dostarczane są działające mapy 4x. Informacje o polu i plonie są zachowywane (dekodowanie → resampling poprzez „najbliższego sąsiada” → ponowne kodowanie; zweryfikowano jako identyczne w 99,9% pikseli, bez zmian pokrycia plonu). Mapy wysokościowe i geometria terenu (dem.png, raster z 2ⁿ+1 punktów) są rozpoznawane na podstawie ich rozmiaru (a nie potęgi dwójki) i nie są modyfikowane.
Aplikacja
Przeciągnij plik ZIP z mapą do folderu `Optimize-Map.bat` (wymagany jest Python 3 – Pillow zostanie zainstalowany automatycznie).
Plik z rozszerzeniem `_fixed.zip` zostanie utworzony w tym samym folderze – oryginalny plik pozostanie niezmieniony.
Prześlij poprawioną mapę na swój serwer, rozpocznij nową grę (ważne: stare zapisane gry zawierają starą wersję gęstości) i dołącz do gry.
Zawiera `grleconvert` (licencja MIT) do konwersji między formatami .gdm/.grle i PNG. Obsługuje mapy 16x i 32x; dane wyjściowe są zawsze w bezpiecznym formacie 8192 pikseli.
Uwaga dotycząca trybu wieloosobowego (automatyczny zapis w GIANTS).
Nawet z poprawioną kartą graficzną, serwer dedykowany GIANTS wykonuje blokujący autozapis („auto_save_interval”, domyślnie: 10 minut). W przypadku dużych kart graficznych, ten proces zapisywania zatrzymuje wątek główny na tak długo, że połączenie z klientem może zostać zerwane dokładnie w tym momencie („utracono połączenie”), podczas gdy sam serwer pozostaje online. Aby zminimalizować ten problem, zwiększ wartość parametru „auto_save_interval” w pliku „dedicatedServerConfig.xml” (np. do 30–60).
Dodatkowy mod: Auto VRAM Optimizer
Niewielki, samodzielny mod, który zwiększa limit strumieniowania tekstur w FS25 (domyślnie około 4 GB) do rzeczywistej pamięci VRAM karty graficznej. Dzięki temu ładowanie jest płynniejsze i rzadziej pojawiają się okienka dla wszystkich kart graficznych z pamięcią VRAM powyżej 4 GB – nie tylko kart 16x.
Autor:KeilerHirsch
