GameDev ВолгоградаСтатьи

Oxide (4 стр)

Автор:

Тут повествование Глеба прерывается, дальше буду рассказывать я. Зовут меня Алексей, я участвовал в создании этой же игры в составе волжской части команды.
Рассказ свой начну с самого начала, что бы более полно обрисовать картину этой более чем интересной истории.
Предложение об участии в разработке игры мне поступило в момент написания диплома инженера в Волжком Политехническом Институте, от того же самого Сергея Карпова. Сказать, что оно попало в цель - не сказать ничего. С того момента, как я увидел компьютер(Агат 9), кроме игр я ничего не писал. Тогда не было ни интернета, ни книг. Бейсик был выучен за пол года, за последующий год методом реверсинжениринга я понял что такое ассемблер, определил, какие команды что делают, и начал писать игры в ассемблере. К окончанию 11 класса 64х килобайт памяти архитектуры 6502 было уже мало. В институте, перейдя на x86 я продолжил написание игр, используя их как семестровые/курсовые работы для получения автоматов по профильным предметам. Так что предложение сразу после института стать разработчиком игр было каким то даром небес.
Самым большим страхом на тот момент у меня было то, что меня не возьмут, т.к. я не очень подходил под требуемые параметры вакансии, особенно по свободному владению английским языком. В надежде на чудо за три дня была написана демка автомобиля, ездящего по холмистой плоскости 40 на 40 полигонов, с вращающимися/поворачивающимися колёсами, и видом от третьего лица. С выводом изображения в директ мне помог мой хороший друг который шарил в графике и устраивался на работу вместе со мной.
Демка видимо понравилась, да и особого выбора у инвестора скорее всего не было, и мы были взяты с испытательным сроком. Потом была предварительная встреча в кафешке, где мы все(волгоградская и волжская часть команды) познакомились друг с другом. Команда полностью состояла из только что выпустившихся студентов, и тридцатилетнего руководителя, уволившегося ради перспективы с одного из волжских заводов. Первый рабочий день был 15 февраля 2002 года. Мы собрались в офисе и весь день обсуждали детали проекта. Точнее будет сказать проэкта, т.к это был огромный город, с миллионами жителей - нпс, с каждым из которых можно разговаривать, получать осмысленные вопросы, и тд. Подробное описание можете прочитать в каждой второй теме раздела Проэкты. Второй день происходило то же самое. На третий день мне надоело просто сидеть, я попросил себе какой-нибудь независимый модуль под реализацию, и сел писать физику.
Сказать что было трудно - не сказать ничего. Полное незнание векторной математики, смутные познания физики, всё это приходилось учить фактически с нуля, наступая на все возможные грабли. Первая версия коллижена была на коллизиях ребро/ребро. Т.е. физические объекты задавались как набор рёбер. Первая майская демка, с летающими танчиками, была реализована на этом варианте физике. Потом перешёл на полигональную геометрию. Т.к была необходимость в большом городе, то сразу встал вопрос оптимизации. Сперва это было бинарное дерево, потом BSP. С солвером проблемы были не меньшие. Импульсная модель идеально работала для отдельных объектов, но для сложных составных объектов и их сочленений системы линейных уравнений начинали превышать размерность 50, и о реалтайме можно было забыть. Пришлось переходить на "честную" силовую модель. Т.е. твёрдое тело представляло собой совокупность шести компонентов - позиции, скорости, ускорения (линейная и вращательная). Ко всему этому с трудом подбирались расчёты оптимального шага вычислений, балансирование между производительностью и уходом объекта в разнос. Но результаты были более чем хорошие, напомню, хл2 ещё не существовал, а у нас была полноценная физика с честными регдолами.

oxide | Oxide

Утро после мейлстоуна:)

А тем временем проект постепенно развивался. Мы с энтузиазмом наступали на все грабли, на которые только возможно. У меня был перекос в бесполезную "честность" физики, например не исчезающие трупы, или физические пули, которые после выстрела можно найти на другом конце города. Глеб, занимавшийся ядром, прочитал Александреску и ушел в астрал. Виталик, программист графики, разрывался на двух работах, и катастрофически не успевал. Когда его уставали ждать, реализовывали всё сами. Так например трассировка была только в физике. Туда специально подгружались графические модели. Был найден первый дизайнер, который подтянул потом всю команду дизайнеров. Все они тоже были вчерашними студентами, и учились всему с нуля вместе с проектом.

