Jak tworzone są gry dla różnych platform?


9

Jak tworzone są gry dla różnych platform?

Na przykład Call of Duty: Modern Warfare 3 jest dostępny na PS3, Xbox 360, Wii i PC.

Czy są one całkowicie przeprogramowane bez wspólnego kodu? Czy jest jakiś kod pośredni?


3
Zwykle wszystko odbywa się w C ++, a rzeczy specyficzne dla platformy są przenoszone do kilku klas.
ashes999

Odpowiedzi:


11

Większość silników gier na poziomie produkcyjnym ma tak zwaną warstwę abstrakcji sprzętu. Jest to ogólny interfejs API, którego silnik gry może używać do komunikowania się ze sprzętem bez konieczności posiadania wiedzy o tym, który to sprzęt. Po prostu wywołują SoundManager.PlaySFX (SFX_ID) lub podobny. Menedżer dźwięku pod spodem będzie wiedział, na którym sprzęcie faktycznie działa, i wykona odpowiednie połączenia, aby uzyskać efekt dźwiękowy.

Umożliwia to opracowanie silnika przy użyciu tej warstwy abstrakcji, dzięki czemu może on działać w dowolnym systemie, pod warunkiem, że dla tego sprzętu, który jest zgodny z abstrakcją, jest interfejs API. EDYCJA: Jak zauważył Johnathan, wymagany jest interfejs API dla każdej platformy, na której chcesz uruchomić. I do rzeczy Trevora, kiedy przechodząc z systemu wysokiej pamięci do niskiej pamięci (Najgorsze dla mnie było PS3 na PSP), być może będziesz musiał zmierzyć się z różnymi ograniczeniami sprzętowymi. Na szczęście dla mnie nie musiałem przepisywać całego systemu z powodu platformy, ale musiałem przejść i zoptymalizować obiekty, aby zajmowały mniej miejsca.

Drugą stroną rzeczy jest dziedzina sztuki, w której rozdzielczości tekstur lub modeli i tym podobne są różne. Atuty gry można budować w celu osiągnięcia określonego celu, dzięki czemu komputer otrzymuje pliki wav z efektami dźwiękowymi, podczas gdy są one przekształcane w określone formaty obsługiwane przez PS3 i tym podobne.

Mam nadzieję że to pomoże.


1
Dodam do tego, że w większości przypadków PC / PS3 / Xbox360 będą dzielić jedną wspólną bazę kodów, podczas gdy Wii / PS2 / PSP będą miały inną bazę kodów. Gameboy będzie miał osobną bazę kodów, a iPhone / Android zwykle będzie ją dzielił. Wynika to głównie z szerokiego poziomu mocy obliczeniowej, dostępnej pamięci oraz możliwości graficznych różnych platform. Kiedyś musiałem przenieść grę z Xbox 360 na PS2; bardzo niewiele oryginalnego kodu przetrwało proces, tylko dlatego, że zakładano, że jest dużo pamięci RAM do użycia; Musiałem go przepisać, aby zużywać mniej pamięci.
Trevor Powell,

+1, nie wspomniałeś wyraźnie, że HAL różni się między platformami (powód, dla którego Psykocyber również odpowiedział) - może dodać, że potrzebujesz HAL dla każdej platformy? Również użycie ANSI C / ++ jest prawdopodobnie wymogiem, ponieważ musisz go skompilować krzyżowo.
Jonathan Dickinson

Trevor: Gameboy? Cholera, musiałem podróżować w przeszłość, lepiej wracaj do mojej wehikułu czasu ...

3

Inne odpowiedzi wyjaśniają wszystko w idealnych przypadkach. Większość kodu jest wspólna dla gier, a dla części zależnych od sprzętu / platformy używana jest czysta warstwa abstrakcji.

Jednak wiele gier ma porty wykonane przez firmę zewnętrzną, a kod znacznie się różni. Jest to szczególnie prawdziwe w przypadku konsol, ale często występuje również w portach OSX lub Linux z Windows.

Na konsolach sprzęt jest na tyle inny, że często całe fragmenty rdzenia (i rzadko także inne systemy) muszą być całkowicie przepisane. Na komputerze PC można wyprowadzać streszczenie nad D3D i OpenGL, ponieważ interfejsy API systemu operacyjnego różnią się, ale cały sprzęt jest mniej więcej taki sam.

