Архивы: по дате | по разделам | по авторам

Реальная виртуальность

Архив
автор : Александр Медведев   10.08.1999

Блуждая по просторам Интернета, постоянно рискуешь напороться на некий объект, способный легко уничтожить уйму столь дефицитного личного и пока еще столь дорогого сетевого времени. Подобные черные дыры виртуальных закоулков, без сомнения, известны любому пользователю, сделавшему хотя бы несколько ходок по Сети, не говоря уже о профессиональных серферах и сталкерах. Странные существа люди - они даже составляют специальные хит-парады, посвященные подобным местам периодического времяубийства. Да вы и сами хорошо знаете всяческие "Рэмблеры" и прочие "Топ 1000". С другой стороны, еще никто не пытался создать хит-парад Интернет-технологий, способных качественно и масштабно уничтожать личное время. Пожалуй, HTML, mp3 и... и запишите VRML в первую пятерку!


Как это все случилось, в какие вечера...

Все началось 27 октября 1969 года, с первого TCP пакета. Затем были telnet 1.0.0.2 и ftp 1.0.0.2. Еще позже появился ftp.cc.mil и прочие DNS. В 1989 году начал развиваться WWW. Впрочем, все это события глубоко довиртуальной эры.

В январе 1994 года Mark Pesce и Tony Parsi придумывают концепцию трехмерного HTML, своеобразного языка описания трехмерных сцен с поддержкой гиперссылок, и создают пакет программ и экспериментальный формат, названные ими Labyrinth - первый прообраз VRML. В апреле 1994 года их проект участвует в First International Conference on the World Wide Web (Первой интернациональной конференции по WWW), где и звучит впервые термин VRML. Кстати, тогда он расшифровывался как Virtual Reality Markup Language, и лишь позже "markup" был заменен на более научно-звучное "modeling". В июне 1994 года известный журнал "Wired" создает список рассылки, посвященной вопросам создания VRML, на который в течение недели подписывается около 1000 специалистов. Для 1994 года это было крайне серьезным числом. Они-то и определяют направление развития концепции, придавая ей в ходе многочисленных письменных обсуждений первые очертания. До сих пор соблюдается хорошая традиция развития языка: постоянный поиск решений, удовлетворяющих большинство участвующих в обсуждении добровольцев, то есть столь любимый первым президентом нашей Родины консенсус.

 
СПРАВКА

VRML: аббревиатура от Virtual Reality Modeling Language (по отечественному ЯМВР, язык моделирования виртуальной реальности). Стандарт языка описания трехмерных сцен, содержащих объекты, а также возможных взаимодействий между объектами и наблюдателем. Основное назначение - описание набора объектов (сцены) в системах виртуальной реальности. Основное на данный момент применение - представление статической и интерактивной информации, как в сети Интернет, так и на материальных носителях в виде виртуальной трехмерной среды, содержащей различные объекты. Существует три распространенных версии языка: VRML 1.0, 2.0 и VRML 97. На данный момент наиболее широко поддерживаемой версией является VRML 2.0. Развитие языка координируется VRML Architecture (по другим источникам, Advisory) Group (Группа архитектуры VRML), известной под аббревиатурой VAG.


Практически сразу было решено не заниматься изобретением велосипеда, а взять за основу какой-либо существующий язык описания трехмерных сцен, коим становится разработанный в Silicon Graphics формат файлов программной библиотеки Open Inventor. Gavin Bell, инженер SGI, модифицировал этот формат, создав первый вариант языка VRML, анонсированный в октябре 1994 года на Второй всемирной конференции по WWW. 5 ноября предложенный Беллом вариант превратился в официальный проект стандарта VRML 1.0. Его коллега, Paul Strauss, написал первый VRML-клиент, назвав его труднопроизносимым именем QvLib. Клиент был впервые представлен для платформы SGI в январе 1995 года.

Печальная легенда гласит, что столь неудобоваримое название программы было придумано с целью постоянно напоминать авторам о необходимости чуть позже подыскать более удобное и красивое наименование, что, естественно, так никогда сделано и не было. Позже исходные тексты QvLib были предоставлены всем желающим, вызвав неконтролируемое распространение VRML по аппаратным платформам и сайтам.

Вскоре Parsi создает свою собственную компанию, Intervista, и начинает разработку трехмерного браузера, основанного на VRML. Этот браузер получил имя WorldView и успешно существует до сих пор.

