Фауна летающих островов: руководство для новичка

Worlds Adrift: Фауна летающих островов: руководство для новичка
Известно, что экосистемы более-менее хорошо себя чувствуют только до появления в виртуальном мире игроков. Действия живых людей, пришедших в игру «взять свое», никогда не отличались осторожностью или умеренностью. Мы – виртуальная саранча, не просто вторгающаяся в хрупкую экосистему, но уничтожающая ее под корень. Во всяком случае, так было во времена Ultima Online. С тех пор более-менее удачная реализация экосистемы виртуального мира была, насколько я знаю, только в Wakfu. Авторы Worlds Adrift решили провести свой собственный эксперимент. Что же, давайте их послушаем.

Всем привет!

Меня зовут Matkins, и на протяжении нескольких последних месяцев я разрабатывал искусственный интеллект для существ, которые будут населять Worlds Adrift. Эти существа — важная часть нашего мира. Не только потому что зачастую они будут представлять угрозу для игроков, но, что куда важнее, они сделают мир очаровательным местом, полным объектов для исследований и экспериментов.

Worlds Adrift – это большой, единый, цельный мир. И мы решили, что животные должны жить в соответствии с этими же установками. Каждое существо здесь – от рождения до своей смерти — постоянно существующая частичка жизни, элемент задуманной экосистемы. Он существует постоянно, независимо от того, есть ли вблизи игрок, или нет. Если существу нечем питаться, оно начинает голодать. Если популяция не воспроизводится, она рано или поздно вымрет. Ко всему прочему мы хотим, чтобы действия игроков влияли на эту хрупкую экосистему. Поэтому все, что вы делаете, исследуя летающие острова и собирая на них ресурсы, оказывает влияние на источники пищи местной фауны, их жилища и уклад жизни. Было бы здорово, если бы вы все это учитывали. А пока я объясню в общих чертах, как все это работает, по возможности избегая скучных технических деталей.

Навигация
Обычно искусственный интеллект мобов прокладывает свой путь, повинуясь специальному алгоритму. Такой алгоритм использует в качестве основы заранее просчитанные данные о том, какая часть поверхности пригодна для прохождения. Это называется «navmesh». На основе этих данных искусственный интеллект может понять, как ему добраться из точки «А» в точку «Б» как можно быстрее. Но так как в Worlds Adrift будет потенциально десятки тысяч летающих островов, созданных при помощи процедурной генерации, классическая система навигации, очевидно, для нас непригодна. Да и большинство наших существ в любом случае умеет летать. Что же выходит? Нам нужно как-то сгенерировать трехмерную карту навигации для них? Погодите секундочку. А это на самом деле необходимо?

Worlds Adrift: Фауна летающих островов: руководство для новичка
Почему наши существа вообще должны иметь некую непонятно откуда взявшуюся карту перемещений? И почему они должны двигаться из точки «А» в точку «Б» по самому короткому пути? Классическая система поиска пути действительно выглядит очень оптимизированной, но не слишком подходит в качестве модели поведения наших существ. Поэтому мы решили вернуться к основам и построили свою стратегию перемещения, которая выглядит более естественной и правдоподобной.

Если существо увидело нечто, что его заинтересовало, оно направится прямиком к объекту своего интереса, обходя препятствия, блокирующие путь. Такие как деревья, скалы, другие животные и так далее. Но если животное не видит то, что ему очень нужно, оно должно переключиться в режим поиска. Поэтому модель поведения существа может сильно отличаться: от беззаботно прогуливающегося создания до голодного или испуганного существа, которое стремится набрать высоту, чтобы видеть больше и легче обходить препятствия. В конце концов, животное может покинуть остров и полететь к следующему клочку тверди, если на этом острове оно не достигло своих целей. И если это приведет к смерти… что ж… так тому и быть.

Так. Что у нас тут есть? Превосходная симуляция безмозглого существа. Офигеть, дайте два!

Эм… ладно, постойте. Мы можем сделать его чуть умнее, добавив всего одну дополнительную систему. Мы можем наделить существо способностью возвращаться к тому, что оно видело прежде, но в тот момент не заинтересовалось. А теперь – другое дело. Назовем это «путь из хлебных крошек». Точно так же, как Гензель и Гретель, наши животные могут восстановить путь, по которому они передвигались, чтобы вернуться туда, где они были. Такой алгоритм может быть оптимизирован отбрасыванием тех «крошек», которые лежат между самой свежей и самой старой, находящейся в прямой видимости. И, конечно, если по дороге назад существо увидит что-то новое, что его заинтересует, оно отбросит все эти крошки и направится прямиком к объекту интереса. Животина с памятью – это, скажу я вам, куда более полноценное создание, способное вести себя значительно интереснее.

Worlds Adrift: Фауна летающих островов: руководство для новичка
Поведение и побуждения
У существ есть множество моделей поведения, включая базовые: поиск пищи, сражение, отдых, прогулка и спаривание. У них также есть переменчивые побудители: голод, гнев, усталость, любопытство, либидо. Каждое существо в разный момент времени использует разную модель поведения, в зависимости от того, какое побуждение в нем одержало верх. Все это просчитывается у него в голове при помощи специфических коэффициентов.

