Come vengono creati i giochi per piattaforme diverse?


9

Come vengono creati i giochi per piattaforme diverse?

Ad esempio, Call of Duty: Modern Warfare 3 è disponibile su PS3, Xbox 360, Wii e PC.

Sono completamente riprogrammati senza un codice comune? C'è qualche codice intermedio?


3
Di solito è tutto fatto in C ++ e le cose specifiche della piattaforma sono relegate in un paio di classi.
ashes999,

Risposte:


11

La maggior parte dei motori di gioco a livello di produzione ha quello che è noto come Hardware Abstraction Layer. Questa è un'API generica che il motore di gioco può utilizzare per parlare con l'hardware senza dover sapere quale hardware sia. Chiamano semplicemente SoundManager.PlaySFX (SFX_ID) o simili. Al di sotto di Sound Manager, tuttavia, saprà su quale hardware sta effettivamente lavorando e farà le chiamate appropriate per ottenere l'effetto sonoro da riprodurre.

Ciò consente al motore di essere sviluppato utilizzando quello strato di astrazione in modo che possa funzionare su qualsiasi sistema purché sia ​​fornita un'API per quell'hardware che corrisponda all'astrazione. EDIT: come notato da Johnathan, è richiesta un'API per ogni piattaforma su cui si desidera eseguire. E al punto di Trevor, quando si passa da un sistema ad alta memoria a una memoria bassa (peggio per me è stato PS3 a PSP) potrebbe essere necessario affrontare le diverse limitazioni hardware. Fortunatamente per me non ho dovuto riscrivere un intero sistema a causa di una piattaforma, ma ho dovuto attraversare e ottimizzare gli oggetti per occupare meno di un'impronta.

L'altro lato delle cose è nell'area dell'arte in cui le risoluzioni di trame o modelli e simili sono diverse. Le risorse del gioco possono essere costruite verso un obiettivo specifico in modo che un PC ottenga i suoi file wav per i suoi effetti sonori mentre vengono trasformati nei formati specifici supportati da PS3 e simili.

Spero che sia di aiuto.


1
Aggiungerò a questo che nella maggior parte dei casi PC / PS3 / Xbox360 condivideranno una base di codice comune, mentre Wii / PS2 / PSP condivideranno una base di codice diversa. Gameboy avrà una base di codici separata da sola, e iPhone / Android di solito condivideranno una base di codice. Ciò è dovuto principalmente agli ampi livelli di potenza di elaborazione, memoria disponibile e facoltà grafiche delle varie piattaforme. Una volta ho dovuto portare un gioco da Xbox 360 a PS2; pochissimo del codice originale è sopravvissuto al processo, solo perché presupponeva che ci fosse molta e molta RAM disponibile per l'uso; Ho dovuto riscriverlo per usare meno memoria.
Trevor Powell,

+1, non hai menzionato esplicitamente che l'HAL è diverso tra le piattaforme (il motivo per cui anche Psykocyber ha risposto) - potresti aggiungere che hai bisogno di un HAL per ogni piattaforma? Inoltre, l'utilizzo di ANSI C / ++ è probabilmente un requisito in quanto è necessario compilarlo in modo incrociato.
Jonathan Dickinson,

Trevor: Gameboy? Accidenti, devo aver viaggiato nel passato, meglio tornare alla mia macchina del tempo ...

3

Le altre risposte spiegano le cose nei casi ideali. La maggior parte del codice è comune per i giochi e uno strato di astrazione pulito viene utilizzato per le parti dipendenti dall'hardware / dalla piattaforma.

Tuttavia, molti giochi hanno porte fatte da una società esternalizzata e il codice differisce in modo significativo. Ciò è particolarmente vero con le console, ma anche comune delle porte per OSX o Linux da Windows.

Sulle console, l'hardware è abbastanza diverso che spesso interi blocchi del rendering core (e raramente anche altri sistemi) devono essere completamente riscritti. Sul PC è possibile estrarre D3D e OpenGL in quanto le API del sistema operativo differiscono ma tutto l'hardware del PC è più o meno lo stesso.

