Postal 3 Technical Postmortem

32
программист Акелла [email protected] История разработки проекта POSTAL III Константин Ефимов

description

Технический постмортем игры Postal 3. 14 Мая 2011, КРИ 2011

Transcript of Postal 3 Technical Postmortem

Page 1: Postal 3 Technical Postmortem

программистАкелла

[email protected]

История разработкипроекта POSTAL III

Константин Ефимов

Page 2: Postal 3 Technical Postmortem

О докладчике

Константин Ефимов

• Закончил Московский Технический Университет Связи и Информатики

• Программист в компании Акелла, где за 7 лет успел поучаствовать в разработке проектов: «Головорезы: корсары XIX века», «Бой с тенью», «Бой с тенью 2», «Меченосец».

Page 3: Postal 3 Technical Postmortem

Начало

• На дворе был конец 2006-го года

• Заканчиваем текущий проект

• Нужно думать что делать дальше

• Предлагаем Running With Scissors совместно делать Postal 3

Page 4: Postal 3 Technical Postmortem

Под что делать?

• Произошла смена поколений игровых консолей

• Принципиально другое железо, поменялись технологии производства

• Отсутствие опыта производства под  “next-gen”

• Выбор Xbox 360 как основной платформы

Page 5: Postal 3 Technical Postmortem

На чем делать?

• Развивать дальше существующий движок

• Разрабатывать новый с нуля

• Купить готовый и не париться

Page 6: Postal 3 Technical Postmortem

Выбор движка

• Движок за миллион

• Небольшие движки

• Source Engine

Page 7: Postal 3 Technical Postmortem

Первые ощущения от Source

• Очень долгая первоначальная загрузка

• Programmer Oriented Engine

• Клиент-серверная архитектура в однопользовательской игре

• В исходниках Source присутствуют сразу все игры Valve

• Олдскульный код. Никаких паттернов

• BaseEntity.h: 2500+ строк, 1000+ функций у класса

Page 8: Postal 3 Technical Postmortem

Проблема: вид от первого лица

• На улице планировался вид от третьего лица

• В помещениях вид от первого лица

• Проблема: предметы и двери выглядят по разному

Page 9: Postal 3 Technical Postmortem

Проблема: вид от первого лица (2)

Page 10: Postal 3 Technical Postmortem

Проблема: большойоткрытый мир

• Надо динамически подгружать части большого мира

• В Source есть подгрузка много чего, но только не уровней

• Решение: разбивать мир на много отдельных уровней

Page 11: Postal 3 Technical Postmortem

Проблема: большойоткрытый мир (2)

Page 12: Postal 3 Technical Postmortem

Проблема: одноэтажная Америка

• В дома можно заходить – много объектов внутри

• У домов есть двери и окна – в результате ничего не отсекается

• Решение: “заколотить” дома, поставить заборы, разнести области по высоте

Page 13: Postal 3 Technical Postmortem

Проблема: одноэтажная Америка (2)

Page 14: Postal 3 Technical Postmortem

Проблема: параллельное редактирование уровня

• Над уровнем одновременно нужно работать художнику и дизайнеру

• Исходник уровня хранится в одном большом файле

• Сложно разрешать конфликты

• Решение: дизайнер создает все объекты в своей отдельной группе

Page 15: Postal 3 Technical Postmortem

Проблема: ролики на движке

• В Source нет обычных катсцен, есть интерактивные

• Нет удобного редактора, все делается в FacePoser + Hammer

• Решение: записывать видео, монтировать и проигрывать как FMV

Page 16: Postal 3 Technical Postmortem

Сложно добавлять новые фичи

• You can paint it any color, so long as it's black (Henry Ford)

• На движке Source можно сделать любую игру, если эта игра – Half Life 2 (TM Studios)

• Пример: Player == Камера

• Пример: трейс сферы, а не боксов

Page 17: Postal 3 Technical Postmortem

Удобный экспортер из Maya

Page 18: Postal 3 Technical Postmortem

Скрипты

• В Source не было скриптового языка

• Может быть он и не нужен?

• Для AI точно нужен!

Page 19: Postal 3 Technical Postmortem

Скрипты (2)behavior

{

name bh_mexico_citizen

inherited bh_citizen

states

{

st_init

{

group Neutral

patterns

{

pt_default

{

actions

{

TargetEntByName mexico_logic

TargetToMem msGP

ExecutePattern bh_citizen:st_init_male.pt_default

SetAreaGroup AG_DEFAULT:walkable,AG_town

}

}

}

}

mis_ds_champ{ group Neutral patterns { pt_default { actions { Block begin,execute IfAttr "npc_startup == 1 CallState ut_startup" TargetPlayer 1 TargetToMem msLEADER State an_friend Block end } } }}

Page 20: Postal 3 Technical Postmortem

Много разных NPC

• Есть несколько основных моделей NPC

• В модель входит несколько геометрий головы, тела, причесок (бодигруппы)

• На все эти геометрии накладываются разные текстурные наборы (скины)

Page 21: Postal 3 Technical Postmortem

Много разных NPC (2)

• В слоты можно одевать внешние модели: шляпы, часы, сумки и т.п. (болтоны)

• Художники сами задают комбинации бодигрупп, скинов и болтонов (префаб)

• Пример: #prefab1 = #head1 #body5 #skin2 #glasses1 #watches3 #hair4

Page 22: Postal 3 Technical Postmortem

Много разных NPC (3)

Page 23: Postal 3 Technical Postmortem

Много разных NPC (4)

Page 24: Postal 3 Technical Postmortem

Расчлененка

• Для конечности создается рэгдолл с точно такой же моделью

• У конечности обнуляются все кости выше места отрыва, чтобы скрыть

• У персонажа обнуляются все кости ниже места отрыва

• Места отрыва прикрываются моделями мяса и эффектами крови

Page 25: Postal 3 Technical Postmortem

Расчлененка (2)

Page 26: Postal 3 Technical Postmortem

Прятанье за препятствиями

• Динамически определяются места где можно прятаться

• Трейсятся 3 бокса на разной высоте и определяется можно ли туда спрятаться

• Для NPC пришлось сделать генерацию точек на углах

• Анимации за препятствием для левой стороны отзеркалены с правой

Page 27: Postal 3 Technical Postmortem

Прятанье за препятствиями (2)

Page 28: Postal 3 Technical Postmortem

Жидкости и огонь

• Вся логика на сервере, отрисовка – на клиенте

• На сервере – ячейки регулярной сетки

• На клиенте – декали

• Синхронизация сервера и клиента с помощью событий

Page 29: Postal 3 Technical Postmortem

Жидкости и огонь (2)

Page 30: Postal 3 Technical Postmortem

Еще мы добавили

• Сигвеи, танк• Кошек, собак, носорогов, обезьян• Навмеш и расхождение толпы• Поднимание и кидание предметов• Много экзотических видов оружия• Разные разрушаемые объекты• Деревья, гирлянды и т.п.• Ткани (NVIDIA APEX)

Page 31: Postal 3 Technical Postmortem

Сервера

1. Основной репозиторий

2. Build, Wiki, BugTracker/TaskTracker, Jabber

3. Backup

• На многих машинах запущены клиенты для распределенной компиляции уровней и шейдеров

Page 32: Postal 3 Technical Postmortem

Вопросы?

[email protected] Скачать слайды

@const_int

http://akella.com/forum

http://postal3.ru

http://trashmasters.ru

@trashmasterzzz http://bit.ly/mr9Xgr