Виртуальная реальность будет стоить до 7 миллиардов долларов к 2020 году . В это время сеть определенно не будет оставаться исключительно 2D средой. На самом деле уже есть несколько простых способов перенести виртуальную реальность в браузер. С ней также невероятно весело работать!
Чтобы начать свое приключение в виртуальной сети, есть три возможных способа сделать это:
- JavaScript, Three.js и Ориентация на устройство просмотра
- JavaScript, Three.js и WebVR (Мой новый предпочтительный метод!)
- CSS и WebVR (все еще очень рано)
Я перейду к каждому и покажу краткое описание того, как каждый из них работает.
JavaScript, Three.js и Ориентация на устройство просмотра
Один из способов работы большинства проектов виртуальной реальности на основе браузера — через событие браузера deviceorientation . Это сообщает браузеру, как устройство ориентировано, и позволяет браузеру подобрать устройство, если оно было повернуто или наклонено. Эта функция в перспективе VR позволяет вам определять, когда кто-то смотрит вокруг, и настраивать камеру, чтобы она следила за ним.
Чтобы создать замечательную 3D-сцену в браузере, мы используем JavaScript-инфраструктуру three.js , которая позволяет легко создавать 3D-фигуры и сцены. Это берет большую часть сложности из создания трехмерного опыта и позволяет вам сосредоточиться на том, что вы пытаетесь собрать в вашей сцене.
Я написал две демонстрации здесь в SitePoint, которые используют метод Device Orientation:
- Внедрение виртуальной реальности в Интернет с помощью Google Cardboard и Three.js
- Визуализация потока Twitter в VR с Three.js и Node
Если вы новичок в three.js и знаете, как собрать сцену, я бы посоветовал взглянуть на две вышеупомянутые статьи для более глубокого знакомства с этим методом. Я расскажу о ключевых понятиях здесь, однако это будет на более высоком уровне.
Ключевые компоненты каждого из них включают в себя следующие файлы JavaScript (вы можете получить эти файлы из демонстрационных примеров выше, а также найти их в загруженных примерах three.js ):
-
three.min.js
— наш фреймворк three.js -
DeviceOrientationControls.js
— это плагин three.js, который обеспечивает ориентацию устройства, которую мы обсуждали выше. Он двигает нашу камеру, чтобы встретить движения нашего устройства. -
OrbitControls.js
— это резервный контроллер, который позволяет пользователю перемещать камеру с помощью мыши, если у нас нет устройства, которое имеет доступ к событию Ориентация устройства. -
StereoEffect.js
— эффект Three.js, который разделяет экран на стереоскопическое изображение, слегка наклоненное для каждого глаза, как в VR. Это создает реальный разделенный экран виртуальной реальности без необходимости делать что-то сложное.
Ориентация устройства
Код для включения элементов управления Ориентация устройства выглядит так:
function setOrientationControls(e) { if (!e.alpha) { return; } controls = new THREE.DeviceOrientationControls(camera, true); controls.connect(); controls.update(); element.addEventListener('click', fullscreen, false); window.removeEventListener('deviceorientation', setOrientationControls, true); } window.addEventListener('deviceorientation', setOrientationControls, true); function fullscreen() { if (container.requestFullscreen) { container.requestFullscreen(); } else if (container.msRequestFullscreen) { container.msRequestFullscreen(); } else if (container.mozRequestFullScreen) { container.mozRequestFullScreen(); } else if (container.webkitRequestFullscreen) { container.webkitRequestFullscreen(); } }
Прослушиватель событий DeviceOrientation предоставляет значение альфа, бета и гамма при наличии совместимого устройства. Если у нас нет никакого альфа-значения, оно не меняет наши элементы управления, чтобы использовать Ориентацию устройства, поэтому мы можем вместо этого использовать элементы управления орбитой.
Если он имеет это альфа-значение, то мы создаем элемент управления Ориентация устройства и предоставляем его нашей переменной camera
для управления. Мы также установили его, чтобы установить нашу сцену в полноэкранный режим, если пользователь нажимает на экран (мы не хотим смотреть в адресную строку браузера, когда в VR).
Управление орбитой
Если это альфа-значение отсутствует, и у нас нет доступа к событию Device Orientation, этот метод вместо этого предоставляет элемент управления для перемещения камеры, перетаскивая ее мышью. Это выглядит так:
controls = new THREE.OrbitControls(camera, element); controls.target.set( camera.position.x, camera.position.y, camera.position.z ); controls.noPan = true; controls.noZoom = true;
Основными вещами, которые могут сбить с толку из приведенного выше кода, являются noPan
и noZoom
. По сути, мы не хотим физически перемещаться по сцене с помощью мыши, и мы не хотим иметь возможность увеличивать или уменьшать масштаб — мы только хотим смотреть вокруг.
Стерео эффект
Чтобы использовать стереоэффект, мы определяем его так:
effect = new THREE.StereoEffect(renderer);
Затем при изменении размера окна мы обновляем его размер:
effect.setSize(width, height);
Внутри каждого requestAnimationFrame
мы устанавливаем сцену для рендеринга через наш эффект:
effect.render(scene, camera);
Это основы того, как работает стиль Ориентация устройства для достижения VR. Это может быть эффективно для красивой и простой реализации с Google Cardboard, однако это не так эффективно на Oculus Rift. Следующий подход намного лучше для Rift.
JavaScript, Three.js и WebVR
Хотите получить доступ к ориентации гарнитуры VR, как Oculus Rift? WebVR — способ сделать это в настоящее время. WebVR — это ранний и экспериментальный Javascript API, который предоставляет доступ к функциям устройств виртуальной реальности, таких как Oculus Rift и Google Cardboard. На данный момент он доступен на Firefox Nightly и нескольких экспериментальных сборках Mobile Chrome и Chromium . Следует иметь в виду, что спецификация все еще находится в стадии разработки и может быть изменена, поэтому поэкспериментируйте с ней, но знайте, что вам может потребоваться со временем что-то скорректировать.
В целом, API WebVR обеспечивает доступ к информации об устройстве VR через:
navigator.getVRDevices
Я не буду вдаваться в подробности здесь (я расскажу об этом более подробно в своей будущей статье SitePoint!), Если вы хотите узнать больше, ознакомьтесь с черновиком редактора WebVR . Причина, по которой я не буду вдаваться в подробности, заключается в том, что существует гораздо более простой способ реализации API.
Этот вышеупомянутый более простой метод для реализации API WebVR заключается в использовании WebVR Boilerplate от Boris Smus . Он обеспечивает хороший уровень базовой функциональности, которая реализует WebVR и изящно ухудшает работу с различными устройствами. В настоящее время это лучшая реализация веб-VR, которую я видел. Если вы хотите создать виртуальную реальность для Интернета, это лучшее место для начала!
Чтобы начать использовать этот метод, загрузите WebVR Boilerplate на Github .
Вы можете сосредоточиться на редактировании index.html
и использовании всех файлов в этом наборе, или вы можете внедрить определенные плагины в ваш собственный проект с нуля. Если вы хотите сравнить различия в каждой реализации, я перенес мою визуализацию потока Twitter в VR с примером Three.js и Node сверху в поток Twitter с поддержкой WebVR в VR .
Чтобы включить этот проект в свой собственный с нуля, вам понадобятся следующие файлы:
-
three.min.js
—three.min.js
наш фреймворк three.js -
VRControls.js
— плагин three.js для управления виртуальной реальностью через WebVR (это можно найти вbower_components/threejs/examples/js/controls/VRControls.js
в проектеbower_components/threejs/examples/js/controls/VRControls.js
) -
VREffect.js
— плагин three.js для самого эффекта VR, который отображает сцену для Oculus Rift (это можно найти вbower_components/threejs/examples/js/effects/VREffect.js
в проектеbower_components/threejs/examples/js/effects/VREffect.js
) -
webvr-polyfill.js
— это polyfill для браузеров, которые еще не полностью поддерживают WebVR (это можно найти на GitHub, а также вbower_components/webvr-polyfill/build/webvr-polyfill.js
в кодеbower_components/webvr-polyfill/build/webvr-polyfill.js
) -
webvr-manager.js
— это часть кода Boilerplate, который управляет всем для вас, в том числе предоставляет способ входа и выхода из режима VR (это можно найти вbuild/webvr-manager.js
)
Для его реализации требуется всего несколько настроек метода Ориентация устройства. Вот обзор для тех, кто хочет попробовать этот метод:
управления
Элементы управления VR довольно просты в настройке. Мы можем просто назначить новый объект VRControls
переменной controls
мы использовали ранее. Элементы управления орбитой и ориентация устройства не должны быть необходимыми, так как Boilerplate теперь должен заботиться о браузерах без возможностей VR. Это означает, что ваша сцена также должна работать на Google Cardboard!
controls = new THREE.VRControls(camera);
Эффект VR
Эффект очень похож на реализацию, как было StereoEffect
. Просто замените этот эффект нашим новым VREffect
:
effect = new THREE.VREffect(renderer); effect.setSize(window.innerWidth, window.innerHeight);
Тем не менее, мы не делаем этого эффекта в этом методе. Вместо этого мы рендерим через нашего менеджера VR.
VR менеджер
Менеджер виртуальной реальности заботится обо всех наших входах / выходах из виртуальной реальности и т. Д., Так что именно здесь наша сцена окончательно отображается. Мы изначально настроили его следующим образом:
manager = new WebVRManager(renderer, effect, {hideButton: false});
Диспетчер VR предоставляет кнопку, которая позволяет пользователю переходить в режим VR, если он работает в совместимом браузере, или в полноэкранный режим, если его браузер не поддерживает VR (полноэкранный режим — это то, что нам нужно для мобильных устройств). Параметр hideButton
указывает, хотим ли мы скрыть эту кнопку или нет. Мы определенно не хотим это скрывать!
Затем наш вызов рендеринга выглядит так: он использует переменную timestamp
, полученную из нашей функции three.js update()
:
function update(timestamp) { controls.update(); manager.render(scene, camera, timestamp); }
Со всем этим у вас должна быть работающая реализация VR, которая переводит себя в различные форматы в зависимости от устройства.
renderer.getSize()
возвращает ошибку? Это сводило меня с ума на несколько часов, но все, что вам нужно сделать, чтобы это исправить, — обновить three.js!
Как выглядит шаблон WebVR в действии
Вот как выглядит мой пример с Twitter в браузере с поддержкой VR:
Вот это в представлении Oculus Rift, которое появляется, когда вы щелкаете по значку VR:
Это то, как выглядит вид на смартфоне, ориентация устройства по-прежнему позволяет нам смотреть вокруг сцены, и у нас нет разделенного экрана. Отличный отзывчивый вид контента:
Если щелкнуть значок VR на мобильном устройстве, мы получим полноэкранный вид для устройств в стиле Google Cardboard:
CSS и WebVR
Mozilla также стремится использовать возможности просмотра виртуальной реальности в своем браузере в версиях Firefox Nightly, однако это довольно рано! Мне не повезло заставить его работать на моем Mac и Oculus. Виды соглашений, о которых упоминал Владимир Вукичевич из Firefox, включают в себя интеграцию CSS 3D-преобразований с полноэкранным режимом VR.
В качестве примера из блога Владимира он говорит, что элементы с transform-style: preserve-3d
должны визуализироваться дважды с двух точек зрения, чтобы перенести их в VR:
#css-square { position: absolute; top: 0; left: 0; transform-style: preserve-3d; transform: translate(100px, 100px, 100px); width: 250px; height: 250px; background: blue; }
Если вам известны демоверсии, использующие VR и CSS, пожалуйста, дайте мне знать! Я не смог отследить. Идея перенести HTML и CSS часть сети в VR, без сомнения, является действительно интригующей концепцией. В какой-то момент Интернет неизбежно войдет в сферу виртуальной реальности, когда мы все медленно переключаемся на виртуальные устройства!
Вывод
Мир технологий медленно, но верно будет охватывать Виртуальную реальность в ближайшие годы, поскольку наши технологические возможности соответствуют нашим диким стремлениям! Единственной вещью, которая будет стимулировать принятие VR и ее ценность, является содержание. Нам нужно получить VR-контент для пользователей VR! Что может быть лучше и проще, чем через Интернет?
Если вы решите сделать демонстрацию виртуальной реальности, используя этот код, пожалуйста, поделитесь им в комментариях или свяжитесь со мной в Twitter ( @thatpatrickguy ). Я хотел бы надеть мой Oculus Rift или Google Cardboard и попробовать его!
У меня есть набор ссылок на VR и AR через JavaScript для тех, кто ищет краткий справочник. Перейдите в Dev Diner и ознакомьтесь с моим Dev Diner VR и AR с Руководством для разработчиков JavaScript , полным обеих ссылок, упомянутых в этой статье, других замечательных статей SitePoint и многого другого. Если у вас есть другие замечательные ресурсы, которых у меня нет в списке, пожалуйста, дайте мне знать!