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?
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?
Risposte:
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.
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.
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.