Подтвердить что ты не робот

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

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

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

Там пример этого явления описан в этой новостной статье.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Есть два способа, которыми компании по игре делают:

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Например:

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

Существуют и другие такие структуры.

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

Я бы сказал, "в основном это не так". Все деньги в Windows или в консолях, и многие консоли хотят получить эксклюзивную лицензию. Я видел несколько портов, но они всегда являются отдельной базой кода, разветвленной из предыдущей версии.

Ответ 12

Очень часто они используют #define (например, в С++-коде), поэтому перед компиляцией для указанной платформы включается или используется правильный код. В больших проектах иногда части игры совершенно разные и записываются в разных IDE и скомпилированы в разных (для конкретной платформы) компиляторах.

Пример из моего опыта: Когда я работал над игрой для Nintendo Wii, мы использовали игровой движок Torque. Мы программировали на ПК и компилировали код для ПК. Когда некоторые функции были готовы, мы использовали Metrowerks CodeWarrior (со специальным набором библиотек и т.д.), Чтобы скомпилировать его для Nintendo Wii, отправить его в devkit, а затем запустить с консоли Nintendo Wii.