Na przestrzeni konsoli może się okazać, że super wydajny i wspaniały silnik renderowania jest wprost niemożliwy do przeniesienia bezpośrednio na inną konsolę, ponieważ możliwości GPU są tak różne i dosłownie trzeba wycisnąć każdy ostatni procent wydajności, aby uzyskać 7 lat stary sprzęt do uruchomienia nowoczesnej gry. Możesz łatwo znaleźć przypadki, w których przepustki świetlne, które najlepiej działają na XBox, są strasznie powolne na PS3 i gdzie najlepsze podejście na psach PS3 na XBox. Inne różnice w sprzęcie i platformie (np. SPU na PS3 w porównaniu z trzy-rdzeniowym procesorem XBox) bardzo utrudniają poleganie na prostej cienkiej warstwie abstrakcji sprzętowej jako jedynej ścieżce kodu zależnej od platformy.

Ponieważ każda platforma wymaga również dużej wiedzy specjalistycznej, aby właściwie ją wykorzystać, wiele gier wymaga specjalistycznej firmy portowej, która przeniesie grę na dodatkowe platformy. W przestrzeni PC czasami można spotkać programistów solo, którzy wykonują porty (np. Ryan „icculus” Gordon, który robi wiele portów gier w Linuksie; prosta praca zwykle, zmiana D3D na GL i Win32 na POSIX / SDL), podczas gdy w przestrzeni konsoli istnieją firmy ze wszystkimi zespołami, które wykonują dość masowe prace związane z przenoszeniem do większych gier.

Porty na niektórych platformach wymagają prawie kompletnego przepisania lub przeprojektowania zasobów. Na przykład porty Wii w Call of Duty zostały wykonane przez firmę zewnętrzną i wszystko - łącznie z zasobami sztuki - musiało zostać przerobione, aby pasowało do ograniczeń bardzo ograniczonego sprzętu Wii. Na przykład Wii nie ma nawet shaderów, więc po prostu ponowne użycie tego samego silnika i efektów / materiałów było wręcz niemożliwe, a ograniczona pamięć i procesor / GPU wymagały mniejszych tekstur i mniej szczegółów modeli, a także ograniczeń gry i tak dalej. Porty na platformy mobilne również są zwykle całkowicie przepisywane, zwykle przez stronę trzecią.

Nowsze silniki ułatwiają przenoszenie między platformami, ale większe gry zwykle wciąż muszą aktualizować spore części swojego kodu i przerabiać wiele zasobów, aby zmienić z bardziej wydajnych platform PC i konsol na bardziej ograniczone platformy.


2

Odpowiedź Jamesa dotyczy tylko komputera PC, a nie implementacji na konkretnych platformach.
Podczas gdy wszystkie silniki wyodrębniają platformę dla większości kodu gry, niektóre części muszą być napisane dla każdej platformy. Obejmuje to wszystkie wejścia / wyjścia, w tym sieć, rendering, audio, wejście urządzenia i myślę, że wyjście wideo.
Porównaj kod renderujący dla powiedzmy Unreal na Xbox i PS3. Xbox używa wersji Xbox DirectX, a PS3 korzysta z libgcm (biblioteka OpenGl jest zbyt wolna). Aby to trochę uprościć, na wszystkich platformach programiści rozgrywki widzą tylko „ AudioSystem.PlaySound ( tutaj SoundName ), podczas gdy dla każdej platformy, którą funkcjonują wewnętrznie, wywołują API platformy dla wyjścia dźwięku.
Zobacz także komentarz Tatrada dla dalszego programowania.


1
Właśnie to powiedział James, po prostu zapomniał wspomnieć, że HAL jest inny dla każdej platformy.
Jonathan Dickinson

Właściwie wspomniałem, że będzie działał na każdym systemie, dla którego przewidziano interfejs API HAL, ale wyjaśniłem to bardziej, ponieważ wyraźnie powodowało to zamieszanie. Ponadto nie przenosisz kodu na komputerze do innego komputera, chyba że korzystasz z systemu operacyjnego, takiego jak Mac lub Unix. W środowiskach Windows, w których działa większość gier, to sterowniki sprzętowe już to obsługują, tworzysz bufor danych DirectX lub OpenGL za pośrednictwem wywołań sterowników, a sprzęt wie, co robić dalej.
James
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.