oxide | Oxide

Офис, работа.

oxide | Oxide

Главный сотрудник офиса.

Поездка на первый КРИ(2003) была первым командным выходом в люди. Мне эта поездка запомнилась групповым просмотром участниками конференции Властелина Колец в переводе Гоблина на официальном стенде Интел, рекламировавшим тогдашнюю новинку - процессоры р4 с гипертредингом. Глеб занимался переговорами с издателями. Ещё была вечерника в каком-то пожарном баре. Но показывать тогда нам было ещё собственно него.
Тем временем каждая новая демо становилась всё лучше и лучше. Постепенно был преодолён уровень студенческих лабораторных, знаменитого пакмана, даже не побоюсь этого сказать - гульмена. Разработка в конце концов превратилась в квартал города, состоящего из двух продольных улиц, 5-6 поперечных, набережной со складами и небоскрёбами - близнецами. Были расставлены вейпоинты для ховеркаров, пешеходов. Реализован аи, чтоб авто/пешеходы не наталкивались друг на друга, не сбивали пешеходов, корректно разъезжались на перекрёстках. Система частиц, моделировавшая рандомный мусор, который разлетался от ветра и пролетавших мимо ховеров. Получился такой футуристичный очень красивый город(спасибо дизайнерам), живущий своей жизнью. К нему начали прикручивать первые наброски миссий, всё было очень похоже на ГТА3(тогда ещё не вышедший). Очень забавно было запрыгивать на ховеркары, и летать над них над городом, в некоторых местах "дорога" поднималась очень высоко. Для тестирования физики да и просто для забавы был реализован обычный автомобиль, катаясь на котором можно было ощутить геймплей аля гта3 ещё до её выхода.

oxide | Oxide

Первая демо - "табуретки".

oxide | Oxide

Вторая демо - "суши бар".

oxide | Oxide

Третья демо - "Пакман" (к сожалению сохранился только скриншот физического режима).

oxide | Oxide

oxide | Oxide

Город

Однажды произошел забавный случай - я был вырван из  кодинга громким смехом нашего руководителя. Он попросил подойди, и сказал, что решил разобраться, почему игра последнее время стала значительно притормаживать. На его экране был открыт лог файл движка, состоящий из повторов одной строки "eto bivaet redko", размер файла был несколько мегабайт. Найдя участок кода, формировавший этот лог, я вспомнил, что пол года назад поставил его как проверку координат двух объектов на полное равенство, и так и не сумев вызвать это событие за несколько тестовых запусков, оставил его в коде и забыл.
Со временем дальнейшая необходимость расширения города поставила вопрос производительности. Логично казалось бы было сделать систему лодов, но решили идти по более простому пути - зарезать идею большого города и сосредоточиться на маленьких локациях, и качественной их прорисовке. Идея исходила от программиста графики, подозреваю, ему так было проще. Город был выброшен, от него осталась только сильно модифицированная часть с двумя небоскрёбами, на уровне 8-1 и ховеркары с дирижаблями, летающие на некоторых уровнях(как обнаружилось после релиза - их можно сбивать из оружия). Вместе с городом ушла хорошая система АИ, управления транспортом, и зачатки чат системы для npc. Теперь мы делали обычный шутер от третьего лица на небольших локациях.

oxide | Oxide

Уровень 8-1, единственная часть большого города, оставшаяся в игре.

