Портирование игр Wii и / или PSOne на OpenGL ES

Меня попросили исследовать портирование игр Wii и некоторых игр (Sony) PSOne на OpenGL ES (можете ли вы догадаться, на какой платформе?).

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

  1. Wii использует OpenGL? Если нет, то, что он использует и насколько легко портировать на OpenGL / OpenGL ES?
  2. Существуют ли какие-либо ресурсы / книги / блоги, которые помогут мне понять процесс?
  3. Должна ли моя компания стать официальным разработчиком Wii? Если да, то с чего мне начать этот процесс?
13.10.2009 13:06:17
5 ОТВЕТОВ
РЕШЕНИЕ

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

Итак, чтобы ответить на ваш вопрос, да, вам нужно стать или работать с лицензированным разработчиком Sony и Nintendo, чтобы принять этот подход. В случае с Sony, я даже не знаю, предлагают ли они программу развития PSOne, которая представляет проблемы. Ваш представитель Sony может помочь уточнить.

Основными подсистемами, которые могут оказаться в центре ваших усилий по переносу, являются:

  1. Код отрисовки графики содержит фундаментальные предположения об оборудовании, на котором он работает, для оптимальной работы. Совместимость на уровне API является поверхностной совместимостью и не дает вам того, на что вы надеетесь. Запланируйте поиск точки входа в средство визуализации и определите, какие данные вам нужны для рендеринга сцены, и переписайте весь код рендеринга оттуда для вашего целевого оборудования.
  2. Сохранение игры Сериализация и архивация состояния игры должны быть разделены. Старые игры часто используют fwrite () с полями #pragma. Это все еще будет работать для вас?
  3. Сетевые игры Wii пишут в сервисы высокого уровня, которые недоступны на вашем целевом оборудовании. На низком уровне розетки все еще являются розетками. На какие сетевые сервисы опираются ваши игры Wii?
  4. Элементы управления От того, откуда вы идете, куда вы идете, все, кроме полного изменения дизайна или переосмысления ввода, приведет к плохим обзорам программного обеспечения.
  5. Игры консоли управления памятью часто делают фундаментальные предположения о скорости, с которой системное программное обеспечение возвращает память из кучи, о степени фрагментации и продолжительности работы игры в этих условиях. Эти предположения об управлении памятью устарели на новой платформе. Целесообразно написать собственный менеджер памяти, который обеспечивает защиту операционной системы. Кроме того, консольные игры, скомпилированные для выпуска, лишены большей части обработки ошибок и не изящно справляются с нехваткой памяти - только на голову.
  6. Содержание Ваше узкое место будет системная память. Можете ли вы вставить необходимые ресурсы в память? С текстурами вы можете уменьшить mip там, где это необходимо, а с помощью графического оборудования вы можете тянуть в далекой плоскости отсечения. При наличии ресурсов, хранящихся в памяти, вам может понадобиться технический художник для уменьшения плотности лица ваших моделей или программист анимации для реализации более удобного по размеру анимационного кодека. Это очень специфично для игры.

Вы также сталкиваетесь со стандартным набором проблем с такими вещами, как битовая совместимость (хотя Wii и PSOne являются 32-битными), идиосинкразии компилятора, несовместимость скриптов сборки и проприетарные расширения компилятора.

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

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

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

3
24.10.2009 06:06:41

Игровые приставки используют не OpenGL, а свои собственные пользовательские библиотеки. Основная причина в том, что они довольно медленные и имеют мало оперативной памяти. Так что вам нужно выжать каждую каплю производительности, которую вы можете получить. А это значит: пользовательский код. Обычно вы получаете фреймворк с комплектом разработчика, с которого вы начинаете, а затем вы создаете свой код на его основе. В конце концов, вы начнете заменять части из набора разработчика своим собственным специальным кодом, чтобы получить всю необходимую вам скорость и специальные эффекты.

Существует причина, по которой игры PSOne настолько уродливы на PS3, несмотря на то, что разработчики имеют доступ к источникам: доход просто не оправдывает прикосновения к коду.

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

В последние годы наборы стали более сложными и мощными, и вы можете получить полноценные игровые движки (со всеми видами эффектов и поддержкой 3D), но каждый движок - это совершенно другой тип зверя, поэтому вы даже не можете скопировать код из движка A в Б.

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

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

[EDIT] Чтобы разработать программное обеспечение для Wii, см. Здесь: http://www.warioworld.com/

Для эмулятора Wii, см. Http://wiiemulator.net/

3
13.10.2009 14:55:29
Это одновременно полезно (+1) и бесполезно (-1), но +1 за усилия, спасибо.
rjstelling 13.10.2009 13:26:38
Это полезно, но разочаровывает;) Я добавил ссылку, по которой вы читали о том, как стать официальным разработчиком Wii. Но я предполагаю, что среди правил контракта вы найдете «не нужно строить эмулятор Wii».
Aaron Digulla 13.10.2009 14:56:48
На самом деле вы хотите повторно использовать довольно много кода на разных платформах с правильной архитектурой (информация от друга в крупной игровой студии), но в конце концов ваши реальные возможности ограничены платформой. Зачастую создание художественных работ (3D-моделей и текстур) является самым большим препятствием. В некоторых выпусках они будут использовать наименьший общий знаменатель с точки зрения качества художественного произведения только потому, что на переработку и повторное тестирование художественного произведения требуется время, и они доводят графики до предела как есть.
Eric J. 20.10.2009 16:31:33
Можно было бы предположить, что вы создадите текстуры с максимально возможным качеством, а затем уменьшите их для менее мощных консолей, но там, где это ломается, вероятно, так много деталей, что это не происходит в реальности.
Aaron Digulla 21.10.2009 09:20:04

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

  • пересборка
  • исправить многие из сотен ошибок [во многих местах, причем одна и та же ошибка повторяется снова и снова]

а также

  • «подключить» вызовы из нового игрового движка к соответствующим вызовам в старом коде
  • вызовы функции «подключить» из старого кода в новый игровой движок
  • иметь дело с другими странностями (например, в старом игровом движке 2d-игра сама "извергала" текстуры; в новой версии движок делал это (на определенных платформах))
  • и, хотя я не помню этого ясно, он, вероятно, был смешан с кучей #ifdefфрагментов кода, так что эта вещь на самом деле скомпилировалась и, возможно, создала заглушки функций, которые будут заполнены позже.

Насколько я помню, прошло три или четыре дня, пока я что-то не собрал. (Но это помогло, когда мы портировали другие игры со старой версии на новую!)

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

Вам не нужен комплект для Wii. Иногда полезно убедиться, что код, который вы даете, действительно компилируется в исходной среде (и соответствует коду доставки!), Но иногда вы можете просто взять его на веру и заставить работать в новой среде.

Наконец, я не думаю, что Wii использует OpenGL, и я действительно не знаю, куда вам обратиться за дополнительной помощью.

3
23.10.2009 15:13:55

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

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

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

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

1
22.10.2009 02:08:45

Хорошо перенести игру PS1 на iPhone было бы весьма непростой задачей. Я уверен, что это выполнимо, но это будет МНОГО работы по замене всей математики с фиксированной запятой и отсутствию рендеринга на основе Z-буфера на реальный графический чип.

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

Я не совсем уверен, что могу сказать что-то большее. За эти годы подписали слишком много NDA, чтобы быть на 100% уверенными в том, что я могу и не могу сказать;)

Тем не менее, если вы хотите нанять кого-нибудь для выполнения работ по переносу и готовы предоставить необходимое оборудование, тогда я могу быть свободен;)

1
23.10.2009 21:17:33