— Roxette

26.07.2019, 8:56 PM BST оба сервера WA были остановлены навсегда.

В течение последнего месяца игры острова, медленно дрейфовавшие к центральному, опускались в нижние слои атмосферы, в облако смерти. Под конец они начали падать — сначала внешний круг, затем всё ближе и ближе к последнему, центральному острову Ishtar. Мир медленно умирал, унося в забвение нерассказанные истории и нераскрытые секреты.

В последний день жизни мира Капитаны и Путешественники собрались на этом острове, чтобы… Даже не знаю, как это описать. Попрощаться с миром?


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

Никто ничего не говорил. Звуковой чат умер одним из первых. Текстовый скоро последовал за ним. Единственным способом связи оставались стримы на Твиче, но много ли там скажешь? Впрочем, несколько хороших речей всё же были произнесены… Посмотрите хотя бы запись последнего стрима. Мусора много, но опытный охотник способен отловить и настоящие жемчужины.

Никто не танцевал, не прыгал и не играл на музыкальных инструментах. У многих даже трос не отцеплялся, а подпрыгивание легко могло заморозить на месте. Поэтому все просто стояли или сидели. Кто-то смотрел на языки пламени и танцующие на стенах собора тени внутри. Кто-то любовался сменой цветов неба снаружи. Игровые сутки тоже лагали и небо менялось рывками.

Опоздавшие пытались подняться к вершине острова. Но время умирающего мира останавливалось всё чаще.

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

30 самоубийств. И… одна свадьба. Да! В последний день мира прошла церемония, объединившая души двух персонажей. Бессмертный акт в конце времён. Что-то, что могло пережить последний катаклизм. Странная штука. Тем не менее, она состоялась. К сожалению, не могу привести их имена — они зачитывались с бумаги, и разобрать их было сложно.

На PvP-сервере проходила последняя битва. Несколько кораблей, настоящие произведения искусства мин-максинга, сошлись в отчаянной перестрелке, медленно падая в грозовую тучу где-то далеко внизу. Грохот пушек, шипение паяльников и вой двигателей — пожалуй, самый настоящий гимн этой игры. По крайней мере, половины её — той, к которой приходили многие после завершения фазы исследования. Ведь сколь бы большим ни был запас контента — рано или поздно он заканчивается.
Даже при таком крауд-сорсинговом варианте создания контента, который использовали разработчики, размер карты мира был, к сожалению, ограничен. И был он совсем не таким большим, как могло показаться в первые часы игры. Когда-нибудь все острова были бы исследованы, а технологии получены. Что остаётся после этого? Только бесконечные сражения среди облаков и гроз…

Наконец, настал черёд последних моментов жизни. Демиурги открыли консоли управления сердцами миров — инстансами SpatialOS.

Первым был погашен PvE сервер. К тому времени стрим с него был уже невозможен, он почти наглухо висел. Войти на него также было невозможно, все желавшие просто попадали в список коннекта и никогда не доходили до загрузки персонажа. События на сервере также попадали в лимбо замедленного времени, так что клиенты жили чисто в локальном времени, где работала только анимация.
Вторым, во время трансляции стрима боя, гасился сервер PvP. Он не пошёл ко дну моментально, он тонул несколько десятков секунд — сначала зафризились корабли, но ещё работали действия персонажей. Затем остановились и они. Капитан воздушного судна в последний раз прицепился тросом к палубе и сделал несколько прыжков-петель вокруг своего корабля, прощаясь с тем, что было его жизнью последние два года.

Затем наступила тьма и Господь дал титры.

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

Если очень коротко: технический долг и маркетинг. Слишком много времени и сил требовалось на починку багов вместо расширения возможностей. Слишком резко росла нагрузка на сервера при увеличении количества игроков, особенно сильно сказываясь на тех, кто рисковал подойти на расстояние прямой видимости. Это мешало поддерживать постоянный поток новых игроков. Да что там мешало — полностью останавливало! А старые не могли обеспечить достаточную выручку для обеспечения активной работы команды, так как на одной косметике много не получишь, да и сколько раз можно продать одну и ту же шляпу одному игроку?

Запись последнего стрима разработчиков: www.twitch.tv/videos/458223971

We are the Sky Captains. We will take to the sky.
Farewell Atlas. May the Foundation rise again.


Worlds Adrift: Farewell


