Oyunlar farklı platformlar için nasıl oluşturulur?


9

Oyunlar farklı platformlar için nasıl oluşturulur?

Örneğin, Call of Duty: Modern Warfare 3, PS3, Xbox 360, Wii ve PC'de mevcuttur.

Tamamen ortak bir kod olmadan yeniden programlanıyorlar mı? Ara kod var mı?


3
Genellikle hepsi C ++ 'da yapılır ve platforma özgü şeyler birkaç sınıfa devredilir.
ashes999

Yanıtlar:


11

Çoğu üretim seviyesi oyun motoru, Donanım Soyutlama Katmanı olarak bilinen şeye sahiptir. Bu, oyun motorunun hangi donanım olduğunu bilmek zorunda kalmadan donanımla konuşmak için kullanabileceği genel bir API'dir. Sadece SoundManager.PlaySFX (SFX_ID) veya benzerini çağırıyorlar. Ancak ses yöneticisinin altında hangi donanımın üzerinde çalıştığını bilecek ve ses efektini çalmak için uygun aramaları yapacak.

Bu, motorun soyutlama katmanı kullanılarak geliştirilmesine izin verir, böylece soyutlama ile eşleşen donanım için bir API sağlandığı takdirde herhangi bir sistemde çalışabilir. EDIT: Johnathan tarafından belirtildiği gibi, çalıştırmak istediğiniz her platform için bir API gereklidir. Ve Trevor'a göre, yüksek bellek sisteminden düşük belleğe geçerken (benim için en kötüsü PS3'ten PSP'ye) farklı donanım sınırlamalarını ele almanız gerekebilir. Neyse ki benim için bir platform nedeniyle tüm sistemi yeniden yazmak zorunda kalmadım, ama daha az ayak basmak için nesneleri gözden geçirmek ve optimize etmek zorunda kaldım.

Şeylerin diğer tarafı, dokuların veya modellerin ve benzerlerinin çözünürlüklerinin farklı olduğu sanat alanındadır. Oyunun varlıkları belirli bir hedefe doğru oluşturulabilir, böylece bir PC, PS3'ün desteklediği ve benzerlerinin belirli formatlara dönüştürülürken wav dosyalarını ses efektleri için alır.

Bu yardımcı olur umarım.


1
Buna çoğu durumda PC / PS3 / Xbox360'ın ortak bir kod tabanını paylaşacağını eklerken Wii / PS2 / PSP farklı bir kod tabanını paylaşacak. Gameboy kendi başına ayrı bir kod tabanına sahip olacak ve iPhone / Android genellikle bir kod tabanını paylaşacak. Bunlar çoğunlukla geniş işlem gücü seviyeleri, kullanılabilir bellek ve çeşitli platformların grafik fakültelerinden kaynaklanmaktadır. Bir keresinde Xbox 360'tan PS2'ye bir oyun taşımak zorunda kaldım; orijinal kodun çok azı işlemden sağ çıktı, çünkü kullanım için çok fazla RAM olduğu varsayıldı; Daha az bellek kullanmak için yeniden yazmak zorunda kaldım.
Trevor Powell

+1, HAL'nin platformlar arasında farklı olduğunu açıkça belirtmediniz (Psykocyber'ın da cevap vermesinin nedeni) - belki de her platform için bir HAL'a ihtiyacınız olduğunu eklediniz? Ayrıca ANSI C / ++ kullanmak, çapraz derlemeniz gerektiğinden muhtemelen bir gereksinimdir.
Jonathan Dickinson

Trevor: Gameboy? Lanet olsun, geçmişe seyahat

3

Diğer cevaplar, ideal durumlarda işleri açıklar. Çoğu kod oyunlar için ortaktır ve donanıma / platforma bağlı parçalar için temiz bir soyutlama katmanı kullanılır.

Bununla birlikte, birçok oyunun dış kaynaklı bir şirket tarafından yapılan portları vardır ve kod önemli ölçüde farklılık gösterir. Bu özellikle konsollar için geçerlidir, ancak Windows'dan OSX veya Linux bağlantı noktalarına da yaygındır.

Konsollarda, donanım genellikle çekirdek oluşturmanın tüm bölümlerinin (ve nadiren diğer sistemlerin) tamamen yeniden yazılması gerektiği kadar farklıdır. İşletim sistemi API'ları farklı olduğu, ancak tüm PC donanımı kabaca aynı olduğu için bilgisayarda D3D ve OpenGL üzerinde özet oluşturabilirsiniz.

