Наставник
PC Magazine/RE logo
©СК Пресс 1996
PC Magazine, May 28, 1996, p. 196

Трехмерные миры в Web

Джефф Просис


Введение в язык моделирования виртуальной реальности (VRML).

Всего за два быстро прошедших года "Всемирна паутина" (World Wide Web) прошла путь от непонятного орудия ученых и инженеров до общемирового культурного явления. Web можно представить себе как множество соединенных гиперсвязями документов на языке HTML. Путешествие по Web без HTML было бы "активным развлечением" типа наблюдения за таянием льда. Именно HTML позволяет даже начинающему оператору с помощью одного из текстовых редакторов создавать красочные страницы для Web. И именно благодаря HTML подмножество запутанного языка SGML (сокращение от Standard Generalized Markup Language - Унифицированный язык разметки документов) было преобразовано в стандарт, признанный во всем мире.

Сегодня существует еще один язык сценариев, применяемый в Web, который может стать столь же важным и во всех отношениях столь же распространенным, как и HTML. Этот язык называется Virtual Reality Modeling Language (Язык моделирования виртуальной реальности), или VRML. Это язык для создания в Web трехмерных миров. Представьте себе страницу Web, которая выглядит и действует, как экран известной игры DOOM, и вы получите хорошее представление о VRML и его назначении. Документ VRML представляет собой "оттиск" виртуального мира, по которому вы можете перемещаться с помощью браузера VRML или VRML-расширения браузера HTML.

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

В VRML решается проблема пропускной способности, необходимой для работы в реальном масштабе времени с трехмерной графикой в сети. Браузер VRML загружает VRML-файлы, содержащие описания трехмерных сцен, точно так же, как HTML-браузер загружает HTML-файлы с описанием страниц. Браузер интерпретирует описания сцен и управляет рендерингом получающихся изображений на главном компьютере. Рендеринг производится через объектив виртуальной камеры, которая перемещается, наклоняется и поворачивается в соответствии с командами пользователя. Вообразите себе путешествие по всей системе Web не с помощью щелчков мыши на выделенных словах в HTML-документах, а путем открывания дверей, ведущих из комнаты в комнату в виртуальном здании, изображающем киберпространство Web; соответственно, щелчки на объектах переносят вас в другие узлы VRML.

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

Итак, давайте посмотрим, что же это такое - VRML и чем он отличается от HTML.

Прошлое, настоящее и будущее VRML

Истоки VRML можно обнаружить на первой годичной конференции World Wide Web, проведенной в Женеве, Швейцария, в марте 1994 г. На ней Тим Бернерс-Ли - "отец" World Wide Web и один из создателей HTML - и Дэвид Рэггет провели заседание секции под названием "Языки с метками для описания виртуальной реальности и World Wide Web". (Впоследствии значение буквы M в VRML было изменено: вместо "Метка" (Markup) она стала обозначать "Моделирование" (Modeling).) Участники секции составили список основных требований к трехмерному эквиваленту HTML и список адресов электронной почты групп, заинтересованных в продолжении работы над спецификацией VRML.

Проект спецификации на VRML 1.0 был представлен на следующей конференции World Wide Web в октябре 1994 г. Вместо того чтобы разрабатывать язык трехмерных сценариев "с нуля", авторы спецификации получили разрешение фирмы Silicon Graphics воспользоватьс подмножеством текстового языка описания сцен из программы трехмерного моделирования под названием Open Inventor. Данное подмножество, в котором дл представления трехмерных объектов использованы понятные для человека команды типа "Куб" или "Цилиндр", и послужило основой спецификации VRML 1.0. В этот черновой вариант были включены также специфические дл Web команды создания связей с другими VRML-узлами Web аналогично тому, как в HTML-документы могут входить связи с другими документами. Однако в спецификацию не вошли команды для создания динамического VRML-среды и прежде всего потому, что авторы хотели закончить версию 1.0 и запустить ее в работу максимально быстро.