P.S.: многократно звучавшие призывы передать игровой код в open source, даже в нерабочем виде, невыполнимы — глубокая интеграция SpatialOS и других проприетарных модулей не позволяет просто взять и стрипануть проект. Я знаю, что это такое. Там нужны ещё месяцы работы, и оставшийся скелет не будет представлять интереса для «возрождения», там заново написать начисто будет проще, чем рефакторить останки.

P.P.S.: аналогичное нечто: Airmen (https://store.steampowered.com/app/647740/Airmen/), но с роботами, попроще графически и геймплейно, и без лора.

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

avatar
Не играл, но все равно печально — была игра, были игроки, были планы на завтра, но завтра уже никогда не наступит…

o7
  • 0
avatar
Не покупал, но отыграл бесплатное ОБТ. Было весело, игра оригинальная, но, как обычно после анонсов, ожидал больше, чем дали.
  • 0
avatar
Слишком резко росла нагрузка на сервера при увеличении количества игроков, особенно сильно сказываясь на тех, кто рисковал подойти на расстояние прямой видимости. Это мешало поддерживать постоянный поток новых игроков. Да что там мешало — полностью останавливало! А старые не могли обеспечить достаточную выручку для обеспечения активной работы команды, так как на одной косметике много не получишь, да и сколько раз можно продать одну и ту же шляпу одному игроку?
Тут многое не складывается. Прежде всего, изначально концепция не предполагала скопление игроков. Напротив, разработчики говорили о том, что встреча с другими игроками будет большой редкостью. И это логично, если взять за основу суть исследовательского геймплея. Тот же поиск сундуков, который при большом скоплении игроков попросту терял смысл. Да и в целом концепция путешествия на своём корабле-доме в компании друзей, предполагает долгие путешествия по очень большому пространству.

Да, можно вспомнить задумки про китов, но, в конце концов, думаю, игроки легко бы пережили механику, не предполагающую довольно жестокую массовую китобойню, а, к примеру, только высадку на спину огромного кита ради того же исследования. Все эти попытки придумать то немотивированное PvP, то рейдбоссов прямиком из других игровых схем — как раз свидетельство отсутствия стержня у геймдизайна.

И вот что самое интересное. Игре катастрофически не хватало именно пустого пространства. Больших расстояний между островами. В десятки раз больше, чем это было в любой версии игры. Пространству не хватало тайны. Блуждания в облаках. Сложной навигации. Собственной картографии. Когда ты перелетал в новый регион и видел невооружённым взглядом почти всю коллекцию островов, это разрушало атмосферу приключения и исследования. Выглядело всё это именно как выставка. Я делал скидку на то, что это бета-тест или ранний доступ, но если уж авторы вплотную столкнулись со сложностями массового скопления игроков, как раз резкое увеличение расстояний без наращивания объектов — просто создание пустого пространства — было бы вполне логичным решением. Для игры про исследование. И для резкого снижения вероятности встречи. Но не для игры про PvP, разумеется. Только вот PvP в этой игре для себя места так и не нашло, кроме описанного в тексте оправдания в духе «просто скучно стало, всё исследовал».

Ну, и, наконец, про «достаточную выручку». Я писал об этом очень давно — авторы изначально завязались на технический сервис по подписке. SpatialOS требовал платить не один раз, а каждый месяц, в зависимости от нагрузки, создаваемой игрой. Что логично, потому что это нормальная честная схема: пользуешься — плати. Авторы Worlds Adrift посмотрели на всё это и решили — давайте мы каждый месяц будем платить, а деньги с игроков возьмём только один раз. Хм… что могло пойти не так в финансовом плане?
Комментарий отредактирован 2019-07-29 10:01:05 пользователем Atron
  • +4
avatar
резкое увеличение расстояний без наращивания объектов — просто создание пустого пространства — было бы вполне логичным решением.
Я не специалист, но скорее всего это не получалось сделать из-за технических ограничений движка (например, проблемы с точностью определения координат объектов на больших расстояниях), а преодолеть их не было возможности. Хотя там и других технических проблем хватало. Красивую задумку подкосила слабая техническая реализация. А значительные ошибки в геймдизайне и финансовые трудности еще больше усугубили и без того сложную ситуацию.
  • 0
avatar
Я тоже не специалист, но если в юнити до сих пор есть проблемы с точным определением координат, это очень большой косяк, по-моему.
  • 0
avatar
Для обычных игр дальности корректно просчитываемых координат вполне хватает, а для действительно огромных расстояний требуется переход на 64-разрядную версию. Но, повторюсь, я не спец, может там в чем-то другом проблемы были.
  • 0
avatar
В текущей модели данных Unity ситуация складывается не в пользу больших расстояний. Все современные игровые движки, и мой тоже, вообще не очень дружат с большими расстояниями, если дружить с ними «в лоб».
Стандартное вещественное число (float), лежащее в основе данных для всей математики Unity, имеет одинарную точность.
Хорошее позиционирование и верная передача динамики мира требуют от данных определенной разрешающей способности. Грубо говоря, нужно что-то принять за единицу измерения пространства. Может быть — принять метр за единицу измерений пространства. Может быть — миллиметр. От этого будет зависеть качество визуализации игры.

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

Когда у тебя игра про свободные полеты и разрозненные острова, даже при наличии навигации, высока вероятность получить накопительную разницу между проложенным курсом и вектором фактического движения объекта. Поэтому, зачастую, чтобы в принципе не допускать возможности накопительной ошибки координат, разработчики итого сильнее сжимают пространство координатной системы мира.

Проблема с накоплением ошибки в координатах всегда мешала игровым движкам стать «чем-то большим». Многие разработчики систем симуляции управления и обучающих тренажеров (а я на эту тему разговаривал и с военными, и с их подрядчиками) упираются именно в нехватку точности позиционирования и физических расчетов. Поэтому, однажды в Томске был разработан очень полезный инструмент — Unigine.
Этот инструмент отличается прежде всего использованием типа вещественных чисел с двойной точностью (double) в качестве основы для всей математики пространства и физики. Его используют в симуляторах обучения пилотов самой различной техники, для создания VR-окружения и многих прочих проектов.
Однако для игр этот движок мало подходит потому что с двойной точностью современные процессоры работают чуть более чем в вдвое медленнее. Что GPU, что CPU.

Игры — это высокая динамика в ущерб точности модели представления. Мы ведь не хотим, ради боле точного позиционирования себя в микрометрах пространства, получить ~0,4 от текущего великолепия графики, динамично разрушаемого пространства, количества объектов и деталей вокруг нас, количества в принципе нас самих в рамках одной совместной сессии?
Это и не нужно :) Игровые движки имеют свои решения задач позиционирования и симуляции. Мое самое любимое решение — это иерархические координатные системы. В такие координатные оси можно записать всю нашу вселенную с точностью хоть в пикометр. Коротко: наша координатная система с разрешением в 10км может быть просто одним делением в другой координатной системе.
Другой прием довольно часто применяется на практике, особенно в космическом пространстве — это логарифмические интервалы осей. Коротко: все точки интереса на самом деле находятся на расстоянии вытянутой руки, но между ними находится подпространство, по которому ты будешь очень долго пилить на умопомрачительной для тебя скорости, но на черепашьей скорости для стороннего наблюдателя.
Комментарий отредактирован 2019-07-29 15:40:53 пользователем FrankStein
  • +9
