Процедурная генерация — интереснейшая тема, с какой стороны ни посмотри. Мы с эргами решили сосредоточиться на точке зрения игроков в MMO.

Было бы странно и обидно, если бы такая интересная технология обошла наш жанр стороной. Тем более, что в MMO процедурная генерация уже применяется, пускай и не так активно, как в одиночных играх. Здесь есть свои объективные сложности. Но разве нашему жанру стоит бояться трудностей? Достаточно их проанализировать, учесть возможные риски и ждать от будущего процедурной генерации в MMO действительно больших перспектив.

Читать лонгрид →

21 комментарий

avatar
Жалко, что про Nemesis нету даже маленького абзаца, даже малюсенького упоминания, ну вот *сдвигает пальцы* такоо-го.
  • +2
avatar
Нууу… понимаешь, мне как раз в сторону интерактивностей с NPC не сильно хотелось идти, как и в сторону процедурно-генерируемых квестов. Потому что в этом случае грань между одиночной игрой и MMO стирается. Хотя в контексте противостояния можно было бы упомянуть. Возможно, ты прав. :) Но, опять же, там, по-моему, основной упор всё же на то, что игрок помнит этого противника. Персональный уровень.
  • +1
avatar
По мне, так дьявол кроется в деталях. Генератор NPC нам создаст NPC, а Nemesis даст им характер. Три — Пять черт придаст глубину неигровым персонажам. Она применима вообще ко всему. И к монстрам — убегающий после неудачного рейда гоблин возвращается возмужавший, с большим отрядом, а если еще и группа та же, так еще и скажет что-то вроде- «Я вас век помнить буду! Староста деревни с чертой „жадность“ жмется и не дает полной цены ни за товар, и при сдаче квеста деньгу зажилит, а вот хоромы у него загляденье и добра всякого по сундукам припрятано. То есть такая штука вполне может оживить мир, заставить его шевелиться. А то даже в AOC — улучшили узел — приходят а узел уже улучшен в пять секунд. Я наверно придираюсь, но где работа? Где товарищи с досками которые несут на стройку? Почему все построилось мгновенно? Хотя это можно было визуально растянуть, а игроки могут помогать и в процессе стройки.
  • +1
avatar
Классная статья.

Очень понравилась идея процедурной генерации поколений монстров. Сегодня вы на споте в составе без танка, а завтра монстры адаптировались, стали бить больнее — и вот вам уже нужен другой состав, с танком. Людям тоже придётся адаптироваться. Собирать другую группу. И так — бесконечно. Отличный мотиватор для взаимодействия людей.

Это может немного отпугнуть любителей конст, потому что менять состав консты постоянно сложно, но и такие игроки смогут выкручиваться. Например, им придется менять споты, подбирая такие, на которых их «сетап» будет оптимальным или хотя бы жизнеспособным.

А вот идея процедурной генерации одного и того же мира на разных шардах мне, наверно, не по душе. Я сразу вспомнил любимые «Хроники Амбера», где существовало бесконечное число миров-отражений, по которым члены королевской семьи Амбера могли путешествовать, с одной стороны, «создавая» эти миры на ходу, с другой — выбирая из бесконечного числа элементов мира. В романе «Ружья Авалона» главный герой (Корвин) искал мир, в котором когда-то долго жил — Авалон. Однако его версия Авалона была разрушена, и он нашёл похожий мир — почти такой же, но с мелкими различиями. Тут шпиль башни немного другой, здесь та самая излучина реки. И Корвин это невольно ощущал, это как заноза — разница, кажется, невелика, но чувствуешь, что что-то не то.

Да, я вряд ли буду менять шарды и серверы, а просто буду обитать в своём мире. Но какой-то жадный гном внутри меня будет постоянно думать: «А что, если моя версия мира хуже какой-то ещё? Вдруг, на соседнем шарде красивее и интереснее?» При этом я не смогу, как Корвин, бесконечно путешествовать по разным версиям мира, выбирая ту, что мне по душе.
  • +4
avatar
Но какой-то жадный гном внутри меня будет постоянно думать: «А что, если моя версия мира хуже какой-то ещё? Вдруг, на соседнем шарде красивее и интереснее?»

Тоже думал об этом соблазне, и опасаюсь, не подстегнёт ли такой подход игроков ещё больше желать «новых серверов» хотя бы ради генерации нового мира и зуда исследовать его различия (что, как известно, длится недолго). Окончательного ответа у меня нет. Но, мне кажется, это, как минимум, направление, в котором может быть интересное развитие. Потому что раньше ведь о таком никто не думал из-за технических ограничений.
  • +1
