3D Internet: будущее из прошлого

Вначале было слово… Слово было передано на компьютер размером с комод посредством UUCP и выведено на монохромный монитор знакополями 8х8. Затем появился Web и добавил к словам статичные образы. Еще несколько календарей сменилось, и стало возможным передать звук. Сегодня, когда Интернет превратился в гибрид телевизора и музыкального центра, логичным шагом вперед станет придание ему следующего, третьего измерения. Ведь может таким его и хотели видеть когда-то, набирая первое Слово.

 

Кадр из фильма «Трон» (1982). Трехмерная графика давно превзошла кино, но трехмерные интерфейсы все еще в пути к потребителям.

VRML: опередивший время

Virtual Reality Modeling Language — «язык моделирования виртуальной реальности», был разработан в 1995 году изначально с прицелом на создание интерактивных 3D демонстраций поверх World Wide Web. Чтобы вы могли оценить всю смелость его создателей, в 1995 году типичное подключение к Интернет осуществлялось посредством телефонного модема с максимальной скоростью передачи 33600 бит/с, и даже скорость цифровых абонентских линий не превышала 128 кбит/с. В условиях, когда полноцветная картинка передавалась на компьютер пользователя минуты, трехмерный Интернет казался плодом нездорового воображения третьесортного писателя-фантаста. Но разработкой стандарта занимались люди из знаменитой Silicon Graphics Inc., которым было не привыкать претворять фантастику в реальность.

Сам файл 3D сцены (в терминологии стандарта — «мира») представлял собой текстовый документ, в котором похожим на HTML языком разметки были описаны основные компоненты виртуального «мира»: модели из вершин и поверхностей, цвета, материалы, освещение. Связь с дополнительными компонентами сцены, например текстурами, осуществлялась обычными гиперссылками. Анимация объектов и интерактивность обеспечивались включенными в файл «мира» скриптами cлегка измененного JavaScript. Такой подход позволял уместить достаточно большую сцену в файл объемом в сотню килобайт, а также обеспечивал минимально приемлемое отображение на компьютере пользователя — основные элементы сцены отображались сразу, а текстуры подгружались по мере следования. Интересно, что спецификация не содержала зависимостей от оборудования и API рендеринга трехмерной графики, вопросы вывода изображения целиком возлагались на разработчика браузера.

Простейшая сцена — пример из стандарта:

#VRML V2.0 utf8
Transform {
children [
NavigationInfo { headlight FALSE } # We'll add our own light
DirectionalLight { # First child
direction 0 0 -1 # Light illuminating the scene
}
Transform { # Second child - a red sphere
translation 3 0 1
children [
Shape {
geometry Sphere { radius 2.3 }
appearance Appearance {
material Material { diffuseColor 1 0 0 } # Red
}
}
]
}
Transform { # Third child - a blue box
translation -2.4 .2 1
rotation 0 1 1 .9
children [
Shape {
geometry Box {}
appearance Appearance {
material Material { diffuseColor 0 0 1 } # Blue
}
}
]
}
] # end of children for world
}

VRML встретил широкую поддержку у разработчиков программного обеспечения для Интернет — уже к 1998 году и Internet Explorer от Microsoft, и Navigator от Netscape поддерживали VRML «из коробки». Появлялись и первые «VRML-миры» в Интернет, энтузиасты создавали трехмерные воплощения целых кварталов городов, чтобы обойти которые в виртуальной реальности требовался добрый десяток реальных минут. В 1997 году VRML 2.0 стал стандартом ISO-IEC-14772. Трехмерный Интернет из фантастики стал казаться завтрашним днем.

Но завтрашний день для VRML не наступил. «Родитель» стандарта, компания SGI, попала в череду тяжелых ударов по финансовому и внутреннему положению компании и уже не могла уделять внимание совершенствованию стандарта. Стих и энтузиазм создателей и пользователей виртуальных миров — каналы, да и компьютеры пользователей оставались слишком слабыми для отображения трехмерных сцен в реальном времени. Крах «доткомов» оборвал потоки инвестиций в Интернет и похоронил амбициозные проекты создания целых трехмерных городов, обещавших вывести процесс пользования Интернет-сервисами на новый уровень. Из браузеров исчезла «штатная» поддержка VRML, его прямые наследники, такие как X3D, за последующие годы так и не смогли вернуть внимание к концепции 3D Интернет. VRML сейчас применяется лишь на сайтах музеев и выставочных центров, а также в агентствах недвижимости.

Несколько сайтов, сделанных по технологии VRML (для просмотра в Windows потребуется установить плагин):

Битва стандартов: тяжело тянуть и жалко бросить

Java 3D

Язык и набор инструментов Java изначально предлагал мощные средства реализации графических приложений в Web и в 1999 году уже содержал всю необходимую функциональность для создания интерактивных 3D страниц. Увы, с использованием потенциала в Интернет дела обстояли еще хуже, чем у VRML. Единственным заметным использованием технологии, которое удалось найти автору в Рунете, стал сайт Санкт-Петербургского музея «Эрмитаж». Сейчас Java 3D разрабатывается независимо от основного пакета Java и требует отдельной установки.