Значение коэффициента может существенно изменять приоритеты в выборе моделей поведения. Мы можем использовать это для создания различных видов животных: более агрессивных, пассивных, любопытных и так далее. Также такой подход оставляет нам пространство для добавления впоследствии новых побуждений или новых моделей поведения существующим животным.

Ага… что у нас дальше по плану?
Сейчас мы работаем над тремя разными существами. Они часть одной пищевой цепи. Будем двигаться снизу вверх: это травоядные жуки, агрессивные и всеядные манты, и наконец – великолепные небесные киты. Киты и Манты куда меньше привязаны к конкретному острову и могут путешествовать на существенно большие расстояния, чем жуки. Киты будут настолько большими, что игроки смогут прыгать на их спины (хотя мы пока не решили, это хорошая или плохая идея, с точки зрения кита). Каждый вид существ будет реагировать по-разному на появление игроков.


Вы можете посмотреть пример поведения жуков в нашем коротком видео.

Ссылка на оригинал: www.worldsadrift.com/blog/creatures-of-worlds-adrift-a-beginners-guide/
Читайте также

14 комментариев

avatar
Киты будут настолько большими, что игроки смогут прыгать на их спины (хотя мы пока не решили, это хорошая или плохая идея, с точки зрения кита).
лично я бы сделал чтоб киты просто игнорили игрока, а вот если корабль наткнется то атаковали его
  • Accyp
  • +1
  • v
avatar
Каждое существо в разный момент времени использует разную модель поведения, в зависимости от того, какое побуждение в нем одержало верх.
Удовлетворённый и сытый кит будет катать на себе, а неудовлетворённая самка атаковать)
А вообще, можно же сделать несколько видов китов. И нейтральных, и тех, которые людей боятся, и агрессивных.
avatar
Часто бывает, что существа выбиваются из ландшафта потому, что они менее проработанные [графически]. А здесь наоборот. :)
  • Andre
  • 0
  • v
avatar
тут ландшафт хуже ?)
  • Accyp
  • 0
  • v
avatar
Умный жук… хм… хорошо, будет с кем поговорить =)
avatar
а ну как он не захочет разговаривать?)
avatar
а на каком языке интересно с ними общаться, мы на их будем или они на нашем?)
avatar
думаю на общем… аналоге эсперанто я думаю ^_^
avatar
С умным человеком всегда приятно поговорить, особенно за чашечкой ароматного чая… ммм…
avatar
Хочу увидеть нелетающих существ, распространяющихся с острова на остров по типу одуванчиков или даже подорожников :)

И вообще—больше существ, больше, и иерархии пошире, не только линейка из трёх градаций рыб, которые друг друга едят.
  • Anton
  • 0
  • v
avatar
мне вот интересно все же как они планируют обрабатывать модель поведения каждого отдельного существа? это ж куча информации: запоминать места где оно уже было + та линия поведеня которой она в данный момент придерживается + характеристики существа (хп, сытость, жажда — если будет, и прочее)
  • Accyp
  • 0
  • v
avatar
Вообще сейчас такова тенденция разработки софта, что его похоже совсем не оптимизируют, пишет кто попало и как попало, в итоге у нас простые вещи тормозят даже на хороших конфигурациях системы. Вспомним какие программы на каких конфигурациях запускались 10-15 лет назад? Если с умом подойти к оптимизации, правильно построить архитектуру программы и думаю все получится. Вот моя идея как можно было бы облегчить нагрузку. Где то разработчики говорили что мир будет плохо заселен игроками, а значит можно выделить острова или биомы, в которых сейчас игроков нет и обрабатывать события там по облегченным алгоритмам рассчитывая только целевые состояния, например есть остров в нем популяция существ А, столько то еды, столько то земли, есть популяция существ Б, есть алгоритмы как они между собой взаимодействуют.Раз в сутки когда нагрузка минимальна сервер берет все эти данные и рассчитывает новое состояние острова, столько то родилось, столько то съели, сколько то деревьев выросло там то там то. Все в цифрах на сервере, в мире этого ничего нет. Когда игрок появляется в биоме сервер считывает последнее состояние биома, и на основе прошедшего времени с момента расчета дополняет события, расставляет существ (их координаты могут же меняться), их состояние, отражает изменения в экосистеме уже по сложным алгоритмам: с 3д моделями, координатами, физикой. Разработчики могут пойти и более грамотным путем, нам недоступным)) но я к тому, что все возможно. Увидим!
Комментарий отредактирован 2015-10-30 05:38:00 пользователем Rige
  • Rige
  • +1
  • v
avatar
Это все хорошо, но как я понял они нам обещают «бесшовный мир» а не кучу серверов аля EVE или же там будут «пузырчатые сервера» аля СтарСитезен
Вот если сделают «пузырчатые сервера» то да твой вариант легко реализвовать.
Если вариант как в еве — система — сервер, а тут остров — сервер, как тогда будут происходить переходы между серверами ?
Остается вариант — глобальные сервер, но опять же это большая нагрузка на серверную часть
  • Accyp
  • 0
  • v
avatar
В той же Archeage, судя по косвенным данным, мир может крутиться на кластере, хотя и бесшовный.

В общем случае: бесшовность мира не запрещает обрабатывать разные его части на разных серверах. Да, это требует некоторых усилий, но в этом нет ничего невозможного.

Оставить комментарий