Тогда же Parsi, Pesce и один известный архитектор из Сан-Франциско осуществляют проект Virtual SOMA - создают VRML-модель южной части пригорода, призванной стать центром мультимедиа и Интернет-бизнеса. Это было первым масштабным полукоммерческим применением VRML-технологии. В апреле 1995 года SGI анонсирует новый браузер WebSpace, открывая широкую кампанию по продвижению VRML. В ней принимают участие такие фирмы, как Netscape, DEC, Spyglass и NEC. Начинается рекламная кампания в прессе. На конференции "SIGGRAPH '95" язык VRML, несомненно, является основной темой. С этого момента начинается стремительная лавина анонсов новых браузеров, средств создания VRML-сцен и просто содержащих VRML-контент сайтов.

В августе 1995 года Pesce анонсирует создание VAG, начинается разработка проекта стандарта VRML 2.0. Первоначальный проект забит и затоптан в ходе обсуждения, но присланы шесть новых вариантов от ведущих компьютерных фирм:

А - Active VRML от Microsoft,
Б - Dynamic Worlds от GMD со товарищи,
В - HoloWeb от Sun,
Г - Moving Worlds от Silicon Graphics со товарищи,
Д - Out of this World от Apple,
Е - Reactive Virtual Environment от IBM Japan.

В ходе обсуждений выявляется лидер - Moving Worlds. Вскоре благородная Apple отказывается от своего проекта в пользу Moving Worlds, остальные гиганты продолжают настаивать на своих вариантах. Постепенно Moving Worlds становится проектом стандарта VRML 2.0 и передается в ISO. В июне 1996 года представители VAG договариваются, подписывая окончательное соглашение считать работы над VRML 2.0 завершенными. Кстати, несмотря на поиск консенсуса, работа по созданию и принятию стандарта продвигается невероятно быстро. В декабре 1996 года стандарт ISO/IEC DIS 14772-1 (VRML 2.0) принят ISO окончательно. А в октябре 1997 года был создан проект стандарта новой расширенной версии языка, названной, в соответствии с последними веяниями, VRML 97. Следует отметить, что VRML - абсолютный рекордсмен по скорости разработки и принятия официального стандарта среди всех компьютерных языков.

Из чего сделаны мальчики?

Это я, разумеется, хватил через край. Из чего сделаны мальчики и девочки - известно всем еще со времен счастливого детства и ненавязчивой детской поэзии. Компьютерные же мальчики и девочки, как известно, сделаны из закрашенных треугольников. А вот из чего состоит VRML, мы сейчас попытаемся узнать.

Итак, нам необходимо обеспечить выполнение двух основных действий:

А - описать виртуальный мир,
Б - предъявить этот мир пользователю, позволив ему взаимодействовать с ним.

Решим эти задачи, попробовав себя в непростой роли создателей VRML. В первую очередь необходимо создать информационную структуру, описывающую мир  [1]. Для этого используется чрезвычайно гибкая и удобная (для пользователя или математика, но не для реализующего ее обработку программиста) структура: граф, то есть набор узлов (в терминологии VRML - node), дополненный информацией о связях между ними. Узлы содержат поля (fields) и события (events). Cвязи между узлами графа реализуются с помощью полей, имеющих тип указателя на другой узел. Фактически события также представляют собою указатель на объект, способный эти события либо генерировать, либо воспринимать. Отсюда возникает разделение событий на два типа: выходящие (EventOut) и входящие (EventIn) соответственно.

Благодаря подобной концепции, VRML, несомненно, относится к объектно-ориентированным языкам. Итак, вся эта красота, схематически изображенная на рис. 1, и описывает мир, разумеется, в VRML-понимании. Поля Field1 и 2 представляют собою первичные параметры (например, цвет или точка в трехмерном пространстве), Field3 является набором указателей на другие узлы, а Event1 - событием, поступающим от двух узлов.

Структура есть. Предположим, что основные типы узлов, событий и полей также определены. Но пока это лишь на бумаге и в мыслях, нам же необходимо создать синтаксис языка - формальное описание возможного содержимого файла, в рамках которого наш мир будет формулироваться человеком или редактором. А затем, возможно, он будет интерпретироваться и демонстрироваться программой-клиентом (браузером). Разумеется, браузер также необходимо разработать и написать, хотя, формально, рамки стандарта заканчиваются уже на этапе формулировки синтаксиса и описания функционирования определенных заранее узлов. Конкретная реализация программы, то, как она будет представлять информацию пользователю, и то, как она будет обеспечивать его взаимодействие с виртуальным миром, остаются на совести разработчиков.

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

