Известно, что экосистемы более-менее хорошо себя чувствуют только до появления в виртуальном мире игроков. Действия живых людей, пришедших в игру «взять свое», никогда не отличались осторожностью или умеренностью. Мы – виртуальная саранча, не просто вторгающаяся в хрупкую экосистему, но уничтожающая ее под корень. Во всяком случае, так было во времена Ultima Online. С тех пор более-менее удачная реализация экосистемы виртуального мира была, насколько я знаю, только в Wakfu. Авторы Worlds Adrift решили провести свой собственный эксперимент. Что же, давайте их послушаем.
Всем привет!
Меня зовут Matkins, и на протяжении нескольких последних месяцев я разрабатывал искусственный интеллект для существ, которые будут населять Worlds Adrift. Эти существа — важная часть нашего мира. Не только потому что зачастую они будут представлять угрозу для игроков, но, что куда важнее, они сделают мир очаровательным местом, полным объектов для исследований и экспериментов.
Worlds Adrift – это большой, единый, цельный мир. И мы решили, что животные должны жить в соответствии с этими же установками. Каждое существо здесь – от рождения до своей смерти — постоянно существующая частичка жизни, элемент задуманной экосистемы. Он существует постоянно, независимо от того, есть ли вблизи игрок, или нет. Если существу нечем питаться, оно начинает голодать. Если популяция не воспроизводится, она рано или поздно вымрет. Ко всему прочему мы хотим, чтобы действия игроков влияли на эту хрупкую экосистему. Поэтому все, что вы делаете, исследуя летающие острова и собирая на них ресурсы, оказывает влияние на источники пищи местной фауны, их жилища и уклад жизни. Было бы здорово, если бы вы все это учитывали. А пока я объясню в общих чертах, как все это работает, по возможности избегая скучных технических деталей.
Навигация
Обычно искусственный интеллект мобов прокладывает свой путь, повинуясь специальному алгоритму. Такой алгоритм использует в качестве основы заранее просчитанные данные о том, какая часть поверхности пригодна для прохождения. Это называется «navmesh». На основе этих данных искусственный интеллект может понять, как ему добраться из точки «А» в точку «Б» как можно быстрее. Но так как в Worlds Adrift будет потенциально десятки тысяч летающих островов, созданных при помощи процедурной генерации, классическая система навигации, очевидно, для нас непригодна. Да и большинство наших существ в любом случае умеет летать. Что же выходит? Нам нужно как-то сгенерировать трехмерную карту навигации для них? Погодите секундочку. А это на самом деле необходимо?Почему наши существа вообще должны иметь некую непонятно откуда взявшуюся карту перемещений? И почему они должны двигаться из точки «А» в точку «Б» по самому короткому пути? Классическая система поиска пути действительно выглядит очень оптимизированной, но не слишком подходит в качестве модели поведения наших существ. Поэтому мы решили вернуться к основам и построили свою стратегию перемещения, которая выглядит более естественной и правдоподобной.
Если существо увидело нечто, что его заинтересовало, оно направится прямиком к объекту своего интереса, обходя препятствия, блокирующие путь. Такие как деревья, скалы, другие животные и так далее. Но если животное не видит то, что ему очень нужно, оно должно переключиться в режим поиска. Поэтому модель поведения существа может сильно отличаться: от беззаботно прогуливающегося создания до голодного или испуганного существа, которое стремится набрать высоту, чтобы видеть больше и легче обходить препятствия. В конце концов, животное может покинуть остров и полететь к следующему клочку тверди, если на этом острове оно не достигло своих целей. И если это приведет к смерти… что ж… так тому и быть.
Так. Что у нас тут есть? Превосходная симуляция безмозглого существа. Офигеть, дайте два!
Эм… ладно, постойте. Мы можем сделать его чуть умнее, добавив всего одну дополнительную систему. Мы можем наделить существо способностью возвращаться к тому, что оно видело прежде, но в тот момент не заинтересовалось. А теперь – другое дело. Назовем это «путь из хлебных крошек». Точно так же, как Гензель и Гретель, наши животные могут восстановить путь, по которому они передвигались, чтобы вернуться туда, где они были. Такой алгоритм может быть оптимизирован отбрасыванием тех «крошек», которые лежат между самой свежей и самой старой, находящейся в прямой видимости. И, конечно, если по дороге назад существо увидит что-то новое, что его заинтересует, оно отбросит все эти крошки и направится прямиком к объекту интереса. Животина с памятью – это, скажу я вам, куда более полноценное создание, способное вести себя значительно интереснее.
Поведение и побуждения
У существ есть множество моделей поведения, включая базовые: поиск пищи, сражение, отдых, прогулка и спаривание. У них также есть переменчивые побудители: голод, гнев, усталость, любопытство, либидо. Каждое существо в разный момент времени использует разную модель поведения, в зависимости от того, какое побуждение в нем одержало верх. Все это просчитывается у него в голове при помощи специфических коэффициентов.Значение коэффициента может существенно изменять приоритеты в выборе моделей поведения. Мы можем использовать это для создания различных видов животных: более агрессивных, пассивных, любопытных и так далее. Также такой подход оставляет нам пространство для добавления впоследствии новых побуждений или новых моделей поведения существующим животным.
Ага… что у нас дальше по плану?
Сейчас мы работаем над тремя разными существами. Они часть одной пищевой цепи. Будем двигаться снизу вверх: это травоядные жуки, агрессивные и всеядные манты, и наконец – великолепные небесные киты. Киты и Манты куда меньше привязаны к конкретному острову и могут путешествовать на существенно большие расстояния, чем жуки. Киты будут настолько большими, что игроки смогут прыгать на их спины (хотя мы пока не решили, это хорошая или плохая идея, с точки зрения кита). Каждый вид существ будет реагировать по-разному на появление игроков.Вы можете посмотреть пример поведения жуков в нашем коротком видео.
Ссылка на оригинал: www.worldsadrift.com/blog/creatures-of-worlds-adrift-a-beginners-guide/
14 комментариев
А вообще, можно же сделать несколько видов китов. И нейтральных, и тех, которые людей боятся, и агрессивных.
И вообще—больше существ, больше, и иерархии пошире, не только линейка из трёх градаций рыб, которые друг друга едят.
Вот если сделают «пузырчатые сервера» то да твой вариант легко реализвовать.
Если вариант как в еве — система — сервер, а тут остров — сервер, как тогда будут происходить переходы между серверами ?
Остается вариант — глобальные сервер, но опять же это большая нагрузка на серверную часть
В общем случае: бесшовность мира не запрещает обрабатывать разные его части на разных серверах. Да, это требует некоторых усилий, но в этом нет ничего невозможного.