Shockwave 3D

 Фирма Macromedia в 2001 году попыталась подхватить выпавшее из рук SGI знамя проводника 3D технологий в Интернет. Платформой был выбран уже имевший к тому времени значительную популярность пакет Shockwave. Интеграция средств 3D в привычную среду разработки и значительная база пользователей позволили добиться несколько большего успеха, нежели Java 3D. Однако, проприетарная технология, содержавшая на тот момент множество проблем с безопасностью, требовавшая загрузки «тяжелого» клиента и полностью недоступная на альтернативных платформах не вызвала большого энтузиазма у Интернет-сообщества. Крупных интерактивных проектов в Интернет на базе Shockwave 3D так и не появилось, зато технология оказалась востребованной у разработчиков онлайн-игр, самой известной из которых стал RASTERWERKS, многопользовательский 3D-шутер от первого лица.

Некоторые ресурсы, использующие Shockwave 3D:

Винни-Пух и все-все-все…

Кроме Sun и Macromedia, попытки создать механизмы трехмерности Сети предпринимало еще множество компаний, от гигантов Microsoft (Chrome, а позже 3D-объекты в .NET Framework) и Adobe (Atmosphere) до малоизвестных стартапов. Все их постигла единая судьба: полное неприятие рынком и быстрое удушение руками разработчика. Ряд компаний сделали шаги в другом направлении: сначала разработать свое «killer-application», а потом предложить технологию всем желающим. Linden Research Inc., небольшая компания из Калифорнии, смогла воплотить почти все мечты пионеров трехмерного Интернет в своей вселенной Second Life, но пристальное рассмотрение MMO-игр выходит за рамки данной статьи.

 

Second Life. Вот так мог бы выглядеть весь Интернет.

Google O3D API: король умер — да здравствует король!

Интернет-гигант Google извлек уроки из чужих ошибок, в том числе главный урок — для общедоступного 3D в Интернет нужен открытый и бесплатный стандарт. O3D API сначала был обкатан в приложениях самого Google и лишь весной 2009 года представлен широкой публике.

Концепция O3D наследует основную идею VRML — данные о сцене содержатся непосредственно в теле HTML документа. Описание и вывод сцены с точки зрения HTML представляют собой внедренный JavaScript, интерпретируемый библиотекой O3D в браузере клиента. Внешние ресурсы, как текстуры, так и целые сцены, подгружаются отдельно по необходимости. Таким способом от платформы зависит лишь библиотека интерпретации и рендеринга.

Описание и вывод сцены сводится к построению двух «деревьев»: дерева объектов и дерева рендеринга. Дерево объектов представляет собой иерархическую структуру, описывающую вершины, поверхности и материалы.

 

На объекты отдельными функциями накладываются текстуры и применяются различные эффекты. Вся работа с эффектами в стандарте идет через привычные пиксельные и вершинные шейдеры, также заданные прямо в теле документа с помощью собственного языка описания шейдеров — O3D Shading Language. O3DSL, по утверждениям разработчиков, совмещает в себе лучшее из языка HLSL, используемого в Microsoft DirectX, и «фирменного» языка NVIDIA Cg. Дерево рендеринга осуществляет пофазовый вывод изображения с учетом заданных положения виртуальной камеры и размера области вывода.

Пример кода O3D:

