Продолжительность 23:02
16+
Воспроизвести
Видео

Постмортем Distrust: процедурная генерация — адское приключение

Владимир Ковтун
Ведущий геймдизайнер в Alawar
  • Видео
  • Тезисы
  • Видео
DevGAMM Minsk 2017
17 ноября 2017, Минск, Беларусь
DevGAMM Minsk 2017
Запросить Q&A
Видеозапись
Постмортем Distrust: процедурная генерация — адское приключение
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
В избранное
867
Мне понравилось 0
Мне не понравилось 0
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
  • Описание
  • Расшифровка
  • Обсуждение

О спикере

Владимир Ковтун
Ведущий геймдизайнер в Alawar

О докладе

Большую часть времени разработки Distrust мы потратили на создание генерируемого мира. Это было сложно. Очень. Я хочу рассказать о том, через что мы прошли и поделиться опытом с теми, кто только собирается окунуться в удивительный мир процедурной генерации.

Поделиться

Я хочу представить Владимира кофту она очень талантливого дизайнера и продюсера большим опытом Я знаю мы не первый год у него есть чему поучиться и получить фидбек А сегодня он пришел рассказать свой кейс о создании игры с нуля вот до релиза у него зелёный тебя по приложению наверное не скажет да спасибо большое за представление Если у вас есть друзья в мессенджерах которые тоже надо в гамме зовите их потому что нас очень мало Здравствуйте ещё раз да

всем привет откуда я Я работаю в компании Alawar в команде cheerleaders конкретной от Alawar Premium это тот сегмент компании который не делает ферма но зато делает мидкор для Стима мы сделали beholder А потом мы сделали distrotest в общем-то вот всё хорошо что мы сделали Мы Траст это рогалик это Survival однопользовательский проект который продаётся на Стиме про полярную базу Полярников которым нужно выбраться с базы желательно живыми но необязательно

про что я буду рассказывать я буду рассказывать про наш опыт создания процедурный генерируемого мира а для проекта distrotest кому это может быть полезно Это может быть полезно всем кто в своей игре задумывается над тем чтобы сделать что-то процедурно генерируемая что есть в страсти что он из себя представляет это изометрические рогалик где пользователь управляет несколькими нашими сразу то есть это игра с Мульти контролем в реалтайме он представляет из себя базу полярную которая процедурный генерируется база делится на закрытых зон в каждой зоне пользователю

предстоит столкнуться с каким-то квестом то есть выполнить какие-то задания для того чтобы проход в следующую зону открылся и таким образом он мог прогрессировать игре Release No Steam состоялся в сентябре 2017 года то есть вот только только только всё хорошо у нас 80% положительных отзывов есть пользователи любят наш проект уже перевели его самостоятельно на корейский язык им зачем-то очень нужны были корейские иероглифы в игре вот а то есть основной момент который есть в страсти так как это рогалик это как это сурвайвал это играбельность Поэтому в игре

присутствует порядка 20 различных квестов для зон присутствовать 15 разных персонажей с разными мерками с разными ставками это всё Сделано для того чтобы пользователь мог проходить проект по несколько раз и получать при этом разные Experience Поэтому нам показалось что процедурная генерация мира Это довольно Разумная идея и мы решили сделать в процедурную генерацию которая бы позволяла получать вот такую картинку на выходе То есть все помещения все здания форма каждой зоны квесты

каждый предмет который вы видите на этой картинке это всё расставлено автоматически без участия level дизайнеров по большому счёту мы ставили себе задачу с ресурсы на производстве большого количества контента для создания уровней и всё это заменить на образованный алгоритм который при запуске игры за 20 с небольшим секунд создает базу из пяти зон суммарно из 320 в среднем домов в каждом доме 5 комнат В каждой комнате в среднем по 10 предметов в общем это довольно много контента Как как пришлось бы всё делать руками

придумали мы Довольно простой план как это всё сделать но конечно же всё пошло не так возникли очень большие сложности с заполнением комнат с тем как предмет расставляются в комнатах оказывается этому уже поняли после того как начали делать всё оказывается что если целые исследовательские институты Например у компании IKEA который занимается как раз этой же проблемой то есть проблемы того как алгоритмы научить генерировать по сути интерьер комнаты Вот они этим занимаются десятки лет а у нас на производство проекта

был год вот так что мы решили думать сделать всё проще интуитивные для системы и быстрее отдельно хочется сказать что уже Спустя год и производство проекта выпуск я могу точно сказать что проще быстрее было сделать руками это Это первый комментарий для тех кто хочет что-то процедурный генерировать в своей игре одумайтесь хорошо я расскажу вам как это сделали мы и если вы все-таки решитесь и опыт будет Вам полезен вероятно вы сможете его повторить вот в итоге это всё конечно же выглядит так и комната заполняются и всё с ними Хорошо