СтратегияОписание трехмерного виртуального мира, возможность взаимодействия с объектами.
Понятийный уровеньПонятие узла, набора, поля, события.
Событийный уровеньПравила генерации событий.
Структурный уровеньКонкретные типы полей и событий (точка, число, цвет, URL...). Конкретные типы узлов, их структура (источник...). Синтаксис описания структур ([], {}, ROUTE, DEF...).
Языковой уровеньСинтаксис описания узлов (Field, EventIn...). Имена предопределенных типов полей (SFColor, SFBool...). Имена предопределенных типов событий (addChildren...). Имена предопределенных типов узлов (Anchor, Material...).
Клиентский уровеньСреда распространения VRML-описаний (файлы, HTTP...). Среда визуализации (OpenGL-устройства, принтер...).


Немного об устройстве мира

VRML представляет собой строго структурированный язык, и для понимания того, как устроен мир VRML, необходимо хотя бы минимальное знакомство с его синтаксисом. Любители формальных грамматик и полных описаний, а также просто заинтересованные читатели могут заглянуть на www.arch.soton.ac.uk/Manuals/VRML/spec/index.html, где и обнаружат исчерпывающее описание синтаксиса и концепций VRML 2.0, мы же здесь лишь вкратце рассмотрим основные лингвистические конструкции.

Основными строительными кирпичиками языка VRML, его атомами являются первичные типы. Все типы полей делятся на два класса: содержащие одно значение (так называемые SF типы) и наборы (MF). Для пущей простоты имена первых всегда начинаются с букв SF, а вторых - с MF. Например, если у нас есть поле, набор целого типа MFInt32 под названием MyIntegerSet, мы можем описать его следующим образом:

MFInt32 MyIntegerSet

Кстати, VRML болезненно чувствителен к разнице между заглавными и строчными буквами. Поэтому sfint32 и SFInt32 - два различных идентификатора. Некоторые первичные типы имеют как SF, так и MF разновидность. Так, если тип называется Color, то соответствующие имена записываются как SFColor и MFColor. Всего первичных типов девятнадцать.

Пойдем дальше. Основным объектом языка является узел. VRML-файл (программа) состоит из некоторого количества прототипов (определений новых типов узлов), некоторого количества узлов, заполненных конкретной информацией, и некоторого количества событийных связей между узлами. Все эти элементы могут быть расположены в произвольном порядке.

Специальное слово ROUTE позволяет установить автоматическую отправку конкретного исходящего события одного узла в конкретное входящее событие другого. Можно создавать именованные экземпляры узлов с возможностью их одновременного использования в нескольких местах программы с помощью команды DEF. Подобный именованный узел может быть далее использован с помощью другого ключевого слова - USE.

Заполним для примера узел предопределенного типа Anchor, попутно продемонстрировав использование неразлучной парочки DEF/USE:

# Простой красный материал
DEF SimplyRedMaterial Material {
diffuseColor 1 0 0
}
# Ссылка в виде шарика
Anchor {
url "http://www.microsoft.com/"
children [
Shape {
geometry Sphere {
radius 2.0
}
appearance Appearance {
material USE SimplyRedMaterial
}
}
]
}

В данном примере мы определяем ссылку на сайт всеми любимой компании, которая (ссылка, не компания) содержит объект, содержащий, в свою очередь, геометрическую информацию (сфера) и описание материала, имеющего красный цвет в рассеянном свете. Уф... Вот такая вложенная структура данных понадобилась ради одного маленького красненького шарика! Не правда ли, VRML - достаточно эффективное средство убийства времени набирающего подобные программы человека?

Но вернемся к примеру. Для того чтобы получить полноценный VRML-файл, нам осталось добавить в начало такую вот строчку:

#VRML V2.0 utf8

Теперь этот файл можно назвать "КакВамУгодно.wrl", открыть в соответствующем обозревателе и даже кликнуть по красному шарику, после чего, естественно, попасть в гости к Биллу.

