Як створюються ігри для різних платформ?


9

Як створюються ігри для різних платформ?

Наприклад, Call of Duty: Modern Warfare 3 доступний на PS3, Xbox 360, Wii та ПК.

Чи повністю перепрограмовані вони без загального коду? Чи є проміжний код?


3
Зазвичай це все робиться на C ++, а специфічні для платформи речі переносяться на пару занять.
ashes999

Відповіді:


11

Більшість ігрових двигунів рівня виробництва мають те, що відоме як апаратний рівень абстракції. Це загальний API, який ігровий движок може використовувати для розмови з обладнанням, не знаючи, яке саме обладнання. Вони просто називають SoundManager.PlaySFX (SFX_ID) тощо. Однак в диспетчері звуків він дізнається, над яким обладнанням він працює, і здійснить відповідні дзвінки, щоб отримати звуковий ефект.

Це дозволяє розробляти двигун за допомогою цього шару абстракції, щоб він міг працювати в будь-якій системі за умови надання API для того обладнання, яке відповідає абстракції. EDIT: Як зазначає Джоннатан, для кожної платформи, на якій потрібно працювати, потрібно мати API. І, на думку Тревора, при переході від системи високої пам’яті до низької пам’яті (мені найгірше було PS3 до PSP), можливо, доведеться вирішити різні обмеження обладнання. На щастя, мені не довелося переписувати всю систему через платформу, але мені довелося пройти і оптимізувати об'єкти, щоб зайняти менше друку на ногах.

Інша сторона речей - в області мистецтва, де роздільна здатність текстур чи моделей тощо. Активи акти можуть бути побудовані до конкретної цілі, тому ПК отримує свої файли wav для своїх звукових ефектів, в той час як вони перетворюються на конкретні формати, які підтримує PS3 тощо.

Сподіваюсь, це допомагає.


1
Я додам до цього, що в більшості випадків PC / PS3 / Xbox360 буде спільним для однієї спільної кодової бази, а Wii / PS2 / PSP матиме іншу базу коду. У Gameboy буде створена окрема база даних, сама по собі, а iPhone / Android зазвичай мають спільну базу коду. Здебільшого вони пояснюються широким рівнем потужності процесора, наявною пам'яттю та графічними можливостями різних платформ. Мені колись довелося перенести гру з Xbox 360 на PS2; дуже мало вихідного коду пережило цей процес, лише тому, що передбачалося, що є багато і багато оперативної пам’яті, доступних для використання; Довелося її переписати, щоб використовувати менше пам'яті.
Тревор Пауелл

+1, Ви чітко не згадали, що HAL відрізняється між платформами (причина Psykocyber також відповіла) - можливо, додати, що вам потрібна HAL для кожної платформи? Крім того, що використання ANSI C / ++, ймовірно, є обов'язковою умовою, оскільки вам потрібно перехресно компілювати його.
Джонатан Дікінсон

Тревор: Гейбой? Чорт, я, мабуть, мандрував у минуле, краще поверніться до своєї машини часу ...

3

Інші відповіді викладають речі в ідеальних випадках. Більшість кодів є загальним для ігор, а чистий шар абстракції використовується для деталей, що залежать від апаратних засобів та платформ.

Однак у багатьох іграх є порти, виконані сторонніми компаніями, і код значно відрізняється. Особливо це стосується консолей, але також звичайних портів для OSX або Linux з Windows.

На консолях апаратне забезпечення досить різне, що часто цілі фрагменти передачі ядра (а рідко й інші системи) повинні бути повністю переписані. На ПК ви можете розміщувати конспекти над D3D та OpenGL, оскільки API API відрізняються, але все обладнання для ПК приблизно однакове.

На консольному просторі ви можете виявити, що ваш надзвичайно ефективний шикарний двигун візуалізації прямо неможливо перенести безпосередньо на іншу консоль, оскільки можливості GPU настільки різні, і вам потрібно буквально видавити кожен останній відсоток продуктивності, щоб отримати 7 років старе обладнання для запуску вашої сучасної гри. Ви можете легко знайти випадки, коли освітлювальні елементи, які найкраще працюють на XBox, жахливо повільні на PS3, і де найкращий підхід для PS3 собак на XBox. Інші апаратні та платформенні відмінності (наприклад, SPU на PS3 проти триядерного процесора XBox) дуже ускладнюють покладатися на простий тонкий апаратний шар абстракції як на ваш єдиний шлях, що залежить від платформи.

Оскільки кожна платформа також потребує широкого досвіду, щоб правильно її використовувати, для багатьох ігор потрібна спеціалізована компанія, яка переносить аутсорсинг, щоб перенести гру на додаткові платформи. У просторі ПК іноді можна знайти сольних розробників, які займаються портами (наприклад, Райан "icculus" Гордон, який робить багато ігрових портів Linux; зазвичай працюють прямо вперед, змінюючи D3D на GL та Win32 на POSIX / SDL), перебуваючи в консольному просторі Є компанії з усіма командами, які виконують досить масштабну роботу з перенесенням на більші ігри.

Порти на деяких платформах вимагають майже повного переписування або перепроектування активів. Наприклад, порти Wii Call of Duty, де це робиться сторонніми компаніями, і все - включаючи мистецькі активи - довелося переробляти, щоб відповідати обмеженням обмеженого обладнання Wii. Наприклад, у Wii немає навіть шейдерів, тому просто повторне використання одного і того ж двигуна та ефектів / матеріалів було абсолютно неможливим, а обмежена пам’ять та процесор / GPU вимагали менших текстур та менше деталей моделей, плюс обмеження у геймплейі тощо. Порти на мобільних платформах так само, як правило, повністю переписуються, як правило, сторонніми сторонами.

Нові двигуни полегшують порт між платформами, але більші ігри, як правило, все ж потребують оновлення значних частин свого коду та повторення багатьох активів, щоб перейти від більш здатних платформ ПК та консолей до більш обмежених платформ.


2

Відповідь Джеймса стосується лише ПК, а не для реалізації на певних платформах.
Хоча всі двигуни абстрагують платформу для більшості ігрових кодів, деякі частини повинні бути написані на кожній платформі. Сюди входять усі введення / виведення, включаючи мережу, рендерінг, аудіо, введення пристрою та, я думаю, вихід відео.
Порівняйте код візуалізації для скажімо Unreal на Xbox та PS3. Xbox використовує версію Xbox DirectX, а PS3 - libgcm (бібліотека OpenGl занадто повільна). Щоб трохи спростити це, на всіх платформах ігрові програмісти бачать лише «AudioSystem.PlaySound ( тут є SoundName ), тоді як для кожної платформи вони функціонують внутрішньо, вони б викликали API платформ для виведення звуку.
Дивіться також коментар Tatrad для додаткового програмування.


1
Саме так сказав Джеймс, він просто нехтував зазначенням того, що HAL відрізняється для кожної платформи.
Джонатан Дікінсон

Я фактично згадував, що він буде працювати в будь-якій системі, для якої передбачений API HAL, але я зрозумів це, оскільки це явно викликало плутанину. Крім того, ви не портуєте код на ПК на інший ПК, якщо ви не переходите на ОС, як на Mac чи Unix. Для середовищ Windows, де працює більшість ігор, саме драйвери апаратного забезпечення вирішують це вже для вас, ви створюєте буфер даних DirectX або OpenGL через дзвінки драйверів, і апаратне забезпечення знає, що робити звідти.
Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.