что есть основополагающей в этой системе элемент это бюджет и как назло бюджеты содержит в себе Все предметы которые база сможет всегда принять с слева направо У нас есть обычные предметы это то что наш может получить в инвентарь используемые предметы У нас есть элементы элементы интерьера то что будет поставлена в мир что ещё есть вот подсказка не скроллится к сожалению выбирается форма зданий То есть когда генерал работать она работает по принципу матрешки

запускается процесс генератор знает что ему нужно сгенерировать базу база состоит из 5 сезон в каждой зоне есть Квест Квест выбрался Случайный в зависимости от Квеста генератор узнаёт сколько и каких зданий ему нужно расставить в зоне внутри каждого здания он складывать те предметы которые ему подсказывают система в зависимости от автобаланса но То есть если квест пришёл зону сложный значит и Luhta надо накидать побольше чтобы время выживаемости игроков было равнозначным Вот

вот так это всё выглядит в самой игре То есть каждый зелёный брат Это по сути здания с Ивану зоны обработки у генератора есть ещё Помимо того чтобы заполнить сами комнаты есть ещё задача заполнения пространство вокруг дома то есть там он тоже расставляет по определённым правилам предметы которые у него заданы в бюджетах внутри каждого здания есть у каждой комнаты есть Tag которая определяет её внешнее оформление стены пол и создает атмосферу потому что главная задача для процедурной генерации помещений Конечно же правдоподобность если помещение будет

выглядеть неправдоподобно или если она будет содержать в себе предметы которые там нелогично расположены например поставить на кухне что-то унитаза или наоборот это конечно же нелогично Это сбивает у игрока ощущение от игры и он её с большой вероятностью будет покидать вот таким образом генератор знает типы каждой комнаты каждого здания и знает что нужно из бюджетов Туда положить вот здесь видно что на каждом здании у нас рисуется значки которые скачать типизацию здание и пользователь заходя в игру может понять что вот у меня есть столовая

и там я вероятно смогу найти еду для отряда вот здесь у меня есть спальни там невероятно смогу на кровать где они смогут отдохнуть и поспать пробы пробы это второй важный элемент в этой системе потому что именно они оказываются внутри зданий именно внутри пропав Оказывается тот который персонажи получают Вот это ну грубо говоря наверное 10 часть про Paw которую мы использовали вот отдельно следует проговорить про квесты квест заезжает в каждую зону содержа в себе предметы которые необходимы для его выполнения Ну то есть перед пользователем например вот здесь ставится задача есть грейдер который

стоит около сугроба внутри сугробам за ворота через которые нужно выходить Поэтому нужно завести грейдер расчистить снег и выйти мы подходим к райдеру видим что у него разряжен аккумулятор из-за того что в мире холод Он давно стоит уже без людей мы идём в мир и находим в на складе генератор как предмет это вот то что с голубой окантовкой понимаем что это аккумулятор тоже разряжен мы находим стол который стоит в мире где можно зарядить этот аккумулятор чтобы стал заработал мы должны завести генератор в этом же здании чтобы дать электричество

подождать 3 минуты снять аккумуляторы унести его в грейдер грейдер поехал ворота расчищено Мы молодцы Вот отдельный механизм заполнения так называемых лайтовых пропав это пропасть которых можно получить какой-то loud есть перечень предметов они слева в каждом предмете указано какими-то остатками он может добываться в каждом углу новом профиле указан и тоски которая может навсегда принимать таким образом система видит что нужно положить в мир аптечку Она говорит аптечка может выдаваться из

вот этих шести досок кладёт ли в случайную получается тоска с аптечкой внутри дальше тоска Спрашивает какой прок я могу вставать получается список пропав выбирает его или случайным образом или по каким-то правилам и получается цельный компонент системы лудовой проб с тоской внутри с тоски матрёшек в конечном итоге мы получаем три категории прав которые в принципе могут быть поставлены в комнате слева направо это лутовые проб и они выглядят понятным для игрока образом это какие-то шкафы серванты полки всё что можно

блуждать в центре это так называемые серые пробы или пробую оформления которые не несут никакого функционального в себя элементы но зато украшают помещение И последнее это утилитарное пробуй пробуй которая позволяет игрокам совершать какие-то действия например генератора или печки или стол для аккумулятора или этом Стол на котором можно собрать себе новые инструменты это всё называем утилитарные пробы вот-вот они в мире Как выглядят нас часто спрашивают Зачем нужны синусы пробы

без них комнаты выглядит так а с ними вот так вот то есть по большому счёту в каждой комнате есть порядка 15% пропуск которыми вообще можно взаимодействовать в противном случае если бы их было больше либо заходил в комнату у него разрывался бы мозг от того что точек интеракции порядка 11 Поэтому нам нужно синаре проб И тем более они красивые каждый проб ставится в мир не просто так него есть три очень важных элемента Вот то чем обведено это внутренний коврик мы его называем то что снаружи вот этот кейс это внешне коврик они нужны для того чтобы проб и

