Как создаются игры для разных платформ?

9

Как создаются игры для разных платформ?

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

Они полностью перепрограммированы без общего кода? Есть ли промежуточный код?

Адриано Силва
источник
3
Обычно все это делается на C ++, а специфичные для платформы вещи передаются в пару классов.
ashes999

Ответы:

11

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

Это позволяет разработать механизм с использованием этого уровня абстракции, чтобы он мог работать в любой системе при условии, что для этого оборудования предоставляется API, соответствующий абстракции. РЕДАКТИРОВАТЬ: Как отметил Джонатан, требуется API для каждой платформы, на которой вы хотите работать. И, к слову Тревора, при переходе от системы с высокой памятью к памяти с низкой памятью (для меня хуже всего было PS3 на PSP), вам, возможно, придется преодолеть различные аппаратные ограничения. К счастью для меня, мне не пришлось переписывать всю систему из-за платформы, но мне пришлось пройтись и оптимизировать объекты, чтобы они занимали меньше места.

Другая сторона вещей находится в области искусства, где разрешения текстур или моделей и т.п. различны. Ресурсы игры могут быть направлены на конкретную цель, так что ПК получает свои wav-файлы для звуковых эффектов, в то время как они превращаются в конкретные форматы, которые поддерживает PS3 и тому подобное.

Надеюсь это поможет.

Джеймс
источник
1
Я добавлю к этому, что в большинстве случаев PC / PS3 / Xbox360 будет использовать одну общую кодовую базу, а Wii / PS2 / PSP будет использовать другую кодовую базу. Gameboy будет иметь отдельную кодовую базу, а iPhone / Android обычно будет иметь кодовую базу. В основном это связано с широким уровнем вычислительной мощности, доступной памяти и графических возможностей различных платформ. Однажды мне пришлось портировать игру с Xbox 360 на PS2; очень мало исходного кода пережило этот процесс только потому, что предполагалось, что для использования доступно много и много ОЗУ; Мне пришлось переписать его, чтобы использовать меньше памяти.
Тревор Пауэлл
+1, вы прямо не упомянули, что HAL различается между платформами (причина, по которой Psykocyber также ответил) - возможно, добавьте, что вам нужен HAL для каждой платформы? Кроме того, использование ANSI C / ++, вероятно, является обязательным требованием, так как вам нужно его кросс-компилировать.
Джонатан Дикинсон
Тревор: Gameboy? Черт, я, должно быть, отправился в прошлое, лучше вернуться к своей машине времени ...
3

Другие ответы разъясняют вещи в идеальных случаях. Большая часть кода является общей для игр, а чистый уровень абстракции используется для аппаратно-зависимых частей.

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

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

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

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

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

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

Шон Миддледич
источник
2

Ответ Джеймса относится только к ПК, а не для реализации на конкретных платформах.
Хотя все движки абстрагируют платформу для большей части игрового кода, некоторые части должны быть написаны для каждой платформы. Это включает в себя все операции ввода-вывода, включая сеть, рендеринг, аудио, ввод с устройства и, я думаю, вывод видео.
Сравните код рендеринга, скажем, Unreal на Xbox и PS3. Xbox использует версию Xbox DirectX, в то время как PS3 использует libgcm (библиотека OpenGl работает слишком медленно). Чтобы немного упростить это, на всех платформах программисты игрового процесса видят только «AudioSystem.PlaySound ( SoundName здесь )», в то время как для каждой платформы, которую они функционируют внутри, будет вызываться API платформ для вывода звука.
См. Также комментарий Tatrad для большего программирования.

Питер Олстед
источник
1
Это именно то, что сказал Джеймс, он просто забыл упомянуть, что HAL отличается для каждой платформы.
Джонатан Дикинсон
Я на самом деле упомянул, что он будет работать на любой системе, для которой предусмотрен HAL API, но я пояснил, что это явно вызывает путаницу. Кроме того, Вы не переносите код с ПК на другой ПК, если только вы не собираетесь использовать одну и ту же ОС, например Mac или Unix. В средах Windows, где работает большинство игр, именно драйверы оборудования уже справляются с этим, вы создаете буфер данных DirectX или OpenGL с помощью вызовов драйвера, и оборудование знает, что делать дальше.
Джеймс