Как из случайного числа выдуть игру

Jan 06, 2012 21:26

Мыльные пузыри... в детстве они казались маленьким чудом. Тоненькая радужная плёночка и твоё дыхание, больше ничего. И из этого рождаются большие, красивые и не похожие друг на друга пузыри. Они велики...

Современные игры тоже велики. Гигабайты текстур, звуков, карт уровней. А ведь когда-то было не так. Например, в культовой ELITE удалось вместить в 22 Кб программного кода целую вселенную с 2^48 галактик, в каждой из которых по 256 звездных систем. Так как в игре может присутствовать только 8 галактик, то, соответственно, количество вариаций составляет около 35 триллионов (wiki).
 Каким же образом создатели ELITE затолкали звёздное небо в 22 Кб? Да очень просто
-- всё генерируется на лету, на основе псевдослучайных последовательностей чисел. Иного выхода у авторов в те времена не было, ведь объём ОЗУ тогдашних компьютеров часто не превышал 64 Kb. Поскольку исходные числа для генератора одинаковы, то и вся вселенная каждый раз одна и та-же, несмотря на то, что при каждом перелёте конструируется заново, включая названия планет и их краткое описание. Таким образом алгоритм + число способны без лишних усилий создать целый мир, причём этот мир может быть каждый раз совершенно иным.
В рогаликах подземелья как правило были почти полностью рандомны. Хотя почему "были"? Данная категория игр существует и поныне,  и именно из неё растут корни великого проекта Dwarf Fotress. В нём используются методы из теории численного моделирования: "Прежде чем начать игру, необходимо создать мир. Его генерация занимает значительное количество времени, в среднем 5-15 минут на средней системе (Например, P IV 3000 создает мир около 7 минут). Это объяснимо: мир очень большой, с неслучайными локациями. Кроме того, должно пройти определённое количество лет существования мира, прежде чем в нём сможет появиться игрок. За это время персонажи мира рождаются и умирают, рожают детей, основывают новые города. В версии 0.27.173.38a добавлена имитация семейных отношений, взросление и смерть от возраста, рождение детей; в новой версии добавлена религия: каждый народ теперь имеет определённый пантеон богов, которым он поклоняется. В ближайших планах ввести войны между разными цивилизациями во время генерации мира, а потом - и в обычной игре."(wiki)

Впрочем, в ELITE графика была по современным понятиям совершенно абстрактной и состояла из нескольких примитивных каркасных моделей, а в рогаликах основным каноническим режимом отображения вообще считается pure ASCII, то есть текстовый режим. А как обстоит дело в мире 3D, реализуемы ли там такие методы? Вполне. В трёхмерной игре "Даггерфолл" принцип рандомизации, как и в рогаликах, лежал в основе построения всего игрового мира, что позволило реализовать территорию немыслимого по нынешним меркам размера примерно равную по размеру Великобритании: около 487,000 квадратных километров, с более чем 15 000 городов, деревень, и пещер, которые можно исследовать. По словам Тодда Говарда, программиста Elder Scrolls, следующая в серии игра, «The Elder Scrolls III: Morrowind» является 0,01 % от размера «Daggerfall». (wiki)
Это придало Dagerfall эпичнейшие масштабы, но также и эпичнейшее однообразие. Поскольку всё собирается из одинаковых кубиков, многие критиковали игру за ощущение бесконечного копипаста. Но ведь и визуальная составляющая, текстуры, модели, даже звуки могут быть точно так-же сконструированы на лету.

Ярким примером этому служит такой, казалось бы, курьёз как Kkrieger. Полноценный 3D шутер размером 96 Kb.Не магабайт, а килобайт  Меньше чем скриншот! Полная версия игры занимает всего 97 281 байт дискового пространства благодаря тому, что все игровые ресурсы - текстуры, модели, геометрия уровня, музыка и звук - генерируются с помощью различных алгоритмов. Текстуры генерируются в реальном времени методом процедурного текстурирования. Музыка и звук в игре синтезируются и воспроизводятся так же в реальном времени многофункциональным синтезатором V2 собственной разработки (Farbrausch). Исполняемый файл игры запакован программой kkrunchy. По словам разработчиков, игра занимала бы около 200-300 МБ, если бы использовалось традиционное хранение предварительно подготовленных игровых ресурсов. (wiki). Выглядит Kkrieger вполне современно, с шейдерами и всеми фишками DX 9:



Вот видеоролик с рассказом о том как делался .kkrieger. Генерация текстур очень похожа на то, что есть в Фотошопе. Очень здорово сделали анимацию персонажей. Они не могли использовать скелетную анимацию, поскольку самый маленький размер для такого персонажа, что они смогли добиться - это 12 кб. В итоге они сделали нечто свое. В этом ролике подробно показывают анимацию одного из монстров, как он автомагически начинает правильно ноги переставлять, когда поворачивает, когда начинает идти быстрее, когда идет назад... Впечатляет. (Алёна C++)

Подведём итоги. С помощью псвевдослучайных последовательностей  и процедур можно:
  • Упакововавать огромные миры в ничтожные объёмы.
  • Добиться разнообразного и не повторяющегося игрового опыта
  • Сделать игру, которая при каждом запуске будет выглядеть иначе.

Конечно, это не панацея, и злоупотреблять принципом рандомной генерации не стоит, поскольку как и мыльный пузырь, полученый результат имеет впечатляющий, но иллюзорный объём. Тем не менее, случайность -- важный элемент теории игр. Не стоит пренебрегать ею. Пусть игра начинается с разных точек мира, пусть те или иные события могут произойти или не могут. Одна игра не должна походить на другую, в этом секрет удержания интереса игрока.
Второй же основополагающий элемент -- правила (алгоритмы). Сочетание этих элементов позволяет творить настоящие чудеса.

Эту, и другие мои статьи, можно найти также в сообществе CONCEPTGAME215

kkrieger, space rangers, elder scrolls, .рубрика: игры как искусство, .форма: аналитика, материал для gamer.livejournal.com

Previous post Next post
Up