не контактировали с друг с другом во время установки а но при этом то есть внутренний коврик это зона в которую никто не заходить не персонажи ни другие проб и внешне коврик это зона в которой может заходить персонаж но не могут заходить другие пробы кроме сыновей которые расположены на полу допустим ковёр положился на него можно сверху всё и есть направляющий элемент который во-первых обозначает точку интеракции ставкой которая на утилитарным прописана а во-вторых позволяет под правильному развернуть персонажи чтобы анимация поиграла с красиво

Вот и у каждого из Ну порядка, там 60, 70 пропав есть ряд настроек, каждый из которых настраивается руками. Ну если сверху вниз то они в принципе всё понятно они интуитивно есть максимум Это количество ограничивающая то есть мы не можем поставить два умывальника в кухне будет нелогично Если бы не было этого параметра Та комната там походило бы на выставку значит в мебельном магазине вот есть параметр Максим это ограничение на количество зданий в целом есть Максим сон Если это какое-то прямо ну очень-очень редкие утилитарный проб и нужно по

балансу ограничить попадание в этот проб он ставится всего 1 на 10 домов в зоне его еще нужно сначала будет найти есть тоски и татарский которые выполняются с этого проппа ну модель это понятно это визуально пропозиция не рвал или центр комнаты или угол она диктует генератору куда можно его в принципе поставить кровать стоящую у стены это нормально а допустим уголок стоящий у стены это уже не очень нормально но если мы не говорим о современном дизайне помещений вот есть он вызывал волос то есть в игре есть её можно

поворачивать С шагом в 90 градусов но вот её стандартное положение то с которым она попадает в игру не все игроки вращают камерой создает такую как Везде бывал То есть это стена которая находится от камеры дальше всего iprog можно это галочка располагать только у этих стен допустим если это какой-то квестовые проб это полезно он будет в драку не надо будет вращать камеру вот ну работает сегодня вчера это галочка который добавляет живости если все предметы ставятся сосна пингом в 90 градусов то всё помещение выглядит дикая искусственным Ну то есть в

реальном мире все предметы чуть-чуть подведены и здесь нурата инстеп максимальный минимальный угол на который генератор может рассчитывать точно ставить шкаф и может на 2 градуса его повернуть в любую сторону куда ему захочется рутекс это в Какое помещение ему можно встать то есть кровать встаёт только в спальне давать не может стоять на кухне и есть restriction и это внутренняя система сортировки пропав То есть если кровать поставилась в комнату и есть ещё кровать там текстура б текстура це и Он попытается её

туда поставить в Независимости от всех остальных причин не установки в первую очередь она не поставит потому что там уже есть кровать которая говорит поедет но я тут есть а ты уже тут не будешь вот в заключении Какие еще виды генерации есть чтобы Как говорится который проще чем то что сделали мы есть модель из донт старва это Когда генерируется весь мир генерируется все пробы все положения всех пропавших в нём но ставят помещений поэтому им гораздо проще просто пробки у которых нет стен

и их ничто не ограничивает расставить довольно проста То есть все правила нашей системы подойдут у нас Как заполняется ул но он выглядит естественно и выглядит красиво Без каких-то особых усилий и там многочасовой настройки есть формат генерации мира издательства Когда уровень собирается из паттернов То придёт собирается какой-то кусок и потом из этих кусков по правилам стыковки как в пазлах детских сыграть целый уровень каждый раз поэтому чуть-чуть разные но зато у игрока есть всегда Вот это ощущение скинула потому что он знает как каждый отдельно этот кусок проходить и есть

формат генерации мира из Hotline Miami так называемый формат точек интереса карте задаются точки А для каждой точки задается бюджет предметов которые там могут появиться с разлиновкой по вероятности из Ну взаимосвязи с выстриженными друг на друга Это самый минимальный генерация как принято считать но даже он даёт Но большую довелось геймплея пользователь каждый раз попадая в один и тот же уровень который он же запомнил чисто геометрически у него на рефлексах но у него нет гарантированного оружия в одних и тех же спотах она может ли отсутствовать или быть заменено другим

Так Стоит ли делать процедурную генерацию да Если вы делаете проект который рассчитывает на Большой replayability стоит потому что с фиксированными уровнями либо их потребуется сделать очень много и выбирая пишите система это и всё будет плохо либо Придётся делать какую-то генерацию поэтому я бы советовал делать генерацию но Обязательно подумайте продуктовые риски когда у вас будет какая-то модель генерации в голове и подумайте про такое Импакт она внесет в сам продукт какой целью она ему даст иногда генерации которые люди выбирают являются избыточными