<script type="text/javascript" src="o3djs/base.js"></script>
<script type="text/javascript" id="o3dscript">
o3djs.require('o3djs.util');
o3djs.require('o3djs.math');
o3djs.require('o3djs.rendergraph');
o3djs.require('o3djs.primitives');
o3djs.require('o3djs.effect');
o3djs.require('o3djs.event');
o3djs.require('o3djs.io');
// Events
// Run the init() once the page has finished loading.
window.onload = init;
// global variables
var g_o3d;
var g_math;
var g_client;
var g_pack;
var g_viewInfo;
var g_commonEffect;
var g_eye;
var g_target;
var g_up;
var g_finished = false; // for selenium testing
function scrollMe(e) {
g_eye = g_math.mulScalarVector((e.deltaY < 0 ? 11 : 13) / 12, g_eye);
g_viewInfo.drawContext.view = g_math.matrix4.lookAt(g_eye, g_target, g_up);
}
/**
* Creates the client area.
*/
function init() {
o3djs.util.makeClients(initStep2);
}
/**
* Initializes O3D, loads the effect, and draws the quads.
* @param {Array} clientElements Array of o3d object elements.
*/
function initStep2(clientElements) {
// Initialize global variables and libraries.
var o3dElement = clientElements[0];
g_o3d = o3dElement.o3d;
g_math = o3djs.math;
g_client = o3dElement.client;
// Create a pack to manage our resources/assets
g_pack = g_client.createPack();
// Create the render graph for a view.
g_viewInfo = o3djs.rendergraph.createBasicView(
g_pack,
g_client.root,
g_client.renderGraphRoot);
// Create and load the effect.
g_commonEffect = g_pack.createObject('Effect');
o3djs.effect.loadEffect(g_commonEffect, 'shaders/texture-only.shader');

O3D API имеет очень низкий порог вхождения, требуется видеокарта с поддержкой OpenGL или DirectX и шейдеров версии 2.0, плагин для Windows и MacOS «весит» меньше мегабайта. С помощью конвертера в формат COLLADA можно быстро импортировать готовые сцены из средств 3D моделирования, таких как 3D Studio и Maya. Но признание со стороны Web-разработчиков стандарту еще только предстоит заслужить.

Примеры использования Google O3D:

Flash 3D: нормальные герои всегда идут в обход

Серьезным препятствием на пути к 3D Интернет остается скорость каналов. Разница между внутрикомпьютерными магистралями, оперирующими гигабайтами в секунду, и все еще не достигающими уровня мегабайтов в секунду каналами между сервером и клиентом труднопроходимой пропастью лежит на пути трехмерных интерфейсов. Но что, если воспользоваться транспортом, изначально рассчитанным на низкоскоростные каналы? 3D функции пакета Adobe Flash, разработанные как подспорье для ускорения вывода видео высокого разрешения, оказались подходящей транспортной платформой для Интернет-движков нового поколения.

Alternativa 3D

Движок Alternativa 3D, разрабатываемый в России уже около двух лет, позволяет создавать 3D приложения для Интернет в обычных средствах разработки для Flash, таких как Flex Builder или Creative Suite, просто подключив три SWC библиотеки. На стороне клиента требуется лишь наличие плагина Adobe Flash версии 9 или 10. С учетом, что поддержка современных версий Flash есть на 98% подключенных к Интернет компьютеров (по данным Adobe), это означает околонулевые затраты на вхождение в рынок. Движок поддерживает как полигональные, так и спрайтовые объекты, BSP-деревья, текстурирование и работу с материалами, интерактивность, зачатки физики. Alternativa3D может быть использован в некоммерческих проектах бесплатно.

Примеры реализаций:

Away3D

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

Примеры реализаций:

Быть или не быть — вот в чем вопрос

Несмотря на пятнадцать лет истории, все прошлые и нынешние реализации 3D графики в Интернет оставляют желать много лучшего. Мультимедиа платформы от Adobe имеют широкое распространение, снимая с разработчиков приложений часть головной боли по продвижению опорной технологии, но неблагоприятно воспринимаются растущей армией поклонников открытых стандартов и альтернативных платформ. Полная открытость VRML и O3D в свою очередь не вызывает энтузиазма у разработчиков — далеко не всем нравится подход, когда весь код трехмерной сцены, на создание которой ушло множество человеко-часов, лежит открыто в теле веб-страницы. Некоторая «топорность» графических библиотек Java до недавнего времени ставила крест на широком использовании технологии для насыщенных, эффектных интерактивных приложений.

Нерешенной остается и проблема канала доставки на компьютер пользователя. Очевидное решение выполнять интерфейс на сервере и лишь передавать конечные изображения и реакцию пользователя, вроде нашумевшего проекта OnLive, упирается в отсутствие эффективных серверных технологий по работе с 3D графикой — типичные серверные платформы не позволяют установить мощные графические ускорители, а сами ускорители упорно продолжают бессмысленное соревнование по тепловыделению с кипятильниками и паяльниками.

Но основная проблема заключается в полной невостребованности самих технологий в целом. По мере написания статьи у автора создалось ощущение, что все ждут, пока аудитория сама попросит нового вида Интернет-сервисов. И пока идет ожидание «у моря погоды», можно бесконечно сетовать на сложность и несовершенство технологий, «дохлые» каналы и серверы, двухмерность устройств ввода-вывода, кивать на отсутствие прогресса трехмерных интерфейсов в «обычных» компьютерных программах и операционных системах. Но аудитория сама по себе не появляется, ее следует создавать. Ведь в нашем веке уже известно, что миллион обезьян за пишущими машинками никогда не напишет «Войну и Мир» Толстого. Широкое внедрение 3D Интернет может произойти только путем создания «убойных» сервисов, способных продвинуть любую технологию в массы. Трехмерному Интернет нужны свои YouTube и FeedBurner. Автор надеется, что подобные сервисы сейчас вызревают где-то в умах (и руках) Интернет-сообщества, иначе следующую статью о трехмерном Интернет вы увидите лишь еще лет через десять, а разработки наших современников перекочуют в раздел «устар., нач. ХХI века».

Использованные материалы:

  1. Спецификация VRML97
  2. Документация Google O3D API
  3. Java 3D project
  4. Adobe Flash
  5. Сайт проекта Alternativa3D
  6. Сайт проекта Away3D
  7. Блог «The Geeks of 3D»
  8. Блог «Виртуальный мир Second Life»
  9. Tron Wiki
 / 
DrEvil