Небольшие локации потребовали нового поиска пути, который был реализован Игорем, новым программистом в команде. Пути задавались как ориентированные коробки, расставленные по уровню в тех местах, где персонажи могли передвигаться. По соприкосновениям строился граф путей уровня, а каждая коробка содержала массив-сетку размером ячейки примерно 50 на 50 сантиметров с информацией о занятости этого пространства. Все предметы отмечалили своё положение в этой сетке, что позволяло сделать корректные обходы препятствий и поиск укрытий. Поиск пути вообще был единственным модулем игры, который не потребовал доработки в последующем.
Анимационная машина тоже была нашей гордостью (реализовывал её Валентин). Анимации включались не по клавишам, а по фактической разнице скоростей тела игрока и поверхности. Выбранный подход позволял решить большинство проблем, к которым все привыкли и уже не замечают их в играх. При натыкании на препятствие персонаж не продолжает бежать на месте. Или например когда один персонаж натыкается на другого, другой персонаж корректно физически отталкивается(отходит) без проскальзываний, а не превращается в непроходимую стену. Как бонус оказалось что персонажи умеют "кататься" стоя на лежачих бочках, анимационная машина корректно справилась и с этой ситуаций. Поскольку у нас использовались уникальные в своём роде физические двери, добавили механизм выставления рук вперёд персонажем при натыкании на препятствие, чтоб двери открывались не лицом, а руками. Аналогично выставлялись руки вперёд при натыкании на стены. Хотя некоторые игроки и не поняли этой фишки - видимо им привычнее с разбегу встречать стену лицом, Мэдиссон тому пример.
Ко второму КРИ(2004) у нас уже была рабочая альфа игры. Мы участвовали в ярмарке проектов, и весь день демонстрировали желающим лучшие стороны нашей игры. Сразу же обнаружился интересный баг, из-за которого игра вылетала в строго определённых местах. Как потом оказалось, это был баг компилятора 2003 студии в режиме полной оптимизации. Выражался он в том, что иногда в кватернионах умножение двух нулей давало #inf, частота таких событий напрямую зависела от мощности компьютера. На наших рабочих селеронах 900 со 128мб озу глюк не проявлялся, а на стендовых р4 2600, с 512 мб озу показал себя в полную силу. Был выбран наименее глючный уровень, и путём проб и ошибок найден такой способ демонстрации, чтоб не вызывать падений. Весь КРИ мне пришлось просидеть на стенде.
Работали мы много, но игра почему-то не получалась. Пока в один прекрасный день Глеб не сказал, что нам надо уже делать игру, а не демки. Видно было, что к этому решению он пришел после долгих раздумий, и это решение было очевидно правильным. В тот же день был составлен список уровней, расписана сюжетная линия. Всё наработки, что у нас имелись, начали прикручивать друг к другу, чтобы получить именно законченный продукт. Получалось не очень. В тот момент у нас было две версии ядра, мы их называли - "старое" и "новое" ядра. Большая часть наработок была интегрирована в старое ядро, но новое ядро было более перспективным и гибким. Старое ядро дошло до конструктивных ограничений, и не предусматривало реализацию сети и загрузок/сохранений во время игры. Новое ядро теоретически позволяло сделать необходимое, но было очень сложным, расходовало 75% ресурсов игры в дебугге, и любое изменение кода компилировалось не меньше 30 минут. У нас даже появилось выражение - шаблонные шаблоны, как характеристика полного непонимания участниками разработки происходивших в ядре процессов. Поначалу решили переносить всё в новое ядро. Однако перенос(по сути написание заново) главного меню показала, что процесс этот очень трудоёмкий, и у нас просто нету таких ресурсов. Пришлось остаться на старом ядре и доводить его до ума.
Дальнейшая работа вскрыла новые фатальные недостатки - у нас был совершенно не налажен процесс дизайнерской работы. Экспортёры были, но графические работали медленно, т.к были реализованы в макс-скрипт, другие работали быстро, но при каждом экспорте практически вручную надо было носить модели и текстуры по нужным каталогам игры. Плюс текстуры. Максовские исходники и текстуры постоянно терялись. Работа дизайнеров по скорости и качеству напоминала чиновничью бюрократию - на 5 минут работы, два дня беготни с бумажками. Но надо отдать должное, они и в таких условиях делали свою работу отлично.
По вышеозвученной причине провалилась попытка лицензирования нашего движка для сторонней разработки. Желающие были, но разобраться как с этим работать - никто не смог.

Страницы: 1 2 3 4 5 6 Следующая »

7 января 2006 (Обновление: 23 дек 2012)