Ну то есть они не нужны были проекту А времени на них потрачена уйма и всё в таком духе Так что если есть replayability если вы видите в этом функциональную нужду делайте процедурную генерацию если нет лучше собирать руками а вопрос Спасибо за доклад ряд коротких вопросов первый наверное самый важный На каком этапе захотелось всё это сжечь когда я понял что нужно сейчас взять и вот матрёшку состоящую из нута и пропав итогов и прочего настроить обратном порядке

Это у меня заняло порядка наверное 3 или 4 недель просто целыми днями сидеть щелкать по пробкам по параметрам и Ну в общем да я себя возненавидела на это было моё решение не собирать руками я такой типа ну мы сейчас запил Всё короче мне не Придётся сидеть 3 недели собирать руками запили автовопрос Я так понимаю враги летающие на Мале всякие они тоже генерируются таким образом они генерируются да у них они зависят от триггеров системы самочувствие персонажи от времени от положения героев

Но если им хорошо будет больше врагов Да если ты хорошо играешь У тебя больше врагов а если плохо то Ну да вы этого не слышит а понятно хорошо спасибо и третий вопрос по сути вы создали такую свою систему генерации мира вы будете как-то её можно использовать там контакт в других проектах либо коммерциализировать допустим да и возможно точно использовать Если в дальнейшем Мы в команде будем делать продукты Ну связано с генерацией мы её будем использовать потому что нам уже не надо будет тратить месяцы на его производство и настройку

это да А чтобы там её делать каким-то отдельным плагином Ну нет но зачем Спасибо пожалуйста. пампарампампам человек хочет Вопрос такой ты рассказал процедурная генерация уровней А каким образом ты настраивал квесты Там какой-то отдельный редактор Как вообще у тебя построена была система настройки квест но есть квесты как перечень квесты за Донат каждой зоны перечнем Ну то есть это просто список типа шагов Да Ну смотри В первой зоне не может быть сложных квестов потому что она вступительная 5 извини Может быть простых потом она финальная при этом квесты имеют ссылки

друг на друга и типа ну есть квест на то чтобы собрать в зоне карточки чтобы открыть двери есть сказать чтобы найти ключи они очень похожи по механиком поэтому они друг друга исключают из базы когда оно генерируется ну и лут которая котёнка у вас там привязан он закон внутри квсз является повод этим пробкам это очень сложно взаимосвязанных систем так и весьма да Спасибо пожалуйста. Ну ты очень круто всё рассказал звучит так как быть в этой победил но Наверняка есть то что ты не сказала ещё хотел бы в этом изменить есть ли такие

вещи чтобы я хотел в этой системе изменить я можно сделать проще вот вся её верхнеуровневая часть которая работает в плане расстановки зданий генерации формы самой зоны и выбора квестов она просто я то есть там нет ничего сложного точки зрения программирования ни с точки зрения настройки но вот комнаты можно было бы использовать модель с ДЦП можно было бы собирать руками комнаты Это довольно быстро они были бы более правдоподобные более красивое но при этом времени было меньше то есть новое здание собирал просто из пресетов в комнату а при этом

внутри в те которые в этой комнате есть он раскладывал тоже по алгоритму То есть я бы исключил тот шаг где генератор сам берёт каждый шкафчик ставит его двигатель вращает ты бы задал шаблоны комнату да да спасибо пожалуйста нас еще есть вопросы Так давайте будешь менты.

Комментарии для сайта Cackle

Купить этот доклад

Доступ к видеозаписи доклада «Постмортем Distrust: процедурная генерация — адское приключение»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Доступ ко всем записям докладов мероприятия

Доступ к записям всех докладов «DevGAMM Minsk 2017»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Билет

Интересуетесь тематикой «Разработка и программирование»?

Возможно, вас заинтересуют видеозаписи с этого мероприятия

29 августа 2019
Москва
7
49
геймдев, игры, киберспорт, медиа, разрвлечения

Похожие доклады

Сергей Гимельрейх
Сооснователь в GDCuffs
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Вячеслав Бушуев
Инди-разработчик в ИТ
+ 3 докладчика
Андрей Мороз
Разработчик в Enkord Team
+ 3 докладчика
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Василий Сабиров
Ведущий аналитик в devtodev
+ 4 докладчика
Алиса Сподынейко
Ведущий гейм-дизайнер в Creative Mobile Games
+ 4 докладчика
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Купить это видео

Видеозапись

Доступ к видеозаписи доклада «Постмортем Distrust: процедурная генерация — адское приключение»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Conference Cast

ConferenceCast.tv — архив видеозаписей докладов и конференций.
С этим сервисом вы можете найти интересные лекции специально для вас!

Conference Cast
1158 конференций
32530 докладчиков
14480 часов контента