Версия VRML 1.0 была официально представлена мировому сообществу в апреле 1995 г. В настоящее врем в сети Internet доступна предварительная версия VRML 1.1 и собираются замечания для версии 2.0. В версии 1.1 будут исправлены некоторые недостатки версии 1.0 и добавлено несколько новых возможностей, например некоторые (весьма ограниченные) средства дл использования звука и анимации. В версии 2.0, характеристики которой представлены в Web-документе под заголовком "Подвижные миры" (Moving Worlds), VRML трансформируется в высокой степени интерактивную многопользовательскую среду, в которой объектам соотнесены их свойства и поведение, а "участники" сцены могут видеть друг друга на экране. Различные спецификации и предложения по текущей и будущим версиям VRML можно найти в следующих Web-узлах :

Язык VRML

Язык VRML близок к языку сценариев, а его документы состоят только из ASCII-текстов. По договоренности файлы VRML получают расширение WRL (сокращение от "world"). Самой первой строчкой в каждом файле VRML должно быть выражение

#VRML V1.0 ascii

Первый символ (#) указывает, что далее следует комментарий. VRML означает, что это VRML-файл, V1.0 дает номер версии, а символы ascii показывают, что содержимое файла - ASCII-текст. При появлении последующих версий VRML номер версии в первой строке даст браузеру возможность определить, какую версию VRML поддерживает WRL-файл. По-видимому, будущие версии VRML будут допускать применение и отличных от ASCII наборов символов в интересах пользователей во всем мире.

VRML-документы, или, как их обычно называют, графы сцен, состоят из "узлов" (nodes), определяющих объекты сцены, а также задающих свойства этих объектов - размеры, цвет, текстура поверхности и т.п. Следующий VRML-файл, комбинируя три куба, создает трехмерный знак "плюс":

#VRML V1.0 ascii Separator { Cube { width 8.0 } Cube { heigth 8.0 } Cube { depth 8.0 } } Separator и Cube - два из 36 типов узлов, определенных в VRML 1.0 (см. таблицу "Типы узлов в VRML 1.0"). Узлы, расположенные внутри фигурных скобок узла Separator, группируются. Узел Cube строит обобщенный куб. Полный синтаксис для узла Cube имеет вид Cube { width 2.0 height 2.0 depth 2.0 } Здесь width, height и depth - это поля, которые определяют атрибуты узла - в данном случае это размеры куба по направлениям x, y и z. По умолчанию принимается, что ширина, высота и глубина куба равны 2 единицам. Значения по умолчанию применяютс автоматически ко всем полям, для которых они не указаны в явном виде. Например, выражение Cube {} "по умолчанию" создает куб с размерами 2 единицы по всем направлениям.

В VRML, как и в большинстве трехмерных графических систем, построение объектов выполняется в системе координат x, y, z. Кубы, построенные командой Cube, имеют центр в начале координат. Чтобы поместить один объект рядом с другим, нужно построить первый из них, затем переместить систему координат с помощью узла Translation, после чего построить второй объект. Приведенный ниже VRML-файл строит трехмерный знак "плюс", а затем, сдвинув начало координат на 10 единиц вниз, в направлении отрицательной оси y, строит сферу:

#VRML V1.0 ascii Separator { Cube { width 8.0 } Cube { height 8.0 } Cube { depth 8.0 } #Start a new group Separator { Translation { translation 0.0 -10.0 0.0 } Sphere { Radius 4.0 } } } Систему координат можно также поворачивать и масштабировать с помощью узлов Rotation и Scale. Узел Transform позволяет перемещать, поворачивать и масштабировать систему координат за один шаг, а узел MatrixTransform осуществляет преобразование в соответствии с заданной оператором матрицей преобразования 4х4.

Теперь предположим, что нам хотелось бы в объекты предыдущих примеров ввести цвет. Узел Material задает свойства поверхностей, входящих в сцену. В узле Material имеется несколько факультативных полей, в том числе поле diffuseColor, которое задает цвет рассеянного света, отражаемого поверхностью, и поле shininess, задающее блеск поверхности. Внося в файл изменения еще раз, мы можем сделать знак "плюс" ярко-желтым, а сферу - голубой и блестящей:

#VRML V1.0 ascii Separator { Material { diffuseColor 0.9 0.9 0.0 } Cube { width 8.0 } Cube { height 8.0 } Cube { depth 8.0 } #Start a new group Separator { Translation { translation 0.0 -10.0 0.0 } Material { diffuseColor 0.0 0.0 1.0 shininess 1.0 } Sphere { Radius 4.0 } } } Числа в поле diffuseColor задают красную, зеленую и синюю компоненты цвета. Числа 0.0 0.0 0.0 соответствуют черному, а 1.0 1.0 1.0 - яркому белому цвету. Величина блеска 1.0 соответствует сильно отражающей (зеркальной) поверхности.

Чтобы создать еще более реалистично выглядящие сцены, можно воспользоваться узлами текстуры, которые заставляют поверхности выглядеть, например, как кирпичные стены, дерево или мрамор. В VRML 1.1, вероятно, будут предусмотрены "анимированные" текстуры, которыми можно будет пользоваться, в частности, дл имитации ТВ-экрана. Узлы LOD (level of detail - уровень детальности) помогут выполнять рендеринг миров VRML с различной детализацией в зависимости от расстояни между наблюдателем и объектами сцены. Одно из применений узлов LOD - экономия рабочих циклов центрального процессора (и повышение производительности) благодаря тому, что отображение текстур делается только тогда, когда они достаточно близки, чтобы их можно было различить.

Мощный узел WWWInline дает возможность импортировать сцены из других VRML-файлов. Буквы WWW в имени узла указывают на связь с World Wide Web. Узел WWWInline позволяет извлекать VRML-файлы с локального жесткого диска или из удаленного узла Web. Естественно, файлы в удаленных узлах идентифицируются их URL-адресами. Узел WWWAnchor создает оперативную связь с другим миром VRML. Этот узел - VRML-эквивалент ячейки связки в HTML. Модифицируя наш файл еще один раз, мы можем связать наш трехмерный знак "плюс" с Информационным архивом VRML (Repository) Центра суперкомпьютеров Калифорнийского университета в Сан-Диего:

#VRML V1.0 ascii Separator { WWWAnchor { name "http://www.sdsc.edu/vrml" description "VRML Repository at SCSD" Material { diffuseColor 0.9 0.9 0.0 } Cube { width 8.0 } Cube { height 8.0 } Cube { depth 8.0 } #Start a new group Separator { Translation { translation 0.0 -10.0 0.0 } Material { diffuseColor 0.0 0.0 1.0 shininess 1.0 } Sphere { Radius 4.0 } } } В поле name (имя) узла WWWAnchor находитс URL-адрес, а в поле description (описание) содержитс строка текста, описывающая данную связь. Когда указатель расположен на ячейке связки, многие браузеры выводят на экран эту строку описания. Узлы WWWInline и WWWAnchor могут обращаться и к не-VRML-ресурсам, например к HTML- и GIF-файлам, однако разные браузеры могут отличаться тем, как именно они обрабатывают эти не-VRML-ресурсы.

Вы, вероятно, понимаете, что этот простой пример едва затрагивает поверхность того, что можно делать с помощью VRML. Просматривая названия узлов в таблице, вы можете представить себе, куда можно было бы забраться с нашим примером, если бы мы продолжили эту работу. VRML 1.0 - мощный язык описания сцен, включающий в себ многие из главных концепций современной трехмерной компьютерной графики от базовых многогранных объектов до создания теней, освещения и применения текстур. Что касается систем, работающих в среде Windows 95 или Windows NT, уже существует несколько моделирующих программ для VRML и ряд таких программ - в перспективе. Строить большие модели VRML вручную непрактично, но очень полезно построить простую модель строчка за строчкой для понимания того, как работает VRML.

Ресурсы VRML

Куда можно обратиться, если вы хотите более подробно изучить VRML? Начните с просмотра самой Web. Вашей первой целью должен быть Информационный архив VRML, поддерживаемый Центром суперкомпьютеров в Сан-Диего (http://www.sdsc.edu/vrml). Там находятся десятки полезных ресурсов VRML и в том числе связи с VRML-документацией и спецификациями, ответы на часто задаваемые вопросы (FAQ - frequently asked questions) по VRML и связи с узлами, из которых по сети можно получить VRML-браузеры и моделирующие программы.

После того как вы просмотрели Информационный архив, обратитесь к узлу, содержащему стандарты VRML (http://www.vrml.org). Среди всего прочего, вы найдете там связи с популярными VRML-узлами и "тест-страницу" VRML, содержащую примеры VRML-файлов. Еще один узел, содержащий полезную информацию по VRML, - это http://www.lightside.com/3dsite/cgi/VRML-index.html.

Я прочитал или по крайней мере просмотрел многие из имеющихся книг по VRML и могу от всей души рекомендовать две из них. Лучшая и самая подробна книга по VRML на сегодня - это The VRML Sourcebook (1996, John Wiley & Sons), написанная сотрудниками Центра суперкомпьютеров в Сан-Диего Andrea L. Ames, David R. Nadeau и John L. Moreland. Книга легко читается, охватывает практически все вопросы, связанные с VRML 1.0, и содержит весьма полезную информацию по теоретическим основам преобразований координат, расчета теней, отображения текстур и других принципов трехмерной графики. В ней приведено много примеров и иллюстраций. Если вы планируете купить всего одну книгу по VRML и вас прежде всего интересует изучение всех деталей и подробностей языка VRML, то вам следует приобрести именно эту книгу.

Вторая книга, которую я нашел полезной дл ознакомления с VRML, - это книга Mark Pesce. VRML - Browsing and Building Cyberspace (1995, New Riders Publishing). И хотя эта книга не так подробна, как предыдущая, она содержит интересные исторические экскурсы, связанные с разработкой языка (ее автор - один из создателей VRML), полезный учебный и удобно организованный справочный материал. Кроме того, с книгой поступают компакт-диск с VRML-браузерами, программами для создания и просмотра VRML-миров, HTML-версия спецификации VRML 1.0 и другие средства, которые помогут вам быстро освоиться с VRML.

Типы узлов в VRML 1.0
Название узла Описание
Узлы основных форм
Cone Рисует конус.
Cube Рисует куб.
Cylinder Рисует цилиндр.
Sphere Рисует сферу.

Узлы точки, линии и грани

Coordinate3 Задает трехмерные координаты точек, линий и граней.
IndexedFaceSet Рисует тело по граням, заданным набором точек.
IndexedLineSet Рисует тело по линиям, заданным набором точек.
PointSet Рисует тело по набору точек.

Узлы текста

AsciiText Создает строку ASCII-текста.
FontStyle Управляет гарнитурой шрифта, стилем и размером знаков текста, созданного узлом AsciiText.

Узлы материала

Material Задает свойства материала поверхности.
MaterialBinding Накладывает на тела материал поверхности.
Normal Задает трехмерные векторы нормалей для расчета теней.
NormalBinding Привязывает векторы нормалей к телам.
ShapeHints Задает порядок следования вершин, типы граней и другие свойства, важные для рендеринга.

Узлы текстур

Texture2 Задает рисунок текстуры.
Texture2Transform Производит заполнение области двумерной текстурой.
TextureCoordinate2 Задает координаты области, заполняемой текстурой.

Узлы преобразований

MatrixTransform Производит преобразование координат в соответствии с заданной матрицей.
Rotation Производит поворот системы координат.
Scale Изменяет масштаб объектов, создаваемых этим узлом.
Transform За один шаг производит перенос, поворот и изменение масштаба.
Translation Переносит систему координат.

Узлы камеры

OrthographicCamera Создает камеру, выполняющую рендеринг сцен в ортографической проекции.
PerspectiveCamera Создает камеру, выполняющую рендеринг сцен в перспективной проекции.

Узлы освещения

DirectionalLight Создает направленное освещение параллельными лучами света.
PointLight Создает точечный источник света, излучающий во все стороны.
SpotLight Создает точечный источник света, излучающий свет конусом, как карманный электрический фонарь.

Узлы группирования

Group Задает группу узлов.
Separator Задает группу узлов и, по окончании построения группы, восстанавливает все параметры сцены.
Switch Задает группу узлов и выполняет построение только одного члена группы.
TransformSeparator Задает группу узлов и, по окончании построения группы, восстанавливает выбранные параметры сцены.

Узлы связки и импорта

WWWAnchor Создает связь с другим VRML-файлом.
WWWInline Импортирует сцену из другого VRML-файла.

Прочие узлы

Info Создает узел, содержащий информацию, не выводимую на дисплей, например об авторских правах.
LOD Задает уровни детальности для рендеринга объектов, расположенных на разных расстояниях от глаза.
Джефф Просис - внештатный редактор журнала PC Magazine. Скоро в издательстве Microsoft Press выйдет его новая книга Programming Windows 95 with MFC.