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?
xbox360
cross-platform
playstation3
wii
Adriano Silva
sumber
sumber
Jawaban:
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.
sumber
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.
sumber
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.
sumber