Konsol alanında, süper verimli muhteşem görüntü oluşturma motorunuzun doğrudan farklı bir konsola aktarılması imkansızdır, çünkü GPU yetenekleri çok farklıdır ve 7 yıl almak için performansın her son yüzdesini sıkıştırmanız gerekir modern oyun çalıştırmak için eski donanım. XBox'ta en iyi şekilde çalışan aydınlatma geçişlerinin PS3'te korkunç derecede yavaş olduğu ve XBox'ta PS3 köpeklerinde en iyi yaklaşımın olduğu durumları kolayca bulabilirsiniz. Diğer donanım ve platform farklılıkları (örn. PS3'teki SPU'lar ve XBox'ın üç çekirdekli işlemcisi), platforma bağlı tek kod yolunuz olarak basit bir ince donanım soyutlama katmanına güvenmeyi çok zorlaştırır.

Her platform aynı zamanda onu doğru şekilde kullanmak için kapsamlı bir uzmanlık gerektirdiğinden, birçok oyun oyunu ek platformlara getirmek için özel bir dış kaynaklı taşıma şirketi gerektirir. PC alanında bazen bağlantı noktası yapan solo geliştiricileri bulabilirsiniz (Ryan "icculus" Gordon gibi birçok Linux oyun portu yapan; genellikle doğrudan çalışma, D3D'yi GL ve Win32'yi POSIX / SDL'ye değiştirme) daha büyük oyunlara oldukça büyük taşıma çalışmaları yapmak için tüm ekipleri olan şirketler var.

Bazı platformların bağlantı noktaları neredeyse tamamen yeniden yazma veya varlık yeniden tasarlama gerektirir. Örneğin Call of Duty'in Wii portları, dış kaynaklı bir şirket tarafından yapıldığında ve sanat varlıkları da dahil olmak üzere her şeyin Wii'nin çok sınırlı donanımının kısıtlamalarına uyması için yeniden yapılması gerekiyordu. Örneğin, Wii'nin gölgelendiricileri bile yok, bu yüzden aynı motoru ve efektleri / malzemeleri yeniden kullanmak neredeyse imkansızdı ve sınırlı bellek ve CPU / GPU daha küçük dokular ve daha az ayrıntı modelleri, ayrıca oyun sınırlamaları vb. Aynı şekilde mobil platformlara olan portlar genellikle tamamen üçüncü tarafça tamamen yeniden yazılır.

Daha yeni motorlar platformlar arasında taşımayı kolaylaştırır, ancak daha büyük oyunların genellikle kodlarının büyük bölümlerini güncellemesi ve daha yetenekli PC platformlarından ve konsollarından daha kısıtlı platformlara geçmek için birçok varlığı yeniden yapması gerekir.


2

James, belirli platformlarda uygulama için değil, yalnızca PC ile ilgilidir.
Tüm motorlar oyun kodunun büyük çoğunluğu için platformu soyutlarken, platform başına bazı bölümlerin yazılması gerekir. Bu ağ, görüntü oluşturma, ses, cihaz girişi ve video çıkışı dahil olmak üzere tüm G / Ç'yi içerir.
Xbox ve PS3'te Unreal demek için oluşturma kodunu karşılaştırın. Xbox, Xbox DirectX sürümünü kullanırken PS3 libgcm kullanır (OpenGl kütüphanesi çok yavaş). Biraz basitleştirmek için, tüm platformlarda oyun programcıları sadece bir "AudioSystem.PlaySound ( burada SoundName ) görürken, her platform için dahili olarak işlev görürler, ses çıkışı için platform API'sını
çağırırlar . Daha fazla programlama için ayrıca Tatrad'ın yorumuna bakın.


1
James'in söylediği şey tam olarak, HAL'nin her platform için farklı olduğunu belirtmeyi ihmal etti.
Jonathan Dickinson

Aslında bir HAL API için sağlanan herhangi bir sistemde çalışacağından bahsetmiştim, ama bu açıkça karışıklığa neden olduğu için daha açık hale getirdim. Ayrıca, Mac veya Unix sistemi gibi işletim sistemlerini geçmeden PC'deki kodu başka bir PC'ye bağlamazsınız. Çoğu oyunun çalıştığı Windows ortamları için, bunu sizin için zaten ele alan donanım sürücüleri, sürücü çağrıları aracılığıyla bir DirectX veya OpenGL veri arabelleği yaparsınız ve donanım oradan ne yapacağını bilir.
James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.