Портирование игр Wii и / или PSOne на OpenGL ES - PullRequest
0 голосов
/ 13 октября 2009

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

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

  1. Использует ли Wii OpenGL? Если нет, то что он использует и насколько легко переносить его на OpenGL / OpenGL ES?
  2. Существуют ли какие-либо ресурсы / книги / блоги, которые помогут мне понять процесс?
  3. Должна ли моя компания стать официальным разработчиком Wii? Если да, то с чего мне начать этот процесс?

Ответы [ 5 ]

3 голосов
/ 24 октября 2009

Портирование с 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 голосов
/ 22 октября 2009

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

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

и

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

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

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

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

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

3 голосов
/ 13 октября 2009

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

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

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

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

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

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

[РЕДАКТИРОВАТЬ] Для разработки программного обеспечения для Wii, см. Здесь: http://www.warioworld.com/

Эмулятор Wii см. http://wiiemulator.net/

1 голос
/ 24 октября 2009

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

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

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

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

1 голос
/ 22 октября 2009

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

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

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

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

...