Sullo spazio della console, potresti scoprire che il tuo straordinario motore di rendering super efficiente è assolutamente impossibile da trasferire direttamente su una console diversa, poiché le funzionalità della GPU sono così diverse e devi letteralmente spremere ogni ultima percentuale di prestazioni per ottenere 7 anni vecchio hardware per eseguire il tuo gioco moderno. Puoi facilmente trovare casi in cui i pass di illuminazione che funzionano meglio su XBox sono tremendamente lenti su PS3 e dove l'approccio migliore sui cani PS3 su XBox. Le altre differenze hardware e di piattaforma (ad esempio le SPU sulla PS3 rispetto alla CPU tri-core dell'XBox) rendono molto difficile fare affidamento su un semplice strato di astrazione hardware sottile come unico percorso di codice dipendente dalla piattaforma.

Poiché ogni piattaforma richiede anche una vasta esperienza per utilizzarla correttamente, molti giochi richiedono una società di porting specializzata in outsourcing per portare il gioco su piattaforme aggiuntive. Nello spazio del PC a volte puoi trovare sviluppatori solisti che eseguono le porte (come Ryan "icculus" Gordon che fa molte porte di gioco Linux; il lavoro diretto di solito cambia D3D in GL e Win32 in POSIX / SDL), mentre nello spazio della console ci sono aziende con tutti i team che svolgono lavori di porting piuttosto massicci su giochi più grandi.

Le porte su alcune piattaforme richiedono riscritture quasi complete o riprogettazioni delle risorse. I porti Wii di Call of Duty, ad esempio, sono stati realizzati da una società esternalizzata e tutto - compresi i beni artistici - ha dovuto essere rifatto per adattarsi ai vincoli dell'hardware molto limitato del Wii. Il Wii non ha nemmeno shader, ad esempio, quindi semplicemente riutilizzare lo stesso motore e gli effetti / materiali era assolutamente impossibile, e la memoria limitata e la CPU / GPU richiedevano trame più piccole e meno modelli di dettagli, oltre a limiti di gioco e così via. Analogamente, le porte per le piattaforme mobili vengono in genere riscritte interamente, di solito da una terza parte.

I motori più recenti semplificano il porting tra le piattaforme, ma i giochi più grandi in genere devono ancora aggiornare parti considerevoli del loro codice e rifare molte risorse per passare da piattaforme e console PC più capaci a piattaforme più riservate.


2

La risposta di James riguarda solo il PC e non l'implementazione su piattaforme specifiche.
Mentre tutti i motori astraggono la piattaforma per la maggior parte del codice di gioco, alcune parti devono essere scritte per piattaforma. Ciò include tutti gli I / O inclusi rete, rendering, audio, input del dispositivo e penso all'uscita video.
Confronta il codice di rendering per dire Unreal su Xbox e PS3. Xbox utilizza la versione Xbox DirectX, mentre PS3 utilizza libgcm (la libreria OpenGl è troppo lenta). Per semplificare un po ', su tutte le piattaforme i programmatori di gameplay vedono solo un "AudioSystem.PlaySound ( qui SoundName ), mentre per ciascuna piattaforma che funzionano internamente chiamerebbero l'API delle piattaforme per l'output audio.
Vedi anche il commento di Tatrad per ulteriori programmazioni.


1
Questo è esattamente ciò che James ha detto, ha semplicemente trascurato di menzionare che l'HAL è diverso per ogni piattaforma.
Jonathan Dickinson,

In realtà ho detto che funzionerà su qualsiasi sistema per cui è fornita un'API HAL, ma ho chiarito più chiaramente poiché questo chiaramente stava causando confusione. Inoltre, non si esegue il porting del codice sul PC su un altro PC a meno che non si attraversi un sistema operativo simile a un sistema Mac o Unix. Per gli ambienti Windows, in cui è in esecuzione la maggior parte dei giochi, sono i driver hardware che lo gestiscono già per te, si crea un buffer di dati DirectX o OpenGL tramite le chiamate del driver e l'hardware sa cosa fare da lì.
James,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.