Upload
konstantin-efimov
View
682
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Технический постмортем игры Postal 3. 14 Мая 2011, КРИ 2011
Citation preview
О докладчике
Константин Ефимов
• Закончил Московский Технический Университет Связи и Информатики
• Программист в компании Акелла, где за 7 лет успел поучаствовать в разработке проектов: «Головорезы: корсары XIX века», «Бой с тенью», «Бой с тенью 2», «Меченосец».
Начало
• На дворе был конец 2006-го года
• Заканчиваем текущий проект
• Нужно думать что делать дальше
• Предлагаем Running With Scissors совместно делать Postal 3
Под что делать?
• Произошла смена поколений игровых консолей
• Принципиально другое железо, поменялись технологии производства
• Отсутствие опыта производства под “next-gen”
• Выбор Xbox 360 как основной платформы
На чем делать?
• Развивать дальше существующий движок
• Разрабатывать новый с нуля
• Купить готовый и не париться
Выбор движка
• Движок за миллион
• Небольшие движки
• Source Engine
Первые ощущения от Source
• Очень долгая первоначальная загрузка
• Programmer Oriented Engine
• Клиент-серверная архитектура в однопользовательской игре
• В исходниках Source присутствуют сразу все игры Valve
• Олдскульный код. Никаких паттернов
• BaseEntity.h: 2500+ строк, 1000+ функций у класса
Проблема: вид от первого лица
• На улице планировался вид от третьего лица
• В помещениях вид от первого лица
• Проблема: предметы и двери выглядят по разному
Проблема: вид от первого лица (2)
Проблема: большойоткрытый мир
• Надо динамически подгружать части большого мира
• В Source есть подгрузка много чего, но только не уровней
• Решение: разбивать мир на много отдельных уровней
Проблема: большойоткрытый мир (2)
Проблема: одноэтажная Америка
• В дома можно заходить – много объектов внутри
• У домов есть двери и окна – в результате ничего не отсекается
• Решение: “заколотить” дома, поставить заборы, разнести области по высоте
Проблема: одноэтажная Америка (2)
Проблема: параллельное редактирование уровня
• Над уровнем одновременно нужно работать художнику и дизайнеру
• Исходник уровня хранится в одном большом файле
• Сложно разрешать конфликты
• Решение: дизайнер создает все объекты в своей отдельной группе
Проблема: ролики на движке
• В Source нет обычных катсцен, есть интерактивные
• Нет удобного редактора, все делается в FacePoser + Hammer
• Решение: записывать видео, монтировать и проигрывать как FMV
Сложно добавлять новые фичи
• You can paint it any color, so long as it's black (Henry Ford)
• На движке Source можно сделать любую игру, если эта игра – Half Life 2 (TM Studios)
• Пример: Player == Камера
• Пример: трейс сферы, а не боксов
Удобный экспортер из Maya
Скрипты
• В Source не было скриптового языка
• Может быть он и не нужен?
• Для AI точно нужен!
Скрипты (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 } } }}
Много разных NPC
• Есть несколько основных моделей NPC
• В модель входит несколько геометрий головы, тела, причесок (бодигруппы)
• На все эти геометрии накладываются разные текстурные наборы (скины)
Много разных NPC (2)
• В слоты можно одевать внешние модели: шляпы, часы, сумки и т.п. (болтоны)
• Художники сами задают комбинации бодигрупп, скинов и болтонов (префаб)
• Пример: #prefab1 = #head1 #body5 #skin2 #glasses1 #watches3 #hair4
Много разных NPC (3)
Много разных NPC (4)
Расчлененка
• Для конечности создается рэгдолл с точно такой же моделью
• У конечности обнуляются все кости выше места отрыва, чтобы скрыть
• У персонажа обнуляются все кости ниже места отрыва
• Места отрыва прикрываются моделями мяса и эффектами крови
Расчлененка (2)
Прятанье за препятствиями
• Динамически определяются места где можно прятаться
• Трейсятся 3 бокса на разной высоте и определяется можно ли туда спрятаться
• Для NPC пришлось сделать генерацию точек на углах
• Анимации за препятствием для левой стороны отзеркалены с правой
Прятанье за препятствиями (2)
Жидкости и огонь
• Вся логика на сервере, отрисовка – на клиенте
• На сервере – ячейки регулярной сетки
• На клиенте – декали
• Синхронизация сервера и клиента с помощью событий
Жидкости и огонь (2)
Еще мы добавили
• Сигвеи, танк• Кошек, собак, носорогов, обезьян• Навмеш и расхождение толпы• Поднимание и кидание предметов• Много экзотических видов оружия• Разные разрушаемые объекты• Деревья, гирлянды и т.п.• Ткани (NVIDIA APEX)
Сервера
1. Основной репозиторий
2. Build, Wiki, BugTracker/TaskTracker, Jabber
3. Backup
• На многих машинах запущены клиенты для распределенной компиляции уровней и шейдеров
Вопросы?
[email protected] Скачать слайды
@const_int
http://akella.com/forum
http://postal3.ru
http://trashmasters.ru
@trashmasterzzz http://bit.ly/mr9Xgr