Stare gry, nowa konsola. Sześć rzeczy, których nie wiedziałeś o wstecznej kompatybilności na Xbox One

Artykuł/Gry 26.05.2018
Stare gry, nowa konsola. Sześć rzeczy, których nie wiedziałeś o wstecznej kompatybilności na Xbox One

Stare gry, nowa konsola. Sześć rzeczy, których nie wiedziałeś o wstecznej kompatybilności na Xbox One

Microsoft, przygotowując Xbox One, wykorzystał w pełni swoje doświadczenie w pisaniu i uruchamianiu systemów operacyjnych. To właśnie w przypadku tej konsoli po raz pierwszy firma otwarcie pokazywała, że Xbox One oraz PC działają na tym samym systemie: Windows 10.

Wcześniejsze edycje konsol Microsoftu (Xbox oraz Xbox 360) działały na bazie zbudowanego specjalnie dla ich potrzeb systemu operacyjnego. W przypadku Xboksa często błędnie mówiono że jest to Windows 2000 – jednak mimo podobieństw niektórych nazw plików i funkcji systemowych nie jest to prawdą.

Microsoft, będąc od zawsze firmą bardziej software’ową niż hardware’ową, zdecydował się rozwijać swoje konsole przy pomocy znaczących aktualizacji oprogramowania, które nie tylko zmieniały wygląd, ale i dodawały nowe funkcjonalności.

Jedną z takich aktualizacji dodana została wsteczna kompatybilność gier z oryginalnego Xboksa do konsoli Xbox 360, która została zrealizowana za pomocą emulacji oryginalnego sprzętu. Microsoft nie miał w tej kwestii wyboru: części Xboksa należały do innych firm (np. Intela), nie mógł więc po prostu umieścić odpowiednich części we wnętrzu Xboksa 360.

Rozwiązanie to sprawdziło się doskonale, dlatego gdy przyszło do dodawania wstecznej kompatybilności do kolejnej generacji konsol, firma od razu zdecydowała się rozwiązać to oprogramowaniem. Zrobiono to w bardzo pomysłowy sposób: aby nie modyfikować istniejących już gier na poprzednie generacje konsol, zasymulowano całe ich środowisko za pomocą specjalnego systemu uruchamianego za pomocą Hypervisora. Jest to zarządca aplikacji w Xbox One, mocno zmodyfikowanego odpowiednika Hyper-V z PC.

Gdy następnym razem będziesz odpalał Red Dead Redemption lub Borderlands na swojej konsoli Xbox One, przypomnij sobie, że jest to bardzo ciekawa funkcjonalność, która skrywa różne niespodzianki. Oto niektóre z nich.

Gra się nie zmienia

Kod gry nie jest zmieniany. Tak naprawdę gra nie zdaje sobie sprawy, że jest uruchamiana za pomocą czegokolwiek innego niż Xbox 360. Emulator odpowiada na wszystkie wywołania systemowe tak, jak sprzęt Microsoftu, interpretując je jednak na swój sposób – tak aby wykorzystać możliwości sprzętowe Xbox One – np. większą rozdzielczość. Wszystkie systemy, które mogła wywołać gra (procesor graficzny, CPU, dostęp do dysku, informacje z kontrolera), zostały zaemulowane programowo. Wszystkie wywołania zostały obsłużone przez emulowany system, często w inny sposób (np. w przypadku gier wielodyskowych nie pokazywane są okna “Proszę włóż kolejną płytę”).

Jeśli coś źle działało na Xbox 360, musi źle działać na Xbox One.

Programiści musieli odzwierciedlić wszystkie ewentualne błędy platformy. Jeśli Xbox 360 odpowiadał na którekolwiek z wywołań systemowych w dziwny sposób: zwracał nieprawidłową wartość, lub wywołanie trwało nietypowo długo, programiści musieli również to zasymulować. Dlaczego? Ponieważ zawsze mógł znaleźć się programista, który wykorzysta lub uwzględni ten błąd w swojej grze.

Podobna sytuacja była z funkcją dzielenia z oryginalnego Xboksa – na Xbox 360 działała ona… mniej dokładnie, więc Xbox 360, uruchamiając gry z pierwszej konsoli Microsoftu, musiał wykonywać więcej obliczeń, aby uściślić dzielenie (metoda Newtona-Raphsona)

Zmiana framerate’u to nie tylko “przesunięcie suwaczka”.

W trakcie prac nad wsteczną kompatybilnością okazało się że o wiele łatwiej uruchomić grę w większej rozdzielczości, z lepszymi teksturami niż… zwiększyć jej framerate. Liczba klatek na sekundę wpływa w bezpośredni sposób na działanie gier. Wielu programistów liczy klatki w trakcie działania gry i uzależnia od nich zdarzenia i wartości w świecie gry. Przy zwiększeniu klatek gra się gubi i z czasem w grze dzieją się dziwne rzeczy. Trzeba było więc znaleźć metodę na zwiększenie framerate’u tak, aby oryginalny kod gry wciąż myślał, że pozostaje on taki sam.

Programiści muszą czasem oszukiwać

To pochodna poprzednich punktów: jeśli gra odpytuje system o jakieś wartości, należy zwrócić wartość spodziewaną – taką, jaką zwracał oryginalny system Xbox 360. Dotyczy to w szczególności funkcji zwracających wartości w konkretnych liczbach: np. zwracających liczbę pikseli, która przy większej rozdzielczości przecież jest większa. Jedną z takich funkcji jest tzw. visilibity query która pozwala sprawdzić z kodu gry, które z pikseli obiektu są widoczne na ekranie.

Nad testowaniem wstecznej kompatybilności pracuje ponad 100 testerów.

Cała armia testerów przechodzi wszystkie fragmenty gier, aby sprawdzić ich kompatybilność. Każda nieprawidłowość jest zauważana i sprawdzana. Jeśli zanotują oni jakiś dziwny efekt – np. spowolnienie animacji przy spojrzeniu w konkretnym kierunku – sprawdzane jest, czy efekt ten występuje również na oryginalnym sprzęcie.

Istnieje również technologia umożliwiająca automatyczne przechodzenie fragmentów gry z automatycznym tworzeniem zrzutów ekranu w tej samej klatce gry na obu platformach (prawdziwej i emulowanej), tak aby później – również automatycznie – móc je porównać.

Programiści znaleźli sprytny sposób na poprawienie jakości grafiki bez dodawania nowych tekstur.

Jak to się dzieje, że gra, choć nie zmodyfikowana, wygląda lepiej graficznie? Widać to choćby w Red Dead Redemption – oprócz tego, że krawędzie są ostrzejsze, to same tekstury również. Dzieje się tak, gdy gra miała przygotowany zestaw dwóch (lub więcej) tekstur tego samego przedmiotu – na przykład plakatu na ścianie tawerny. Z daleka widzieliśmy wersję o mniejszej rozdzielczości, a gdy podchodziliśmy blisko, gra ładowała wersję większą. Na trzymanie w pamięci dużych tekstur przez cały czas nie starczało miejsca. W przypadku uruchomienia gry na Xbox One jest inaczej – po prostu jeśli są dostępne, zawsze ładowane są najlepsze tekstury. Wymaga to jednak ręcznej zmiany algorytmu dla każdej gry z osobna.

Dołącz do dyskusji

Advertisement