Bagaimana game dibuat untuk platform yang berbeda?

9

Bagaimana game dibuat untuk platform yang berbeda?

Misalnya, Call of Duty: Modern Warfare 3 tersedia di PS3, Xbox 360, Wii dan PC.

Apakah mereka sepenuhnya diprogram ulang tanpa kode umum? Apakah ada kode perantara?

Adriano Silva
sumber
3
Biasanya itu semua dilakukan dalam C ++ dan hal-hal khusus platform diturunkan ke beberapa kelas.
ashes999

Jawaban:

11

Sebagian besar mesin permainan level produksi memiliki apa yang dikenal sebagai Lapisan Abstraksi Perangkat Keras. Ini adalah API umum yang dapat digunakan oleh mesin gim untuk berbicara dengan perangkat keras tanpa harus tahu perangkat keras apa itu. Mereka hanya memanggil SoundManager.PlaySFX (SFX_ID) atau sejenisnya. Di bawah dalam manajer suara namun akan tahu perangkat keras mana yang benar-benar bekerja dan membuat panggilan yang sesuai untuk mendapatkan efek suara untuk diputar.

Ini memungkinkan mesin dikembangkan menggunakan lapisan abstraksi itu sehingga dapat berjalan pada sistem apa pun asalkan API disediakan untuk perangkat keras yang cocok dengan abstraksi itu. EDIT: Seperti dicatat oleh Johnathan, diperlukan API untuk setiap platform yang ingin Anda jalankan. Dan untuk titik Trevor, ketika pindah dari sistem memori tinggi ke memori rendah (Terburuk bagi saya adalah PS3 ke PSP), Anda mungkin harus mengatasi keterbatasan perangkat keras yang berbeda. Untungnya bagi saya, saya tidak harus menulis ulang seluruh sistem karena platform, tetapi saya harus melalui dan mengoptimalkan objek untuk mengambil lebih sedikit dari cetak kaki.

Sisi lain dari hal ini adalah di bidang seni di mana resolusi tekstur atau model dan sejenisnya berbeda. Aset permainan dapat dibangun ke arah target tertentu sehingga PC mendapatkan file wav untuk efek suara sementara mereka diubah ke format spesifik yang didukung PS3 dan sejenisnya.

Semoga ini membantu.

James
sumber
1
Saya akan menambahkan bahwa dalam kebanyakan kasus, PC / PS3 / Xbox360 akan berbagi satu basis kode umum, sementara Wii / PS2 / PSP akan berbagi basis kode yang berbeda. Gameboy akan memiliki basis kode yang terpisah dengan sendirinya, dan iPhone / Android biasanya akan berbagi basis kode. Ini sebagian besar disebabkan oleh tingkat daya pemrosesan yang luas, memori yang tersedia, dan kemampuan grafis dari berbagai platform. Saya pernah harus mem-port game dari Xbox 360 ke PS2; sangat sedikit kode asli yang selamat dari proses, hanya karena diasumsikan bahwa ada banyak dan banyak RAM yang tersedia untuk digunakan; Saya harus menulis ulang untuk menggunakan lebih sedikit memori.
Trevor Powell
+1, Anda tidak menyebutkan secara eksplisit bahwa HAL berbeda antar platform (alasan Psykocyber juga menjawab) - mungkin menambahkan bahwa Anda memerlukan HAL untuk setiap platform? Juga bahwa menggunakan ANSI C / ++ mungkin merupakan persyaratan karena Anda perlu melakukan kompilasi silang.
Jonathan Dickinson
Trevor: Gameboy? Sial, saya pasti telah melakukan perjalanan ke masa lalu, lebih baik kembali ke mesin waktu saya ...
3

Jawaban lain menguraikan hal-hal dalam kasus-kasus yang ideal. Kebanyakan kode adalah umum untuk gim, dan lapisan abstraksi yang bersih digunakan untuk bagian yang bergantung pada perangkat keras / platform.

Namun, banyak game memiliki port yang dilakukan oleh perusahaan outsourcing, dan kode berbeda secara signifikan. Hal ini terutama berlaku untuk konsol, tetapi juga umum port ke OSX atau Linux dari Windows.

Pada konsol, perangkat kerasnya cukup berbeda sehingga seringkali seluruh potongan inti rendering (dan jarang juga sistem lain) harus sepenuhnya ditulis ulang. Pada PC Anda dapat menjorok abstrak di atas D3D dan OpenGL, karena OS API berbeda tetapi semua perangkat keras PC kira-kira sama.