avatar
Все современные игровые движки, и мой тоже

Так, так, а лицензирование предусмотрено?)))
  • 0
avatar
Да брось :)
Я им с 2012 года занимаюсь и все только переписываю да меняю архитектуру, вместо того чтобы уже закончить и начать развивать на нем свои проекты. У него цели иные — отработка решений, а не экономическая эффективность.
Я себя сегодня утром вообще «дном почувствовал»(нет) потому что развиваю его уже приличное время без видимого выхлопа.
  • +3
avatar
Да, я это читал… Не буду говорить о своих впечатлениях от статьи))

Ок, ну ты хоть там в опенсорс выкинь лет через 5, ато посчупать-то интересное всегда хоца))
  • +1
avatar
Мне кажется, вы берёте слишком высокий уровень ошибок. Проблемы были не на уровне «как бы нам побороть джиттер на дистанции» (Это уровень KSP, и да, это иерархические КС. Изящное решение, ИМХО), да и точность там вряд ли была особо высокой.
Проблемы там были на уровне пониже. Если у них неписевые сущности жрали до 80% нагрузки на сервер (trigger-based behaviour tree? Ага, щаз...), то что говорить про прочие аспекты нагрузки…

А что касается больших карт и расстояний — то я считаю, что помешал им прежде всего плохо продуманный дизайн игры в целом.
Они хотели сделать кооперативные приключения. Но при этом сильно обделили игроков инструментами, необходимыми, чтобы это было именно приключение, а не интерактивная переэкранизация «Ёжика в тумане». В игре новички зачастую падали со своих кораблей, не имея возможности ориентироваться в пространстве — и это при наличии гроздей островов поблизости!
А теперь попробуйте представить: вот вы висите посреди бескрайнего неба. Слева вдали — стена шторма. Снизу молочная пелена. Справа туман. Прямо туман. Сзади туман. Наверное сзади. Компаса один хрен нет. И горизонта. Можно грабить корованы лететь вперёд. А можно не лететь.
Вопрос: зачем? Какая мотивация куда-либо двигаться?
Видимые острова хотя бы давали такую мотивацию: вон там что-то виднеется, а давайте посмотрим поближе. Если бы между ними были расстояния больше видимости — было бы абсолютно непонятно, зачем куда-то лететь. А даже если и понятно — тратить полчаса, просто жужжа двигателями ("- Are we there yet?.. — No. — Are we there yet?.. — No. — Are we there yet?.. — F**k..."), убивает мотивацию исследования очень быстро.
Нужны «маяки», Points of Interest. Но Боссы не смогли их сделать, увлекшись визуалкой и лором. Вот и вся история эксперимента.
Комментарий отредактирован 2019-07-29 23:02:50 пользователем Guest
  • +1