До сих пор мы имели дело с заранее определенными в языке типами узлов Anchor, Shape, Sphere и Material. Но если мы того пожелаем, можно легко определить и новый тип узла, а связав события, происходящие в узлах, с помощью оператора ROUTE, мы сможем выстроить сложные иерархии объектов, в которых изменение каких либо параметров одного узла вызывает незамедлительную реакцию всей системы. Толкнул кубик, а с ним двинулся и шарик, и все такое...

К сожалению, места для того, чтобы привести какую-либо VRML-программу, демонстрирующую возможности языка, в журнале просто не хватит: благодаря особенностям синтаксиса VRML, даже простенький код, описывающий изображенную на рис. 2 табуретку и дающий ей возможность реагировать на внешние раздражители, занимает более 60 строк. Так что, набив всего полтора килобайта кода, можно легко получить табуретку синего цвета с красными ножками, способную повернуться вокруг себя за две секунды, если к ней прикоснулись. Избушка, избушка, встань к монитору... Если же мы добавим поддержку Java Script (точнее, ECMA Script), заставив нашу табуретку циклически менять размер (дышать), пока над ней находится курсор обозревателя, вне зависимости от того, прикоснулись мы к ней или нет, то код разрастется еще на полкилобайта. А представьте себе, сколько займет мало-мальски серьезная сцена со сложными моделированными объектами! Таким образом, VRML при практически неограниченных возможностях создания сложных интерактивных миров страдает ха-арошей избыточностью.

Клиенты всегда правы

Создав мир, мы, скорее всего, не удовлетворимся рассматриванием десятиметровых "простыней" кода, а захотим все же взглянуть на творение рук своих в трехмерном, виртуально-реальном виде. И тут нам понадобится VRML-клиент.

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

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

Эти действия являются стандартными практически для любой клиентской программы.

Опишу два самых успешных, распространенных и самозабвенно конкурирующих обозревателя, соответствующих стандарту VRML 2.0.

Cosmo Software - Cosmo Player

Разработка SGI. Представляет собою plug-in для браузера, интегрируется в Netscape 3.0 и выше или Microsoft Explorer 4.0 и выше. Для отображения использует библиотеку OpenGL и, следовательно, аппаратную акселерацию на любом OpenGL-совместимом ускорителе. Для создания объемного звука используется DirectSound (DirectX 3.0 и выше), следовательно, также поддерживается аппаратное ускорение. Клиент соответствует стандарту VRML 2.0 и VRML 97. Поддерживает полноценные Java-классы (а не только ECMA Script). Файлы VRML 1.0 автоматически конвертируются в VRML 2.0. Все передаваемые данные могут быть запакованы в GZIP-архив для уменьшения времени загрузки мира. Может быть использован любой программой как встроенный ActiveX элемент, что позволяет программистам легко добавлять поддержку просмотра VRML в свои продукты. Содержит множество полезных мелочей, начиная с отката действий и заканчивая отладочной консолью для создающих VRML-файлы разработчиков. Среди досадных ошибок - неправильная обработка параметров некоторых источников освещения, некоторые проблемы с заданием скорости перемещения из программы и поддержкой анимационных GIF-изображений. В поставку входит очень миролюбивая игра "Chomp" с акулой в главной роли, полностью написанная на VRML и ECMA Script (рис. 3). Отличные скоростные качества. Данный клиент всячески рекомендуется мною к использованию.

Поддерживаются различные платформы, в том числе: SGI, Windows (9x/NT/3.11) и Mac OS. Последнюю версию (Cosmo Player 2.1), море информации и отлично оформленный сайт с VRML-афишками вы найдете по адресу cosmosoftware.com.

Microsoft VRML 2.0 viewer

Разработка... понятно чья. Основан на коде упомянутого ранее WorldView. Представляет собою plug-in для браузера, интегрируется в Microsoft Internet Explorer 3.0 и выше. Для отображения использует библиотеку DirectX 3.x и выше и, следовательно, аппаратную акселерацию на любом DirectX-совместимом ускорителе. Соответствует стандарту VRML 2.0 (есть некоторые несущественные расхождения). Поддерживает полноценные Java-классы (а не только ECMA Script), но только как URL, а не внутри VRML-текста. Поддерживает файлы VRML 1.0. Есть некоторые проблемы с GZIP-файлами, приводящие, как правило, к предупреждениям, которые можно игнорировать, но иногда останавливающим загрузку миров. Есть некоторые проблемы с реализацией ProximitySensor и обработкой сообщений таймера и событий, связанных с взаимодействием, что крайне печально. Достаточно компактный и удобный интерфейс. Несколько бестолковые настройки. Производительность (немного) и визуальное качество (сильно) уступают Cosmo Player. Рекомендуется как замена Cosmo Player в случае невозможности по какой-либо причине использовать его.

