Плоскоземелье
АрхивКак летит время! Казалось бы, менее полугода назад я писал об очень интересном начинании в деле создания виртуальной реальности в Интернете - языке 3DML. Тогда проект находился на стадии "группа энтузиастов придумала классную штуку". С тех пор фирма Flatland, создавшая 3DML и сопутствующее программное обеспечение, ушла далеко вперед и заручилась поддержкой разнообразных больших дядей. В результате и софта стало побольше, и качеством он стал получше, а уж мирков этих трехмерных расплодилось - хоть пруд пруди [1]. По законам любой Интернет-тусовки сайт www.flatland.com оброс разнообразными рассылками, форумами, галереями работ и, естественно, группой фанатов, среди которых, как всегда, особенно выделяются японцы.
Жители Страны Восходящего Солнца фанатеют по любому поводу серьезно и с полной самоотдачей. Взгляните на проект "Цифровой Киото" (www.digitalcity.gr.jp/kyoto, рис. 1): с использованием, в общем-то, не слишком гибкого 3DML и множества реальных фотографий в качестве текстур воссоздан облик милого японского городка. В полном виде, кстати, проект занимает 26 Мбайт, а желающим его просмотреть настоятельно рекомендуется обзавестись 128 мегабайтами памяти (я бы еще посоветовал двухмегабитный канал). Есть там, правда, и маленькие кусочки города, мегабайта, так, по два каждый, - с ними можно ознакомиться и на 28-килобитном канале (учитывая streaming-характер загрузки мирка). Хотя в любом случае имеет смысл, скажем, зайти на этот сайт, включить загрузку, а потом пойти пообедать - как раз к вашему возвращению мирок примет более или менее пристойные очертания.
Впрочем, и остальной мир от японцев не отстает. Особо полюбился 3DML поклонникам культового "Tomb Raider" и милашки Лары (рис. 2). В ее честь строятся сайты, украшенные портретами кумирши. По сложившейся традиции их почему-то называют гробницами (tomb). Такая вот странная любовь получается... А сами плоскоземельцы (flatlanders) эту народную любовь поддерживают, направляют в нужное русло и подпитывают постоянными конкурсами, в которых можно выиграть то AMD'шный компьютер, то 3D-акселератор, то еще какую полезную всячину, например, свидание с Ларой или, на худой конец, плакатик...
В общем, 3DML отправился в победное шествие по просторам Интернета. Легкость создания мирков и быстрота работы 3DML-клиента привела к тому, что уже сейчас этот язык рассматривают как реальную альтернативу VRML именно в области Интернет-технологий виртуальной реальности, особенно там, где богатые возможности VRML оказываются избыточными, а недостатки (трудность, а следовательно - и дороговизна создания, большие объемы кода) перевешивают лучшее качество визуализации и хороший моделинг.
Что нам стоит мир построить
Как ясно уже из названия, 3DML относится к подмножеству языков, созданных на базе спецификаций XML (www.xml.com). В настоящее время он полностью не соответствует стандартам, принятым в XML. Так, в 3DML активно используется значок "&", являющийся в XML сильно зарезервированным, кроме того, 3DML не зависит от регистра символов, что с позиций XML тоже неверно. Однако как раз сейчас 3DML коренным образом перерабатывается и приводится к стандартному синтаксису. В случае удачи разработчики из Flatland получают очень серьезный козырь в борьбе с главным конкурентом - языком VRML, который, "благодаря" своей структуре, никак не может стать XML-совместимым.
Рассмотрим подробнее, что же представляет собой 3DML. Я уже рассказывал об этом языке описания VR в статье "Этот плоский трехмерный мир", но, поскольку статья не выложена на сайт "Компьютерры", да и сам 3DML с тех пор претерпел ряд серьезных изменений, вкратце раскрою методологию построения мирка и синтаксис языка еще раз.
Мирки в 3DML строятся из кубиков. Это значит, что ежели в детстве вам посчастливилось иметь конструктор "Лего", то понять принцип построения 3DML-сцены будет очень просто. Если детство было тяжелым и вместо "Лего" из игрушек вам достались только советские монстроподобные кирпичики-городки, придется немного посложнее, но и у вас получится. Если же вы в детстве вообще ни во что не играли - и читать дальше не стоит...
Итак. Мирок представляет собой трехмерный куб, состоящий из кубиков-блоков поменьше, размером 256х256х256 пикселов каждый. Разбиение мирка на подобные блоки весьма условно, поскольку в пределах отведенного пространства может находиться объект любой конфигурации - стена, окно, дверь, дерево и так далее. Важно то, что каждый блок является самостоятельным полноценным объектом, полностью описывающим занимаемый им участок. Блоки, из которых составляется мирок, являются предопределенными - так же, как в "Лего" есть тридцать-сорок видов деталек, так и в 3DML есть конечный набор блоков. Они сгруппированы в наборы, которые хранятся на www.flatland.com. При первоначальном обращении к мирку, использующему какой-либо набор блоков, последний подгружается и сохраняется на жестком диске пользователя. Таким образом, при последующем просмотре какого-нибудь другого мирка, использующего тот же самый набор, из Сети грузится только карта и пользовательские текстуры, что значительно ускоряет весь процесс.
Может показаться, будто подобная упрощенная конструкция не позволит создать что-либо мало-мальски интересное и серьезное. Но это не так! Ведь и в обычном HTML используется не так уж много тегов, а вариантов дизайна Web-страниц просто не счесть. На настоящий момент существует три официальных набора блоков и пять официальных наборов текстур, используемых по умолчанию (текстуры после первоначальной загрузки также кэшируются на жестком диске). Всего официальных блоков ровно сто. Существует также несколько неофициальных наборов блоков, расположенных на blocksets.flatland.com/unofficial [2], но как управляться с ними - известно лишь их создателям. Хотя для хакеров, я думаю, вскрыть эти наборы да посмотреть, что там такое внутри - пара пустяков... Если кто-нибудь сподобится - отпишите мне, я за вас порадуюсь.
Каждый блок в базовом наборе имеет собственную геометрию и предопределенный набор текстур, но, поскольку 3DML пророс все же из XML, все эти параметры (за исключением геометрии блока) могут быть переопределены. Блоки могут быть цельными, как, к примеру, стены, или "дырявыми", как двери. Разница в том, что в первый вы бьетесь лбом, а через второй проходите, не замечая, пусть даже на него и натянута каменная текстура. Если блок используется "как есть", без переопределения его параметров, то он полностью загружается и прорисовывается из кэша на диске.
Как строится описание мирка? Поскольку 3DML - один из "языков разметки", состоит он, как обычно, из заголовка и "тела". В заголовке определяется название окна, описываются используемые в сцене наборы блоков, указываются размеры карты мира в блоках в длину, ширину и высоту, цвет и текстура для земли и неба, уровень общего освещения и фоновый звук. Кроме того, в заголовке можно описать постоянный источник света типа солнца или луны, с приданием ему соответствующей текстуры.
Тело файла функционально делится на две части. Сначала проводится пользовательская настройка блоков, используемых при построении мирка. Это необходимо только в том случае, если стандартные атрибуты блока - текстура, цвет и прочее - вас не устраивают. Стандартный блок можно использовать без дополнительного описания.
После того как все блоки определены, строятся карты уровней. Они строятся последовательно снизу вверх, для каждого уровня указанная в заголовке матрица [длина х ширина] должна быть заполнена блоками полностью. Карты уровня располагаются в файле последовательно, начиная с нижнего и заканчивая самым верхним.
Построение собственно карты не представляет ровным счетом никаких сложностей. Каждому блоку из каждого набора присвоен ASCII-символ, и для каждого уровня составляется текстовая табличка, каждый символ в которой представляет собой один блок. Вот так, к примеру, выглядит простейший уровень:
###...###
#.......#
#.......#
#.......#
#########
Здесь знаком "#" обозначены стены, а знаком "." - пол. А вот так этот уровень будет выглядеть в браузере (рис. 3).
Важным отличием текущей версии 3DML от его прародителя является поддержка двухсимвольных карт. В них каждый блок описывается уже комбинацией из двух символов, что теоретически позволяет иметь более восьми тысяч разных видов строительных элементов. При этом можно переопределить существующий базовый блок, например, обтягивая его другими текстурами, и присвоить ему другой ASCII-определитель. Таким образом, мы наблюдаем классический объектно-ориентированный подход, и в результате возможности нашего "Лего" возрастают безгранично.
Для создания простого мира больше ничего и не требуется - достаточно лишь обозначить точку входа, с которой и начинается путешествие по мирку, да закрыть теги. Но 3DML никогда не завоевал бы такой популярности, если бы все его возможности сводились только к созданию примитивных коробочек, по которым можно побродить из стороны в сторону. Чем дальше развивается этот язык, тем большую гибкость и мощь он предоставляет разработчикам, и, несомненно, главной заслугой плоскоземельцев следует считать вовсе не разработку синтаксиса языка, а создание и поддержку великолепного "движка" для всей этой трехмерной прелести.
А под капотом - "роверовский" движок...
К созданию собственного мотора во Flatland подошли серьезно. Как нельзя более кстати пришлось и стратегическое партнерство с Aureal Semiconductor, разработавшей известную технологию трехмерного звука A3D и создавшей чипы Vortex и Vortex 2.
На настоящий момент на сайте Flatland доступна версия 1.2 3DML-клиента под названием "Rover". Ее отличия от стоявшей у меня ранее версии 0.9.х видны невооруженным глазом. В предыдущей версии о плавном перемещении не было и речи, любое движение выглядело дискретным, блочным. Это напоминало даже не "Doom", а "Wolfenschtein 3D" (если кто еще помнит такую игру). При "повороте головы" по правой кнопке "тело" не поворачивало вслед, и дальнейшее движение вперед отправляло вас, к вящему удивлению, совсем в другом направлении. Теперь движение стало помягче, хотя перемещаться можно по-прежнему только в одном из восьми направлений - вправо-влево, вперед-назад и по диагонали. Ошибка с "голововерчением", к счастью, устранена.
Rover стал поддерживать A3D-звук. С этой технологией мирки стали гораздо живее - объекты теперь отражают и поглощают звук. Правда, для этого требуется подгрузить драйверы www.a3d.com/html/home/main/3d_tools.htmс , а еще лучше - обзавестись соответствующей звуковой картой на чипе Vortex. Добавлена также поддержка трехмерных ускорителей, причем включать и выключать как ускорение, так и 3D-звук можно прямо из браузера. Вообще, элементы управления клиента очень удобны и хорошо продуманны.
Наконец появился и релиз под Windows NT, а в настоящее время ведется разработка Rover под другие операционные системы и платформы, включая Macintosh. Что приятно: размер Rover'a по-прежнему значительно меньше существующих VRML-клиентов, а работает он (на глазок) много быстрее. Существуют версии клиентов для Internet Explorer, Netscape Navigator и AOL Browser.
Теперь о неприятном. Как и прежде, Rover способен работать лишь в 16-битном цвете. Другим и, пожалуй, наиболее важным его недостатком является невозможность одновременного просмотра нескольких виртуальных миров в разных окнах браузера. Таким образом, основной закон Интернет-серфинга - открыть как можно больше окон и прыгать между ними, пока контент грузится в фоновом режиме, - для Rover'а неприменим. Но в целом софтинка оставляет впечатление очень цельной, быстрой и хорошо "вылизанной": за неделю работы - никаких багов.
Что можно, что нельзя
Поскольку рассмотрение 3DML без Rover и наоборот совершенно бессмысленно, в дальнейшем эту систему виртуальной реальности в целом я буду обзывать по-простому, по-народному "Плоскоземельем".
Несомненно, виртуальность эта не была бы реальной (или наоборот - реальность виртуальной?), если бы не подчинялась физическим законам. И законы эти в Плоскоземелье весьма похожи на настоящие. Во-первых, есть гравитация. То есть с башни можно шлепнуться вниз, а на отвесную стену залезть никак нельзя - это, кстати, стоит учесть начинающим тридемиургам: если вы уж решили выкопать ров и залить его водой, будьте любезны сделать лесенку, по которой из него можно будет выбраться...
Во-вторых, есть переменные окружения - существуют земля и небо (их создают обычно на первый день), солнце и луна (их, к сожалению, можно только прибить гвоздиком к небу - двигаться они пока что не желают), а также фоновое журчание ручейков, жужжание пчел и молчание ягнят.
В-третьих, в Плоскоземелье, как я уже говорил, очень хорошо поставлен звук. Помимо фонового можно создавать точечные источники звука, привязывать их к определенным местам мирка, а благодаря технологии A3D еще и добавлять пространственные эффекты [3].
Кроме того, существует еще и свет. В последних версиях поддерживается аж семь видов световых источников, включая цветные, пульсирующие, направленные, крутящиеся и многое другое. Свет, кстати, просчитывается довольно детально, и при желании, используя разнообразные комбинации световых и звуковых эффектов, можно создавать чрезвычайно психоделические мирки. Более того, в ближайших релизах заявлена поддержка mp3-файлов, что позволит понаделать ну совсем отвязных штук. Только представьте: спускаетесь вы в какое-нибудь подземелье, а там "Pink Floyd" наигрывает...
Для придания исчерпывающего реализма можно использовать собственные текстуры, включая прозрачные и анимированные, а также спрайтовые персонажи в сцене. То есть в принципе технологическое развитие Плоскоземелья достигло той стадии, на которой можно было бы создавать онлайновые игры на уровне старого "Doom"... Если бы не одно но: эти миры мертвы.
По крайней мере, были таковыми до выхода последней версии Rover. Интерактивности в них не было ни капли. Одинокому страннику [4], занесенному в один из районов этой странной земли, оставалось лишь бродить, глядя по сторонам, слушать звуки, читать поясняющие надписи, рассматривать мигалки да перескакивать по ссылкам и телепортам из одного безлюдья в другое... И ни тебе кнопочку нажать, ни дверку открыть - все вокруг застывшее, как декорация в дешевом Луна-парке.
Понятное дело, интерес к таким миркам быстро пропадал. И разработчики ввели в спецификацию языка новый тег