avatar
Проблемы у Bossa Studios с проектом, безусловно, были. Но я рассказал не о проблемах Bossa Stusios с проектом.
Проблемы у Unity с технологией, безусловно, есть. И они далеко не заключаются в выбранных типах данных.

Все что я сделал — так это просто немного рассказал в ответ Атрону, что проблема точного определения координат в самом широком смысле — это не задача Unity и не задача игровых движков как таковых.
Комментарий отредактирован 2019-07-30 00:57:11 пользователем FrankStein
  • 0
avatar
Судя по списку сделанных на движке проектов — никто толком не использует его преимущества. Да, точность высокая, но кто бы ей воспользовался? =D
Для симуляторов — да, очень важно. Особенно точность при высоких скоростях перемещения — моделирование снарядов оружия и высокоскоростных маневренных целей. Самолётов-перехватчиков, ракет…

Когда-нибудь доживём и до двойной точности на массовых платформах.
  • 0
avatar
Судя по описанию лага при переходе проблема так называемого world origin shifting там была решена, тот же PhysX, на котором работает Unity, использовавшийся для клиентской части игры. Да и SpatialOS сама по себе предполагала соединение именно таких вот локальных симулируемых физ. пространств, так что это изначально решалось и в серверной части, без этого никак в openworld, от слова совсем.

А вот насчет double (64 БИТНЫЕ переменные, если я правильно понимаю о чем речь) вместо float это дело такое… Сначала смотришь и думаешь: «Ну что такого!? Каких-то 4 байта за х2 увеличение точности и еще большее увеличение расстояний и т.д.»
А потом понимаешь, что вектор это структура из 3х таких переменных, так еще и направление и скорость тоже определяются не одной точкой в 3х мерном пространстве. Вот и получается, что 4 байта на, скажем, 6 это 24 байта, которые на практике относятся далеко не только к векторам игроков, но и к NPC, их скелеты с 80 и блее костями, и еще есть сама физика, а если она продвинутая ( то есть не только коллизии, но и еще инерция честная, вращение и т.д.)…
Если кратко, то введение двойной точности это резкое увеличение потребляемой памяти и снижение частоты обработки данных, т.к. CPU тоже страдают от, скажем так, забитого кеша. Индустрия, на мой взгляд, пока не готова, да и, если честно world origin shifting неплохо справляется, там больше проблем с сетью ( передача данных клиента от сервера к серверу должна быть максимально плавной ), чем с флотами. ^_^
  • +3
avatar
Вообще про «вектора и ВСЕ ВСЕ ВСЕ», то чем во многом сейчас занимаемся мы можно тут почитать, на самом деле познавательно
  • +2
avatar
Отличная статья. Если бы я ее прочитал лет пятнадцать назад, куча свободного времени появилась бы.
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.