Процедурная генерация — интереснейшая тема, с какой стороны ни посмотри. Мы с эргами решили сосредоточиться на точке зрения игроков в MMO.
Было бы странно и обидно, если бы такая интересная технология обошла наш жанр стороной. Тем более, что в MMO процедурная генерация уже применяется, пускай и не так активно, как в одиночных играх. Здесь есть свои объективные сложности. Но разве нашему жанру стоит бояться трудностей? Достаточно их проанализировать, учесть возможные риски и ждать от будущего процедурной генерации в MMO действительно больших перспектив.
Читать лонгрид →
Было бы странно и обидно, если бы такая интересная технология обошла наш жанр стороной. Тем более, что в MMO процедурная генерация уже применяется, пускай и не так активно, как в одиночных играх. Здесь есть свои объективные сложности. Но разве нашему жанру стоит бояться трудностей? Достаточно их проанализировать, учесть возможные риски и ждать от будущего процедурной генерации в MMO действительно больших перспектив.
Читать лонгрид →
21 комментарий
Очень понравилась идея процедурной генерации поколений монстров. Сегодня вы на споте в составе без танка, а завтра монстры адаптировались, стали бить больнее — и вот вам уже нужен другой состав, с танком. Людям тоже придётся адаптироваться. Собирать другую группу. И так — бесконечно. Отличный мотиватор для взаимодействия людей.
Это может немного отпугнуть любителей конст, потому что менять состав консты постоянно сложно, но и такие игроки смогут выкручиваться. Например, им придется менять споты, подбирая такие, на которых их «сетап» будет оптимальным или хотя бы жизнеспособным.
А вот идея процедурной генерации одного и того же мира на разных шардах мне, наверно, не по душе. Я сразу вспомнил любимые «Хроники Амбера», где существовало бесконечное число миров-отражений, по которым члены королевской семьи Амбера могли путешествовать, с одной стороны, «создавая» эти миры на ходу, с другой — выбирая из бесконечного числа элементов мира. В романе «Ружья Авалона» главный герой (Корвин) искал мир, в котором когда-то долго жил — Авалон. Однако его версия Авалона была разрушена, и он нашёл похожий мир — почти такой же, но с мелкими различиями. Тут шпиль башни немного другой, здесь та самая излучина реки. И Корвин это невольно ощущал, это как заноза — разница, кажется, невелика, но чувствуешь, что что-то не то.
Да, я вряд ли буду менять шарды и серверы, а просто буду обитать в своём мире. Но какой-то жадный гном внутри меня будет постоянно думать: «А что, если моя версия мира хуже какой-то ещё? Вдруг, на соседнем шарде красивее и интереснее?» При этом я не смогу, как Корвин, бесконечно путешествовать по разным версиям мира, выбирая ту, что мне по душе.
Тоже думал об этом соблазне, и опасаюсь, не подстегнёт ли такой подход игроков ещё больше желать «новых серверов» хотя бы ради генерации нового мира и зуда исследовать его различия (что, как известно, длится недолго). Окончательного ответа у меня нет. Но, мне кажется, это, как минимум, направление, в котором может быть интересное развитие. Потому что раньше ведь о таком никто не думал из-за технических ограничений.
Впрочем, тем интереснее будет наблюдать за тем, как все это в недалеком будущем будет реализовано. Как изменятся игры. Как изменятся ММО-игры. Как люди к этим изменениям адаптируются.
Очень зацепил блок про противостояние с обратной связью, мысль о его перспективах утащила меня далеко на долго.
Процедурная генерация – это не плохо. Некачественный или незаконченный генератор – вот настоящая проблема.
NMS на самом деле сама себя убивает своей бескрайностью. Даже при наличии общего для всех сервера, всегда будет возможность улететь туда, где тебя никто и никогда не найдет. При таком раскладе игра ничем не отличается от off-line. А если нет игроков, кооперации и противостояния, то это уже не так интересно.
Меня привлекли миры NMS, но оттолкнуло их количество. Дело не в том, что в них «нет души». Дело не в том, что их многообразие ограничено. Я просто не в состоянии исследовать сколь-нибудь значимую их часть, и это разочаровывает.
Процедурная генерация – однозначно да.
Бесконечные или почти бесконечные миры – точно нет.
Мир без рестартов — я за такой мир.
Создание временных зон с чем-то нужным и интересным — альтернатива рестартам.
Старение, запустение и исчезновение построек игрока при его отсутствии — тоже альтернатива рестартам.
Недавно в рамках своего проекта сделал генератор спиралевидных галактик по сиду. Это не совсем процедурная генерация, потому что потом эта вселенная записалась в SQL, т.к. она не слишком велика. Сначала я хотел ее генерировать «на лету» и не писать в базу, но тогда пришлось бы отдать алгоритм и seed клиенту, что создаёт возможность получения полной копии. Нельзя давать клиенту то, что ему знать не положено. Генерация на стороне сервера – это решение проблемы, но тут уже приходится выбирать что будет менее затратно – генерировать каждый раз или сохранить единожды. Я применяю достаточно простой алгоритм, использующий модификацию нормального распределения в качестве простого переключателя «да-нет» вместе с генератором чисел. В нейронных сетях нечто подобное делается на функции активации. Если кому интересно могу дать ссылку на Git с простейшим тестовым примером на javascript. Но, когда я занялся генерацией размера и светимости звезд, количества и размера планет, то пришел к тому, что продумывать придется все и вся, чтобы потом не получить совершенно иной мир. Так или иначе я разбил генерацию на модули. Изменения каждого из них влияет на все зависимые. Так наличие или отсутствие звезды по координатам определяется сначала в зависимости от удалённости от центра галактики, а потом уже от удаленности от ближайшей спирали. Для контрольного числа используются относительные координаты звезды. Затем определяется светимость звезды по алгоритму близкому к нормальному распределению звезд главной последовательности. На базе светимости из предыдущих данных определяется размер. Из размера и предыдущих данных количество планет и т.д.
Все это чертовски интересно, но терпит ошибок и переделок.
От себя могу добавить, что процедурная генерация сейчас используется, пожалуй, во всех крупных студиях. Особенно там, где делают open-world игры. Ландшафт генерируется процедурно. Камни, трава, деревья и скалы расставляются процедурно, под руководством художника. Здания тоже собираются процедурно из модулей. В общем, как минимум в области 3д моделирования всё точно идёт в сторону процедурной генерации.
На ночь смотреть не рекомендуется. Там лица… Они смотрят… Им что-то надо…
Но за статью огромное спасибо, очень интересно, мотивирует на погружение в тему. Я для изучения начал с википедии, но там очень обще, поэтому нашёл эту статью (а потом снова вернулся к википедии, чтобы убедиться, не заблудился ли я в деталях).
Это называется алгоритмом Diamond-Square. Шум там нужен чтобы создавать реки и горы, чтобы сеять породу, чтобы создавать пещеры. Им даже можно деревни строить.
Делается это так.
DS размечает только углы более разреженной сетки локации и формирует примерные очертания мира. Далее эти примерные очертания надо сгладить чтобы локация выглядела максимально естественно.
Вот чтобы сгладить работу DS, можно применять или экстраполяцию сплайнами (их 6 штук, минимум третьего порядка) с одновременной триангуляцией в барицентрической системе координат ячейки разреженной сетки, а можно на эту ячейку наложить шум Перлина с параметрами начального отклонения из алгоритма DS. Сплайны будут выглядеть красиво и плавно, а шум Перлина — естественно. Оба подхода можно даже комбинировать, задействовав шум на кривой поверхности из сплайнов.
Экстраполяция сплайнами на слух выглядит сложно, но когда ты представишь себе 4 треугольника внутри квадратной ячейки, образованные сплайнами и формирующие барицентрическую систему координат, все сразу проясняется и становится проще.