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?
xbox360
cross-platform
playstation3
wii
Adriano Silva
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło