Як створюються ігри для різних платформ?
Наприклад, Call of Duty: Modern Warfare 3 доступний на PS3, Xbox 360, Wii та ПК.
Чи повністю перепрограмовані вони без загального коду? Чи є проміжний код?
Як створюються ігри для різних платформ?
Наприклад, Call of Duty: Modern Warfare 3 доступний на PS3, Xbox 360, Wii та ПК.
Чи повністю перепрограмовані вони без загального коду? Чи є проміжний код?
Відповіді:
Більшість ігрових двигунів рівня виробництва мають те, що відоме як апаратний рівень абстракції. Це загальний API, який ігровий движок може використовувати для розмови з обладнанням, не знаючи, яке саме обладнання. Вони просто називають SoundManager.PlaySFX (SFX_ID) тощо. Однак в диспетчері звуків він дізнається, над яким обладнанням він працює, і здійснить відповідні дзвінки, щоб отримати звуковий ефект.
Це дозволяє розробляти двигун за допомогою цього шару абстракції, щоб він міг працювати в будь-якій системі за умови надання API для того обладнання, яке відповідає абстракції. EDIT: Як зазначає Джоннатан, для кожної платформи, на якій потрібно працювати, потрібно мати API. І, на думку Тревора, при переході від системи високої пам’яті до низької пам’яті (мені найгірше було PS3 до PSP), можливо, доведеться вирішити різні обмеження обладнання. На щастя, мені не довелося переписувати всю систему через платформу, але мені довелося пройти і оптимізувати об'єкти, щоб зайняти менше друку на ногах.
Інша сторона речей - в області мистецтва, де роздільна здатність текстур чи моделей тощо. Активи акти можуть бути побудовані до конкретної цілі, тому ПК отримує свої файли wav для своїх звукових ефектів, в той час як вони перетворюються на конкретні формати, які підтримує PS3 тощо.
Сподіваюсь, це допомагає.
Інші відповіді викладають речі в ідеальних випадках. Більшість кодів є загальним для ігор, а чистий шар абстракції використовується для деталей, що залежать від апаратних засобів та платформ.
Однак у багатьох іграх є порти, виконані сторонніми компаніями, і код значно відрізняється. Особливо це стосується консолей, але також звичайних портів для 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 вимагали менших текстур та менше деталей моделей, плюс обмеження у геймплейі тощо. Порти на мобільних платформах так само, як правило, повністю переписуються, як правило, сторонніми сторонами.
Нові двигуни полегшують порт між платформами, але більші ігри, як правило, все ж потребують оновлення значних частин свого коду та повторення багатьох активів, щоб перейти від більш здатних платформ ПК та консолей до більш обмежених платформ.
Відповідь Джеймса стосується лише ПК, а не для реалізації на певних платформах.
Хоча всі двигуни абстрагують платформу для більшості ігрових кодів, деякі частини повинні бути написані на кожній платформі. Сюди входять усі введення / виведення, включаючи мережу, рендерінг, аудіо, введення пристрою та, я думаю, вихід відео.
Порівняйте код візуалізації для скажімо Unreal на Xbox та PS3. Xbox використовує версію Xbox DirectX, а PS3 - libgcm (бібліотека OpenGl занадто повільна). Щоб трохи спростити це, на всіх платформах ігрові програмісти бачать лише «AudioSystem.PlaySound ( тут є SoundName ), тоді як для кожної платформи вони функціонують внутрішньо, вони б викликали API платформ для виведення звуку.
Дивіться також коментар Tatrad для додаткового програмування.