Как можно сделать сложные игры кроссплатформенными? - PullRequest
2 голосов
/ 04 ноября 2011

Я работаю в OS X около 11 месяцев, до этого я использовал Linux и Windows, и я знаю, как больно делать что-то с GUI, который хорошо работает на всех платформах (без Java).

Что я не понимаю, так это то, как люди могут делать такие игры, как Call of Duty, Duke Nukem Forever или Batman Arkham Asylum, работающие как на Windows, так и на OS X.

Разве библиотеки, подобные DirectX, не предназначены для Windows и полностью недоступны для Mac? Я предполагаю, что такие приложения, как Photoshop, будут иметь свой собственный графический интерфейс, написанный с нуля на C ++, так что это не вызовет таких проблем, как при работе с трехмерным графическим движком (я здесь не прав?).

Я знаю, что можно заставить некоторые вещи работать через Wine на Linux, но на самом деле это не официальный способ.

Как можно достичь такого рода мультиплатформенности для высокопроизводительных приложений?

1 Ответ

6 голосов
/ 04 ноября 2011

Несмотря на то, что API-интерфейсы для 3D-графики могут немного отличаться для разных платформ (OpenGL на Mac / Linux или Direct3D 11 для Windows против Xbox 360, версия DirectX9 против LibGCM на PS3 и т. Д.), Базовое 3D-оборудование на самом деле очень похоже,Как правило, игры будут иметь API-уровень низкого уровня совместимости, который абстрагирует большинство различий между 3D-API на целевых платформах, и тогда рендеринг более высокого уровня будет построен поверх этой абстракции более низкого уровня.Таким образом, перенос на новую платформу включает в себя только перенос относительно небольшого «драйвера» для поддержки низкоуровневого уровня совместимости и не переносит весь код рендеринга более высокого уровня.

Реальность разработки кроссплатформенной игры, которая достигаетвысокая производительность на всех целевых платформах обычно сопряжена с большей сложностью, чем эта идеализированная картина.Например, различия в платформах могут просачиваться и влиять на решения по рендерингу высокого уровня, потому что наиболее эффективный способ достижения определенного эффекта может сильно отличаться на разных платформах.Обработка шейдеров эффективным кроссплатформенным способом, когда разные платформы могут использовать разные языки шейдеров (GLSL, HLSL, Cg), также может быть довольно сложной.

Игры, разработанные с учетом консолей, уже, как правило, имеют сложный конвейер ресурсов, которыйберет исходные ресурсы, созданные художниками (текстуры, модели, анимации, определения материалов и т. д.), и предварительно обрабатывает их в исходных форматах, оптимальных для загрузки и рендеринга на консоли.Многие различия в платформах могут быть обработаны в конвейере, где код должен запускаться только на ПК, а проблемы с производительностью и ограничениями памяти менее значительны.

Этот подход позволяет создателям контента разрабатывать большую часть своего контента, не беспокоясь о деталях платформы, и избавляет среду выполнения игры от необходимости иметь дело с преобразованиями форматов, различиями в порядке байтов и т. Д. Слой графического драйвера на целевой платформе можетбыть достаточно скудным и иметь дело только с собственными форматами текстур, вершинными данными, шейдерами и т. д. с большей сложностью преобразования между форматами, обрабатываемыми в конвейерном коде в системе разработки (обычно ПК высшего класса).

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

Многие игры сейчас разрабатываются с использованием сторонних движков, таких как Unreal или Unity, которые уже проделали большую часть тяжелой работы по устранению различий в платформах и позволяют создателям игр меньше концентрироваться на деталях обработки различий между платформами иподробнее о разработке своей конкретной игры.

...