На прошлой неделе состоялся релиз No Man’s Sky — игры, анонсированной ещё три года назад. Приличный срок, но рискну утверждать, что многие из тех тысяч, которые купили её в первый же день, ждали её вовсе не три года, а целых тридцать лет — с середины 80-х, когда концепция, положенная в основу этой игрушки, впервые была реализована в похожем масштабе. Простите, что говорю загадками, но простите и за то, что начну не с игры (о которой всё равно все уже читали не по разу, а кто-то успел и поиграть или посмотреть как играют другие), а с экспериментального коктейля из математики и психологии.
Отправляйтесь прямо сейчас вот на эту страничку сайта Academo.org, вбейте в поле «Expression» формулу sin(x)+sin(y)+sqrt(abs(x)), диапазон ограничьте координатами x: -5,10 и y: -5, 5, и жмите Calculate. Вы получите милую трёхмерную картинку. Формально это график заданной вами только что функции — но кто из вас, глядя на него, подумал о математике? Ведь… красиво же, правда?
Зацепите его курсором, покрутите. Горный каскад. Долины залиты синью: озёра! А почему пики расположены именно так? А если пустить речку по склону, она правда заполнит ущелья? А что там, за вертикальным срезом? Всё это реально проверить, если у вас есть хотя бы пять минут, но оставляю дальнейшие опыты вам. В контексте нашего разговора важны две вещи.
Во-первых, поверхность, которую мы только что получили, не существует иначе кроме как в виде формулы. Иначе говоря не существует массив данных, который содержал бы информацию о высоте точек в каждом узле координатной сетки x,y. Информация эта рассчитывается на лету или, как говорят программисты, процедурно. Мы получили процедурно сгенерированный ландшафт. Для человека, далёкого от вычислительной техники, звучит… диковато. Но верите или нет, именно процедурная генерация привлекла к вычислительной технике больше людей, чем, полагаю, любая другая математическая игрушка всех времён и народов.
И вот тут — во-вторых: по какой-то причине мы не в силах оценивать сгенерированные процедурно объекты не включая при этом фантазию. Дело, подозреваю, вот в чём. Человек — исследователь по натуре. У нас пара сонаправленных глаз (можно быстро и точно оценить расстояние до далёкого предмета), пара ног для преодоления больших расстояний и пара рук для преодоления препятствий на пути. У нас, наконец, интеллект, позволяющий строить оценочные модели в четырёх измерениях, то есть заглядывать в невидимое, неведомое, пока несуществующее. Всё это нам эволюцией подарено. Но фантазия, любознательность, воображение — не оттуда же ли? У животных ведь этого нет: их интересы формулируются физиологическими потребностями. Абстракция, несуществующее, их пониманию недоступна. А и была бы доступна — не была бы интересна. Только в нас с вами сидит чувство, постоянно требующее «заглянуть за горизонт».
Так вот, случайно или по наитию, смешав две этих вещи, компьютерщики получили гремучую смесь: игры с процедурной генерацией — программный продукт, в котором фантазия стала частью цифрового движка. Их, конечно, сотни и тысячи, но две, заложивших фундамент, существуют уже более тридцати лет, пережив множество платформ и архитектур.
Первой такой игрой, а точнее классом игр, стали «рогалики»: примитивные ролевые походовки, пришедшие аж из конца 70-х (см., например, историю NetHack). Здесь ПГ используется для создания бесконечного числа уникальных лабиринтов. Воображение здесь необходимо с порога, ибо мир нарисован символами ASCII. Но почему-то когда мы ставим мозг на порог неизвестного, он легко и даже с удовольствием воображение включает.
Второй игрой стала Elite (кстати, оригинальная версия сегодня есть в браузерном варианте). Здесь «на лету» генерируются уже целые звёздные системы и галактики — в количествах, которые не в силах была вместить скудная оперативная память 8-битных машин. Игрокам доступны тысячи звёзд — и хоть изображение схематично, ставка на фантазию сыграла и здесь: поскольку ничто не нарисовано заранее, то и свобода действий не ограничена, а это включает в нас «режим исследователя».
С тех пор процедурная генерация развивается без остановки. Игры, конечно, остаются её главным полигоном: тут научились подмешивать к сгенерированному потоку процедурный же шум (чтобы сделать результат более похожим на настоящий), тут добавили процедурам размерность (сгенерированные свойства сгенерированного объекта) и пр.
Но очень важно, что в отличие от большинства других технологий, ПГ не потеряла своей простоты и доступности. Самодельщики-энтузиасты и сегодня пробуют применять её для всего — от понятных попыток синтеза иноземных ландшафтов и квазиземных городов, до предсказания погоды и взлома задач, не имеющих простого алгоритмического решения. Вот, например, посвящённый ПГ реддит: оцените, сколько народу и сколько идей!
Теперь легко понять, почему такой ажиотаж вызвала No Man’s Sky: она, по сути, выкристаллизовалась из этого интеллектуального потока. В NMS процедурная генерация отвечает практически за всё. Этот огромный мир буквально соткан процедурными генераторами: он настолько велик, что авторам пришлось создавать программы-дроны, «путешествующие» по его закоулкам и присылающие снимки, чтобы убедиться, что алгоритмы работают правильно везде.
Одни ПГ отвечают здесь за макродетали: структуру планетных систем, гравитацию, атмосферу, крупные геологические формации. Другие добавляют деталей на микроуровне: реки, и облака, и дождь, и ураганы. Третьи, основанные на алгоритмах, сформулированных физиками и биологами задолго до игры, творят биоподобные структуры: живых существ, растительность, акустические картины. И наконец, всё это взаимодействует посредством общих физических свойств.
Игрок в этом пространстве — словно бы случайная деталь. Мир существует не для него и, выражаясь метафизически, сможет существовать и без него: он самодостаточен! Никто и никогда ещё не строил процедурных миров с такой степенью детализации и такой степенью свободы действий. Выброшенный в случайной точке пространства без всяких указаний, игрок волен творить, что ему вздумается, сообразуясь только со своими намерениями и условиями, в которых он оказался.
Да, говорят, в игре есть слабый нарратив: в синтезированную реальность, якобы, вплетена история, влекущая к центру Галактики. Но опять же почти никто и ничто не обязывают ей следовать. В No Man’s Sky можно странствовать между системами или замкнуться в одной, взаимодействовать с другими формами жизни или игнорировать их, даже просто проводить часы и дни наслаждаясь прелестью процедурных миров: восходом чужой звезды с орбиты неизвестной планеты, игрой света и форм на её поверхности, живущим по своим — математическим, отнюдь не случайным! — законам подводным миром, полным цвета, звуков, динамики. И знать, и помнить, что этот мир материализован из формул только для вас: никто и никогда его не видел и скорее всего не увидит. Кто-то удачно назвал возникающее здесь чувство космическим одиночеством, изоляцией: мир велик, я песчинка — где ещё такое почувствуешь?
Идея… странная. И, конечно, не раз подвергалась сомнению: можно ли и стоит ли строить игру на такой основе? Пока ещё судить о коммерческом успехе или неудаче No Man’s Sky рано. Но лично мне думается, что пессимисты всё-таки ошибаются. Сделать фантазию, воображение частью игрового движка — вариант беспроигрышный. Игра, конечно, не для всех. Но у неё останутся толпы поклонников и после того, как она будет пройдена.