Более подробная и глубокая справочная информация, подробно рассмотрено большое количество неоднозначных аспектов конкретной реализации. Не может быть использован как ActiveX-элемент в сторонних программах. Платформа - только Windows 9x/NT. Последнюю версию, информацию и устаревшую галерею вы найдете по адресу www.microsoft.com/vrml.

Впрочем, "полуось" (IBM OS/2) также не забыта разработчиками: OS/2 VRML viewer можно поискать, например, по адресу INDY.EAGEN.com/WarpSpace.

 
ПОДДЕРЖИМ ОТЕЧЕСТВЕННОГО ПРОИЗВОДИТЕЛЯ!

Сергей Scout Кащавцев

На мой взгляд, Александр в своей статье совершенно незаслуженно обошел вниманием крупного игрока на рынке VRML - бывшую московскую фирму "ПараГраф", превратившуюся ныне в международную корпорацию и переименованную в Parallel Graphics. В настоящий момент они предлагают два VRML-клиента, VRML-скринсейвер, а также средства разработки. Подробнее ознакомиться с этим софтом (и скачать клиентов) можно на www.paragraph.ru, здесь же я вкратце перечислю предлагаемые программы.

Cortona - VRML-клиент, представляющий собой plug-in к браузерам IE и NN. Оптимизирован под Pentium III, поддерживает следующие функции:

- OpenGL;
- DirectX и Direct3D,
- язык Java;
- VRML 97, VRML 2.0, VRML 1.0;
- External Authoring Interface (EAI), кроме того, клиент обладает собственным интерфейсом CAI (Cortona Automation Interface), основанным на технологии ActiveX Automation;
- сплайны и NURBS-поверхности;
- обеспечивает дополнительные возможности обнаружения и обработки столкновений в 3D сценах.

Islands - многопользовательский VRML-клиент, позволяющий общаться с другими пользователями сети в виртуальных трехмерных сценах, помещать 3D-объекты в сцены, управлять ими в многопользовательском режиме, обмениваться текстовыми сообщениями, просматривать двумерные и трехмерные Web-сайты, загружать и просматривать локальные трехмерные сцены и объекты - в общем, эдакий виртуальный клуб по интересам.

Ну и, конечно, два пакета для создания VRML - Internet Space Builder и Internet Scene Assembler, позволяющие забыть о кошмарах синтаксиса.

Бр-р! Хорошая штука VRML, конечно, но писать его руками, в отличие от 3DML, я бы никогда не рискнул. Хотя, может, кому-то это и нравится - я знавал фанатика, писавшего руками PostScript...


Скальпель, пинцет... огурец...

Существует огромное множество инструментария для работы с VRML. Сформулируем, вкратце, основные категории подобных продуктов:

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

Где красиво убить время

- http://iis.kaist.ac.kr/~leekj/VR/vrsite.html - лучший набор ссылок на имеющие какое-либо отношение к VRML места в Сети. Библиография по статьям про VRML. Интересно, толково, хорошо систематизировано, большой охват и много, много, много... И, хотя две трети ссылок безнадежно устарели, этот сайт строжайше рекомендован к посещению.

- www.hitl.washington.edu/projects/knowledge_base/vrml.html - огромный каталог VRML-проектов и сайтов.

- www.tcp.ca/gsb/VRML/vrml-resources.htm - список VRML-ресурсов Сети.

- www.it.dtu.dk/~hahl/3dmed/index_old.html - медицинский проект с использованием VRML, на странице которого море полезных ссылок.

- www.digitalwizards.com.au/vrml - виртуальные VRML-шахматы и другие интересные вещи.Заключение

На данный момент VRML - лишь игрушка, пусть и очень многообещающая. Пройдут годы, прежде чем трехмерный интерфейс станет реальностью как для Сети, так и для операционных систем. Ничего не поделаешь, люди слишком консервативны. Да, технологии развиваются. Но это технологии. Люди развиваются медленнее...





1 (обратно к тексту) - С точки зрения функционального подхода правильно говорить: описание сцены или мир, но когда мы займемся программированием на языке VRML, будем использовать процессуальное название программа.





© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.