Di ruang konsol, Anda mungkin menemukan bahwa mesin rendering cantik super efisien Anda tidak mungkin untuk port langsung ke konsol yang berbeda, karena kemampuan GPU sangat berbeda dan Anda benar-benar perlu memeras setiap persentase kinerja terakhir untuk mendapatkan 7 tahun perangkat keras lama untuk menjalankan game modern Anda. Anda dapat dengan mudah menemukan kasus-kasus di mana lampu penerangan yang berfungsi paling baik di XBox sangat lambat di PS3, dan di mana pendekatan terbaik pada anjing-anjing PS3 di XBox. Perbedaan perangkat keras dan platform lainnya (mis. SPU pada PS3 vs CPU tri-core XBox) membuatnya sangat sulit untuk mengandalkan lapisan abstraksi perangkat keras tipis sederhana sebagai satu-satunya jalur kode yang bergantung pada platform.

Karena setiap platform juga membutuhkan keahlian yang luas untuk menggunakannya dengan benar, banyak game membutuhkan perusahaan pengalihdayaan khusus untuk membawa game ke platform tambahan. Di ruang PC Anda kadang-kadang dapat menemukan pengembang solo yang melakukan port (seperti Ryan "icculus" Gordon yang melakukan banyak port game Linux; langsung bekerja biasanya, mengubah D3D ke GL dan Win32 ke POSIX / SDL), sementara di ruang konsol ada perusahaan dengan semua tim untuk melakukan pekerjaan porting yang agak besar ke game yang lebih besar.

Port ke beberapa platform memang membutuhkan penulisan ulang yang hampir lengkap atau pendesainan ulang aset. Port Wii of Call of Duty misalnya di mana dilakukan oleh perusahaan outsourcing, dan semuanya - termasuk aset seni - harus dibangun ulang agar sesuai dengan kendala perangkat keras Wii yang sangat terbatas. Wii bahkan tidak memiliki shader, misalnya, jadi hanya menggunakan kembali mesin yang sama dan efek / bahan sama sekali tidak mungkin, dan memori dan CPU / GPU yang terbatas membutuhkan tekstur yang lebih kecil dan model yang kurang detail, ditambah batasan gameplay dan sebagainya. Port ke platform seluler juga biasanya sepenuhnya ditulis ulang, biasanya oleh pihak ketiga.

Mesin yang lebih baru memudahkan porting antar platform, tetapi game yang lebih besar biasanya masih perlu memperbarui bagian kode yang cukup besar dan mengulang banyak aset untuk berubah dari platform dan konsol PC yang lebih mampu ke platform yang lebih terbatas.

Sean Middleditch
sumber
2

Tanggapan James hanya terkait dengan PC dan bukan untuk implementasi pada platform tertentu.
Sementara semua mesin mengabstraksi platform untuk sebagian besar kode permainan, beberapa bagian harus ditulis per platform. Ini termasuk semua I / O termasuk jaringan, render, audio, input perangkat & saya pikir output video.
Bandingkan kode render untuk mengatakan Unreal di Xbox dan PS3. Xbox menggunakan versi Xbox DirectX, sedangkan PS3 menggunakan libgcm (pustaka OpenGl terlalu lambat). Untuk menyederhanakannya sedikit, pada semua platform, pemrogram gameplay hanya melihat "AudioSystem.PlaySound ( SoundName di sini ), sedangkan untuk setiap platform yang berfungsi secara internal akan memanggil platform API untuk output suara.
Lihat juga komentar Tatrad untuk pemrograman lebih lanjut.

Peter Ølsted
sumber
1
Ini persis seperti yang dikatakan James, dia lupa menyebutkan bahwa HAL berbeda untuk setiap platform.
Jonathan Dickinson
Saya sebenarnya menyebutkan bahwa itu akan berjalan pada sistem apa pun yang disediakan untuk API HAL, tapi saya membuatnya lebih jelas karena ini jelas menyebabkan kebingungan. Juga, Anda tidak mem-port-kan kode pada PC ke PC lain kecuali Anda akan menyeberang OS seperti ke sistem Mac atau Unix. Untuk lingkungan windows, di mana sebagian besar game dijalankan, itu adalah driver perangkat keras yang sudah menangani ini untuk Anda, Anda membuat buffer data DirectX atau OpenGL melalui panggilan driver dan perangkat keras tahu apa yang harus dilakukan dari sana.
James