Перевод
Привет,Джон произнёс несколько таинственных слов и вызвал меня из времён разработки 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') рядом со строкой данных в заголовочном файле!
Оригинал
Hello,John uttered some arcane words? and invoked me from PC game development circa 2000.
So I was the lead programmer on SH2PC back then, our tiny team (4) had about 4-5 months to port Silent Hill 2 from console to PC. It was a lot of fun but hard work.
I'll try and remember what we did and why but obviously its been a long time and a lot of code has sailed through the brain since, so apologies!
Some interesting notes:
We were never able to rebuild the art from source, it was all originally made on SGI with SoftImage and whilst we did have a SGI workstation we could never get the exact version for there plugins to work. This meant we relied on converting the processed art assets, which meant somethings make no sense as to why they are still there.
We had to support high end PC (A Geforce 3/4 at the time!) but also the low end which was something like a Kyro. This meant we had to have software vertex processing, HW fixed function vertex processing, HW vertex shaders, as well as fixed function and PS1.1 pixel shader version.
This meant that effectively the skeletal/morph system, lighting and almost all the effects had to be effectively rewritten in unusual ways to allow it to work on lower end HW then it was really ever designed for (PS2 was odd but for the talented team at Konami used it wonderfully).
All the source code comments were in Japanese, my colleague and friend Oscar wrote a program that parsed every comment in the source code, sent it to a Japanese to English translator program and the re-inserted it back into our source code where it came from.
The translator program didn't do that well in some cases and we got used to certain words meaning different things, for example apex = vertex. Many a time would one of the four of us suddenly break into laughter when we would read a comment and then figured out what it was meant to say. We also learnt a few interesting turn of phrases that presumable were Japanese swearing badly translated, many of them seemed to be at the Xbox platform...
I've only quickly scanned the thread, so if I missed any questions they you think I might know give me a poke and i'll try and remember.
The first and most obvious (and odd) one is, why does the PC version have such crap video and sound compression compared to PS2/Xbox? The answer is simple, money and minimum requirement. PS2 and Xbox both shared a common disk standard namely DVD, on PC our lower end targets where still expected to be on CD. We (the dev team) did try and get them to either make DVD a requirement or let us ship with an additional disk but bean counters said no. Which meant we had to fit 4.7GB of data onto what we could compress on a few CDs. After doing what we could it came down to reducing the size of the videos, we actually also had the problem that both PS2 and Xbox had MPEG2 decoders available where we didn't.
Sound was a problem throughout because originally the PS2 devs licensed a Japanese audio middleware (CRL iirc), when Xbox came around that was used as well. When we came to do the PC version, we were assured the PC version would be ready in time, but it wasn't, technically we shipped with a alpha/beta version of the sound codec (though it was patched iirc). This caused issues through our development as what formats would be supported etc. wasn't locked down and Japanese to English discussion between CRL and us were difficult due to the obvious time and language issues. IIRC there was always a looping bug due to the middleware which might be related to some glitches when looping even with higher def sound files.
The curious case of the shadows: The original PS2 shadow system was highly specialised to its particular HW. IIRC For the environment its a shadow volume system without a stencil buffer. It does the classic stencil counting using an alpha channel. I'm having problem remember the dynamics objects possible it was an object buffer which was then projected onto the rendered object... Xbox uses a similar system but fewer passes by using XPS pixel shaders. So if shadow volumes why does it look soft I hear you ask? Well both PS2 and Xbox could easily blur the screen space alpha channel, just before applying the lighting.
PC basically did the same thing but we couldn't do the blur pass. D3D at the time didn't reliably support render targets, so we couldn't easily do the screen space blur. I can't recall if we had to disable object shadow rendering, but its possible we did. We ended up with a .txt file which mapped buggy drivers and hardware and features, and still there were some things that were not able to be done.
The lighting might be a bit different as we had to refactor the lighting to fit inside fixed function SW and HW. This meant doing some clever tricks and guess to try and match it as closely as possible, we couldn't tweak the art so we had to do a best fit from the freely programmable lighting model the consoles had to something we could pass through the fixed function HW. Sometimes we couldn't match it exactly and I suspect there were places where it didn't match well that didn't get caught in bug testing.
And lastly I shall leave you with the mystery of the monkey room, the original game as mentioned was made in SoftImage and then a custom exporter wrote out a header file that was compiled into the game which had all the triggers, scenes, rooms etc. in it. In modern game terms its all hardcoded and various bits of C code were run when required for a particular scene. As we couldn't re-export we got very good at reading this game header file and we found it refers to a room thats not in the game. The physical place is in the game but theres nothing in it (the door is wired into the frame and clipping into there shows nothing in there), presumable its a room/scene that got cut fairly early in production. The only thing we have that might indicate what might have been in there was the strange auto-translated work 'monkey' next to the data line in the header file!
HTH,
Deano
Перевод: Silent Beavis