Как игровые компании занимаются программированием для нескольких платформ? - PullRequest
16 голосов
/ 08 июня 2010

Вы часто видите, что новая игра будет выпущена на Xbox 360, PS3 и Windows PC.

Как игровые компании делают это? Это общий исходный код, скомпилированный с использованием разных компиляторов? Требуются ли действительные разные исходные коды?

пример новостной статьи, объявляющей это: http://www.gameranx.com/updates/id/502/article/dungeon-siege-3-announced-to-be-developed-by-obsidian/

Ответы [ 12 ]

14 голосов
/ 08 июня 2010

Вообще говоря, подавляющее большинство многоплатформенных титров «тройной А» реализовано поверх движка, такого как Unreal, Source или других меньших движков.Каждый из этих механизмов реализован на заказ и оптимизирован для каждой платформы и может использовать API более низкого уровня, например DirectX / OpenGL, который, в свою очередь, использует консоль.Каждый из этих движков также имеет плагины для конкретных платформ (например, управления движением), которые взаимодействуют с официальными драйверами или API-интерфейсами оборудования.

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

Например, посмотрите на нереальный движок: http://www.unrealtechnology.com/technology.php

Большинство самых больших движков, таких как Unreal, настолько гибки и надежны, что позволяютразработчики пишут всевозможные игры.Например, движок Unreal использовался не только для шутеров, но и для шутеров-RPG, таких как Mass Effect.

Помните, что большая часть рабочей силы при создании игр посвящена графике, дизайнерам декораций, дизайну звука, дизайну уровней и т. Д., И для этого есть специальные редакторы.Многие из частей набора обычно программируются с помощью языков сценариев.Лишь небольшая часть людей в игровых компаниях на самом деле пишет код на языках низкого уровня, таких как C.

5 голосов
/ 08 июня 2010

Движок позаботится об этом, предоставляя уровень независимости платформы. Вещи, которые варьируются между платформами, например, графическая библиотека. потоки, часы и файловая система и т.д .; реализованы для каждой платформы в игровом движке.

Я могу позвонить движку для рендеринга 3D-модели, состоящей из треугольников. Движок, в свою очередь, отображает эту модель, вызывая уровень независимости платформы, который использует реализацию для используемой в настоящее время платформы.

4 голосов
/ 08 июня 2010

Существует два способа, которыми игровые компании делают это:

1) Написание / использование многоплатформенного движка 2) Портирование игры

Многоплатформенный движок будет содержать абстракции для действий, специфичных для платформы (созданиевызов Windows API, рендеринг в DirectX против OpenGL и т. д.), чтобы всю работу можно было выполнить один раз, а затем построить для обеих машин.Обычно речь идет о написании простых методов-оболочек для таких вещей, как вызовы Direct3D, а что нет.Большинство новых игровых движков создаются с нуля с поддержкой нескольких платформ.Другие добавляют мультиплатформенную поддержку.

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

По различным причинам портированные игры могут страдать от проблем с производительностью, как правило, несмотря наразбавленные визуальные эффекты.Взгляните на The Orange Box на PS3 или CoD: Modern Warfare для Wii, чтобы увидеть два примера неправильных портов.Для OB компания Valve передала задачу переноса игры в EA.Во втором случае Activision решила, что имеет смысл переносить игру на движке, предназначенном для более мощного оборудования, на более слабую платформу, а не строить игру поверх нового движка, разработанного для получения максимальной отдачи от Wii.

3 голосов
/ 08 июня 2010

На самом деле, есть некоторые фреймворки, которые могут работать на нескольких платформах.

Например:

  • XNA Framework может работатьв Windows, Xbox и Windows Phone с практически одинаковой кодовой базой.(Приблизительно на 90% один и тот же код C # может работать на всех платформах.)
  • Unity 3D поддерживает ПК, MAC, браузеры, iPhone, Wii и скоро будет поддерживать Android,тоже.

Есть и другие подобные фреймворки.

Кроме того, большинство популярных игровых движков (например, Unreal и т. д.) портированы на несколько платформ.

3 голосов
/ 08 июня 2010

Во многих местах будут отдельные команды, ответственные за разные версии.Вот почему вы всегда видите небольшие различия.Однако, если выбран переносимый язык, эти команды могут обмениваться кодами.

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

Я предполагаю, что отдел искусства / медиа одинаков для всех платформ.

2 голосов
/ 09 июня 2010

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

2 голосов
/ 08 июня 2010

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

Конкретные методы являются очень проприетарными, секретными и являются одними из самых ценных активов создателя игры.

1 голос
/ 09 июня 2010

Не обязательно, что касается видеоигр, но лучший опыт, который я видел для работы с мультиплатформенным программным обеспечением, был в GOF (http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612). Прочитайте пример из системы управления окнами.

1 голос
/ 08 июня 2010

Игровые компании используют коммерческое промежуточное ПО, такое как RenderWare, которое не обходится дешево. Большинство игровых платформ также поддерживают среду C ++ для компиляции кода. Кроме того, большинство консолей поставляются с версией для разработчиков (Playstation делают), и есть симуляторы для тестирования большей части кода. Это промежуточное ПО теперь принадлежит EA (которая похожа на гигантского игрока на поле). Создание 3D-игр - это не просто фреймворк. Большая часть игры происходит от проектного документа, который документирует ход игры и игровой процесс. Оформление выполняется в другом программном обеспечении (например, Maya и Lightwave) и «моделях», которые являются игровыми персонажами.

Даже если это может показаться ужасной работой, когда дело доходит до кодирования, это не так уж сложно. Написание основной функциональности занимает неделю или восемь, остальное больше в дизайне и планировании. Просто помните, что 3D составляет всего 10% от общей игры. Это мои два цента как бывшего разработчика игр.

1 голос
/ 08 июня 2010

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

Однако существует большой объем кода, который должен быть написан (и протестирован) и является уникальным для платформы. Например, большинство (если не ВСЕ) код, связанный с видеокартой, должен был бы отличаться для Xbox 360 по сравнению с PS3.

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

Кроме того, в крупных игровых компаниях сотни разработчиков работают над проектом, поэтому у них гораздо больше ресурсов, чем могли бы некоторые инди-разработчики.

Это никогда не идеально, хотя. Вы всегда должны портировать НЕКОТОРЫЙ код. Если вы не используете Adobe AIR, но ваша игра предназначена для консолей (а кто использует Adobe AIR для разработки РЕАЛЬНЫХ игр?)

...