avatar
С точки зрения исследования звучит, конечно, очень интересно и привлекательно. И оптимист-романтик, который живёт где-то внутри меня вместе с жадным гномом, хочет верить, что я немного поброжу по мирам, выберу тот, что западет мне в душу и осяду там. Но потенциальных проблем у этого действительно много. Кто-то не сможет остановиться и будет скакать по мирам постоянно — игра из ММО превратится для человека в исследовательский сингл. У кого-то возникнет конфликт с друзьями — потому что одним понравится одна версия мира, а другим — другая. Кто-то будет испытывать постоянный дискомфорт из-за своеобразной зависти. А что, если идеального для меня мира просто не будет?

Впрочем, тем интереснее будет наблюдать за тем, как все это в недалеком будущем будет реализовано. Как изменятся игры. Как изменятся ММО-игры. Как люди к этим изменениям адаптируются.
  • 0
avatar
Прекрасные буквы, отдельное спасибо за Элиту.
Очень зацепил блок про противостояние с обратной связью, мысль о его перспективах утащила меня далеко на долго.
  • +4
avatar
Мне кажется, у процедурной генерации с обратной связью, то есть с анализом действий игроков и новой генерации на основе этого анализа, большой потенциал. И его может раскрыть именно MMO, потому что здесь придётся работать с массой действий, то есть со статистикой.
  • +1
avatar
Для меня эта идея оказалась самой вдохновляющей в статье — настолько, что я пишу об этом снова. Казалось бы — идея лежит на поверхности, но я как-то о такой возможности не задумывался, а теперь, как и skyfish, только об этом и думаю! Чёрт побери, разработчики всего мира, услышьте и реализуйте это здесь и сейчас. Хочу! :)
  • +1
avatar
У такого варианта должен быть очень хороший баланс, иначе развившаяся окружающая среда просто задавит игроков. Предел развития у игроков есть, а у среды — практически нет.
  • 0
avatar
Насколько я помню, не так давно в Альбион добавили случайные подземелья
  • 0
avatar
Спасибо. Интересный экскурс.

Процедурная генерация – это не плохо. Некачественный или незаконченный генератор – вот настоящая проблема.

NMS на самом деле сама себя убивает своей бескрайностью. Даже при наличии общего для всех сервера, всегда будет возможность улететь туда, где тебя никто и никогда не найдет. При таком раскладе игра ничем не отличается от off-line. А если нет игроков, кооперации и противостояния, то это уже не так интересно.
Меня привлекли миры NMS, но оттолкнуло их количество. Дело не в том, что в них «нет души». Дело не в том, что их многообразие ограничено. Я просто не в состоянии исследовать сколь-нибудь значимую их часть, и это разочаровывает.

Процедурная генерация – однозначно да.
Бесконечные или почти бесконечные миры – точно нет.
Мир без рестартов — я за такой мир.
Создание временных зон с чем-то нужным и интересным — альтернатива рестартам.
Старение, запустение и исчезновение построек игрока при его отсутствии — тоже альтернатива рестартам.

Недавно в рамках своего проекта сделал генератор спиралевидных галактик по сиду. Это не совсем процедурная генерация, потому что потом эта вселенная записалась в SQL, т.к. она не слишком велика. Сначала я хотел ее генерировать «на лету» и не писать в базу, но тогда пришлось бы отдать алгоритм и seed клиенту, что создаёт возможность получения полной копии. Нельзя давать клиенту то, что ему знать не положено. Генерация на стороне сервера – это решение проблемы, но тут уже приходится выбирать что будет менее затратно – генерировать каждый раз или сохранить единожды. Я применяю достаточно простой алгоритм, использующий модификацию нормального распределения в качестве простого переключателя «да-нет» вместе с генератором чисел. В нейронных сетях нечто подобное делается на функции активации. Если кому интересно могу дать ссылку на Git с простейшим тестовым примером на javascript. Но, когда я занялся генерацией размера и светимости звезд, количества и размера планет, то пришел к тому, что продумывать придется все и вся, чтобы потом не получить совершенно иной мир. Так или иначе я разбил генерацию на модули. Изменения каждого из них влияет на все зависимые. Так наличие или отсутствие звезды по координатам определяется сначала в зависимости от удалённости от центра галактики, а потом уже от удаленности от ближайшей спирали. Для контрольного числа используются относительные координаты звезды. Затем определяется светимость звезды по алгоритму близкому к нормальному распределению звезд главной последовательности. На базе светимости из предыдущих данных определяется размер. Из размера и предыдущих данных количество планет и т.д.
Все это чертовски интересно, но терпит ошибок и переделок.
Комментарий отредактирован 2020-04-29 01:49:01 пользователем Svarog
  • +4
