Перевод
Привет,Джон произнёс несколько таинственных слов и вызвал меня из времён разработки PC-игр около 2000-го года.
В то время я был ведущим программистом PC-версии Silent Hill 2, у нашей крошечной команды (4 человека) было около 4-5 месяцев на портирование Silent Hill 2 с консолей на PC. Это была очень интересная, но сложная работа.
Я попробую вспомнить, что мы сделали и почему, но, как вы понимаете, это было много лет назад и за это время многое подзабылось, так что примите мои извинения, если что!
Несколько интересных заметок:
Мы были не в состоянии переделывать исходники графики, оно всё изначально было сделано на SGI с SoftImage (прим: SGI — компьютеры Silicon Graphics Inc., AutoDesk SoftImage — ПО для разработки 3D-моделей), и хоть мы и имели рабочую станцию SGI, мы не смогли подобрать к ней плагинов подходящей версии, чтобы это всё могло заработать. Поэтому мы полагались на конвертацию обработанных ассетов, что означало, что было непонятно, почему они всё ещё там присутствовали.
Мы должны были поддерживать высокопроизводительный сектор PC (GeForce 3/4 на то время!), но при этом и более слабые машины, например, Kyro (прим: видеоадаптер компании PowerVR). Это означало, что нам надо было поддерживать software vertex processing, HW fixed function vertex processing, HW vertex shaders, так же как fixed function и PS1.1 pixel shader version.
Это означало, что эффективная скелетная система, освещение и почти все эффекты должны быть переписаны нестандартными способами, чтобы позволить игре работать на нижнем уровне HW, хотя изначально это было спроектировано для работы на PS2 (PS2 была сложна, но для талантливой команды в Konami использовалась на полную).
Все комментарии к программному коду были на японском, мой коллега и друг Оскар написал программу, которая проанализировала каждый комментарий в исходном коде, отправила в японско-английский переводчик и вставила переведённые комментарии обратно в программный код.
В некоторых случаях результат программы-переводчика был некорректным, и нам пришлось привыкнуть к тому, что некоторые слова в действительности означают совсем другое — например, apex=vertex. Много раз кто-нибудь из нас четверых начинал смеяться, когда мы читали комментарий, а потом выясняли, о чём там на самом деле говорится. Также мы узнали несколько интересных речевых оборотов, которые, по всей видимости, были плохо переведены с японского — кажется, многое из этого есть в Xbox-версии...
Я только бегло просмотрел обсуждение, так что если я пропустил какие-либо вопросы, на которые, на ваш взгляд, я могу ответить, укажите мне на них и я постараюсь вспомнить.
Первое и самое очевидное (и странное) — почему PC-версия имеет такое паршивое качество видео и звука по сравнению с PS2/Xbox? Ответ прост — деньги и минимальные системные требований. PS2 и Xbox имели общий стандарт носителя, а именно — DVD. А на PC нашей первостепенной задачей для слабых машин был CD. Мы (команда разработчиков) пытались заставить их либо сделать DVD минимальным требованием, либо позволить нам использовать дополнительный диск, но руководство сказало нет. Это означало, что нам надо было уместить 4,7 ГБ данных на нескольких CD. После того, как мы сделали всё возможное, чтобы уменьшить размер видео, у нас возникла проблема — PS2 и Xbox использовали декодеры MPEG2, а у нас их не было.
Звук был проблемой во всём, потому что изначально разработчики PS2 лицензировали японское ПО для промежуточной обработки звука (CRL iirc), когда вышел Xbox, то он тоже его использовал. Начав разрабатывать PC-версию, мы были уверены, что она будет готова в срок, но это оказалось не так — технически мы отправили альфа/бета-версию звукового кодека (хотя он был пропатчен iirc). Это вызвало проблемы разработки в том плане, какие форматы поддерживать и т.д., а обсуждения на японском и английском между CRL и нами было затруднено очевидным образом из-за часовых поясов и языка. IIRC всегда имел баг зацикливания из-за промежуточной обработки звука, даже если мы использовали файлы более высокого качества.
Интересная проблема была с тенями:
Оригинальная система теней PS2 была сильно завязана на аппаратной начинке консоли. IIRC использовала тени без стенсильного буфера. Оно делает классический стенсильный просчёт, используя альфа-канал. Я с трудом вспоминаю реализацию динамических объектов, возможно это был объектный буфер, спроецированный на рендерируемый объект... Xbox использует похожую систему, но с меньшим числом проходов с помощью пиксельных шейдеров XPS. Итак, почему тени выглядят мягкими, спросите вы? Ну, PS2 и Xbox легко могли размыть альфа-канал экранного пространства, как раз перед добавлением освещения.
PC в основном делал то же самое, но мы не могли сделать размытие. D3D (Direct3D) в то время не поддерживал рендер объектов, поэтому мы не могли просто сделать размытие. Я не помню, пришлось ли нам отключить рендеринг теней объектов, но возможно да. Мы в итоге написали .txt-файл, в котором описали проблемные драйвера, железо и функции, но всё-таки остались некоторые вещи, которые так и не были сделаны.
Освещение могло бы быть несколько иным, поскольку нам пришлось его изменить, чтобы оно соответствовало встроеным функциям SW и HW. Это подразумевало некоторые хитрые трюки и попытки угадать, чтобы попытаться как можно точнее соответствовать оригиналу, который мы не могли править, поэтому нам нужно было искать лучший подход от консольной свободно программируемой модели освещения к фиксированным функциям HW. Иногда мы не могли сделать его идентичным и я подозреваю, что были места, где оно не очень хорошо сочетается и не было отловлено в процессе тестирования багов.
И под конец я оставлю вас с тайной обезьяньей комнаты — оригинальная игра, как упоминалось выше, была сделана в SoftImage, затем кастомный экспортёр писал заголовочный файл, который был скомпилирован в игру, в которой были все триггеры, сцены, комнаты и т.д. Говоря современными игровыми терминами, все данные были жёстко зашиты в игру, а различные порции кода на C исполнялись только тогда, когда это было необходимо для конкретной сцены. Поскольку мы не могли выполнять реэкспорт, мы получили хорошо читаемый заголовочный файл игры и обнаружили упоминание комнаты, которая не была задействована в игре. Физическое место есть (дверь подключена к фрейму, но клиппинг там ничего не показывает) — предположительно, это комната/сцена, которая была вырезана на раннем этапе разработки. Единственное, чем мы располагаем, что может указывать на то, что там могло быть — это странное автоматически переведённое слово 'обезьяна' ('monkey') рядом со строкой данных в заголовочном файле!
Перевод: Silent Beavis