avatar
NMS на самом деле сама себя убивает своей бескрайностью. Даже при наличии общего для всех сервера, всегда будет возможность улететь туда, где тебя никто и никогда не найдет. При таком раскладе игра ничем не отличается от off-line. А если нет игроков, кооперации и противостояния, то это уже не так интересно.
Ну так не интересно — не улетай. Или для интереса нужно, чтобы не могли улететь те, кому это неинтересно?
  • 0
avatar
Отличная статья! Спасибо всем участвовавшим в ее написании.
От себя могу добавить, что процедурная генерация сейчас используется, пожалуй, во всех крупных студиях. Особенно там, где делают open-world игры. Ландшафт генерируется процедурно. Камни, трава, деревья и скалы расставляются процедурно, под руководством художника. Здания тоже собираются процедурно из модулей. В общем, как минимум в области 3д моделирования всё точно идёт в сторону процедурной генерации.
  • +1
avatar
Я из-за вас таки решился попробовать разобраться, что за перлиновые шумы (на все стороны равны?), с чем их едят. Пока что хватило только на то, чтобы сгенерировать трёхмерный шум, и анимировать его (рисуя послойно по z). Результат.

На ночь смотреть не рекомендуется. Там лица… Они смотрят… Им что-то надо

Но за статью огромное спасибо, очень интересно, мотивирует на погружение в тему. Я для изучения начал с википедии, но там очень обще, поэтому нашёл эту статью (а потом снова вернулся к википедии, чтобы убедиться, не заблудился ли я в деталях).
  • +1
avatar
Или вот (горшочек, не вари!). Уже примерно понятно, как начинают карты разных миров генерировать (хотя после этого к ним применяют ещё вагон алгоритмов, для доводки)
  • +1
avatar
Тогда давай я тебе вброшу направление, как именно использовать шум для генерации ландшафта. А то криповенькие лица получаются.
Это называется алгоритмом Diamond-Square. Шум там нужен чтобы создавать реки и горы, чтобы сеять породу, чтобы создавать пещеры. Им даже можно деревни строить.
  • +3
avatar
Круто, спасибо, буду читать (уже на следующей неделе :)). Это ж не поверх Перлина, а другой подход, больше подходящий для всяких эрозий и т.п.?
  • +1
avatar
Да, DS используется для разметки областей. Это шум Перлина используется уже после цикла работы DS.

Делается это так.
DS размечает только углы более разреженной сетки локации и формирует примерные очертания мира. Далее эти примерные очертания надо сгладить чтобы локация выглядела максимально естественно.

Вот чтобы сгладить работу DS, можно применять или экстраполяцию сплайнами (их 6 штук, минимум третьего порядка) с одновременной триангуляцией в барицентрической системе координат ячейки разреженной сетки, а можно на эту ячейку наложить шум Перлина с параметрами начального отклонения из алгоритма DS. Сплайны будут выглядеть красиво и плавно, а шум Перлина — естественно. Оба подхода можно даже комбинировать, задействовав шум на кривой поверхности из сплайнов.

Экстраполяция сплайнами на слух выглядит сложно, но когда ты представишь себе 4 треугольника внутри квадратной ячейки, образованные сплайнами и формирующие барицентрическую систему координат, все сразу проясняется и становится проще.
Комментарий отредактирован 2020-05-01 22:36:48 пользователем FrankStein
  • +4
avatar
Ох сколько тут всего учить! Интересно, спасибо :)
  • +1
avatar
Читая про продедурную генерацию локаций, я представил себе ArcheAge, в котором на западе и востоке первые пара локаций постоянны и созданы вручную, а на остальные периодически набегают монстры, и когда они побеждают — то старая локация уничтожается и вместо неё генерируется новая. Чем выше уровень локации — тем чаще атаки и сильнее монстры. А на севере локации перегенерируются после проигрыша в ПвП-осаде.
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.