Концепции WebVR
Устарело: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она, возможно, уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживается только для совместимости. Избегайте её использования и, при возможности, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Примечание: API WebVR заменён на API WebXR. WebVR никогда не был ратифицирован как стандарт, реализовывался и активировался по умолчанию в очень немногих браузерах и поддерживал небольшое количество устройств.
В этой статье рассматриваются некоторые концепции и теория виртуальной реальности (VR). Если вы новичок в этой области, будет полезно разобраться в этих темах, прежде чем углубляться в код.
История VR
Виртуальная реальность — это нечто новое — концепция уходит корнями намного дальше, чем кампания по сбору средств Oculus Rift в 2012 году. Люди экспериментируют с ней на протяжении десятилетий.
В 1939 году был создан прибор View-Master, позволявший людям видеть 3D-изображения. Прибор отображал изображения, хранящиеся на картонных дисках, содержащих стереоскопические 3D-пары небольших цветных фотографий. После многолетней разработки военные заинтересовались использованием таких технологий, и в 1961 году появился проект Headsight — это включало шлем с видеоэкраном и системой отслеживания головы.
В течение следующих нескольких десятилетий проводились различные эксперименты, но они уже не ограничивались научными лабораториями и полями сражений. В конечном итоге поп-культура взяла верх, и режиссёры фильмов показали свои видения виртуальной реальности. Были созданы фильмы, такие как «Трон» (1982) и «Матрица» (1999), где люди могли перенести себя в совершенно новый кибермир или были заперты в нём, даже не зная, принимая его за реальный мир.
Первые попытки создания VR-игр были масштабными и дорогостоящими — в 1991 году Virtuality Group создала VR-аркадный автомат с очками и перенесла такие популярные игры, как Pac-Man, в виртуальную реальность. В 1993 году Sega представила свои VR-очки на выставке Consumer Electronics Show. Компании экспериментировали, но рынок и потребители не были убеждены — нам пришлось подождать до 2012 года, чтобы увидеть реальный пример успешного VR-проекта.
VR в наши дни
Так что же нового? Для достижения приемлемого пользовательского опыта оборудование виртуальной реальности должно предоставлять высокоточные, низкозадержные данные; компьютеры, на которых работают приложения VR, должны быть достаточно мощными, чтобы обрабатывать всю эту информацию. Только недавно такая точность и мощность стали доступны по доступной цене, если вообще доступны. Ранние прототипы VR стоили десятки тысяч долларов, в то время как более современные гарнитуры, такие как HTC VIVE и Meta Quest, доступны за сотни долларов, и существуют более дешёвые решения — мобильные решения на базе устройств, такие как Google Cardboard.
В программной сфере Valve создала программное обеспечение SteamVR, которое совместимо с VIVE и другими решениями и служит для предоставления доступа к программному обеспечению, например, к удобному VR-интерфейсу.
Сама технология здесь, и более дорогие гарнитуры со временем будут только удешевляться, чтобы больше людей в будущем могли сами наслаждаться виртуальной реальностью.
Устройства ввода
Обработка ввода для приложений виртуальной реальности — интересная тема — это совершенно новый опыт, для которого необходимо разрабатывать специализированные пользовательские интерфейсы. В настоящее время существует множество подходов, начиная от классической клавиатуры и мыши и заканчивая новыми, такими как Leap Motion и контроллеры VIVE. Это вопрос проб и ошибок, чтобы увидеть, что работает в конкретных ситуациях и какие входы лучше всего подходят для вашего типа игры.
Настройка оборудования VR
Существует два основных типа настройки: мобильная или подключенная к компьютеру. Их минимальные конфигурации оборудования следующие:
- Мобильная: гарнитура виртуальной реальности (HMD) создаётся с использованием смартфона — который выступает в качестве VR-дисплея — установленного в VR-крепление, такое как Google Cardboard, которое содержит необходимые линзы для стереоскопического отображения того, что проецируется на мобильный экран.
- Подключенная к компьютеру: VR-система подключается к вашему компьютеру — это включает в себя гарнитуру виртуальной реальности (HMD), содержащую экран с высоким разрешением в ландшафтном формате, на который выводятся изображения для левого и правого глаза, в которой также присутствует линза для каждого глаза, чтобы обеспечить разделение сцены левого и правого глаза (стереоскопическое зрение.) Настройка также включает в себя отдельный датчик положения, который определяет положение/ориентацию/скорость/ускорение вашей головы и постоянно передаёт эту информацию компьютеру.
Примечание: Системы, подключенные к компьютеру, иногда не включают в себя датчик положения, но обычно он есть.
Другое оборудование, которое дополняет VR-опыт, включает:
- Датчик распознавания рук: Датчик, отслеживающий положение и движение вашей руки, позволяя ей стать интересным контроллером и объектом в мирах VR-игр. Наиболее продвинутым на сегодняшний день является Leap Motion, который работает с компьютером (подключённым к Oculus Rift) и также может работать, подключённый к мобильному устройству (последний вариант находится на экспериментальной стадии).
- Джойстик: Мы можем настроить контроллер Xbox или аналогичный для работы как клавиатура в браузере — это открывает дополнительные возможности взаимодействия с VR-веб-страницей. Некоторые джойстики работают с мобильной настройкой, но они подключаются по Bluetooth, поэтому не работают с WebVR.
- Датчик отслеживания взгляда (экспериментальный): Проект FOVE — первая гарнитура, которая считывает едва заметные движения глаз.
- Датчик отслеживания мимики лица (экспериментальный): Исследователи из Университета Южной Калифорнии и подразделения Oculus компании Facebook тестировали новые способы отслеживания выражений лица и переноса их на виртуального персонажа.
- Более сложная система датчиков определения положения: Например, HTC VIVE оснащена двумя датчиками положения, расположенными в противоположных углах пространства, которые охватывают всё пространство и позволяют наслаждаться VR-опытом в пространствах до 5 м х 5 м.
Положение и ориентация, скорость и ускорение
Как упоминалось выше, датчик положения обнаруживает информацию о HMD и постоянно выводит её, что позволяет постоянно обновлять сцену в соответствии с движением, вращением и т. д. головы. Но что именно представляет собой эта информация?
Выводимая информация подразделяется на четыре категории:
-
Положение — Положение HMD вдоль трёх осей в трёхмерном координатном пространстве. x — слева направо, y — вверх-вниз, а z — вперёд-назад относительно датчика положения. В WebVR координаты x, y и z представлены массивом, содержащимся в
VRPose.position. -
Ориентация — Вращение HMD вокруг трёх осей в трёхмерном координатном пространстве. Тангаж — вращение вокруг оси x, курс — вращение вокруг оси y, и крен — вращение вокруг оси z. В WebVR тангаж, курс и крен представлены первыми тремя элементами массива, содержащегося в
VRPose.orientation. -
Скорость — Существуют два типа скорости, которые необходимо учитывать в VR:
- Линейная — Скорость вдоль любой оси, по которой перемещается HMD. Эту информацию можно получить, используя
VRPose.linearVelocity. - Угловая — Скорость вращения HMD вокруг любой оси. Эту информацию можно получить, используя
VRPose.angularVelocity.
- Линейная — Скорость вдоль любой оси, по которой перемещается HMD. Эту информацию можно получить, используя
-
Ускорение — Существуют два типа ускорения, которые необходимо учитывать в VR:
- Линейное — Ускорение движения вдоль любой оси, по которой перемещается HMD. Эту информацию можно получить, используя
VRPose.linearAcceleration. - Угловое — Ускорение вращения HMD вокруг любой оси. Эту информацию можно получить, используя
VRPose.angularAcceleration.
- Линейное — Ускорение движения вдоль любой оси, по которой перемещается HMD. Эту информацию можно получить, используя
Поле зрения
Поле зрения (FOV) — это область, которую каждый глаз пользователя может разумно увидеть. Оно примерно имеет форму пирамиды, лежащей на одной стороне, с вершиной внутри головы пользователя, а остальная часть пирамиды исходит от глаза пользователя. У каждого глаза есть своё поле зрения, слегка перекрывающее друг друга.
FOV определяется следующими значениями:
-
VRFieldOfView.upDegrees: Количество градусов вверх, на которое простирается поле зрения. -
VRFieldOfView.rightDegrees: Количество градусов вправо, на которое простирается поле зрения. -
VRFieldOfView.downDegrees: Количество градусов вниз, на которое простирается поле зрения. -
VRFieldOfView.leftDegrees: Количество градусов влево, на которое простирается поле зрения. - zNear, определённое
VRDisplay.depthNear: Расстояние от центра головы пользователя до начала видимого FOV. - zFar, определённое
VRDisplay.depthFar: Расстояние от центра головы пользователя до конца видимого FOV.
Значения по умолчанию для этих свойств будут немного отличаться в зависимости от VR-оборудования, хотя они обычно составляют около 53° вверх и вниз, и 47° влево и вправо, при zNear и zFar соответственно около 0,1 м и 10000 м.
Примечание: Пользователь потенциально может видеть всё вокруг себя, что является совершенно новой концепцией для приложений и игр. Постарайтесь дать людям причину оглядываться и видеть то, что находится за ними — заставьте их протянуть руку и найти вещи, которые не видны в самом начале. Опишите то, что находится за их спиной.
Концепции для приложений VR
В этом разделе обсуждаются концепции, о которых необходимо помнить при разработке приложений VR, о которых, вероятно, не нужно было задумываться при разработке обычных приложений для мобильных устройств или настольных компьютеров.
Стереоскопическое зрение
Стереоскопическое зрение — это нормальное зрение у людей и (большинства) животных — восприятие двух немного отличающихся изображений (по одному от каждого глаза) как одного изображения. Это приводит к восприятию глубины, помогая нам видеть мир в великолепном 3D. Чтобы воспроизвести это в приложениях VR, вам нужно отобразить две очень немного отличающиеся точки зрения бок о бок, которые будут восприниматься левым и правым глазами, когда пользователь использует гарнитуру.
Отслеживание головы
Основная технология, используемая для создания ощущения присутствия в 360º-сцене, благодаря гироскопу, акселерометру и компасу (магнитометру), встроенным в гарнитуру. Она имеет первостепенное значение, потому что заставляет наши глаза поверить, что мы находимся перед сферическим экраном, обеспечивая пользователям реалистичное погружение в холст приложения.
Напряжение глаз
Термин, часто используемый в VR, поскольку это основной недостаток использования гарнитуры — мы постоянно обманываем глаз тем, что показываем на холсте приложения, и это приводит к тому, что глаза работают гораздо больше, чем обычно, поэтому использование приложений VR в течение длительного времени может привести к напряжению глаз.
Чтобы свести к минимуму этот нежелательный эффект, необходимо:
- Избегать фокусировки на разных глубинах (например, избегать использования большого количества частиц с разными глубинами).
- Избегать схождения глаз (например, если у вас есть объект, который приближается к камере, ваши глаза будут следовать за ним и сходиться на нём).
- Использовать более темный фон с более приглушёнными цветами, где это возможно; яркий экран утомит глаза.
- Избегать резких изменений яркости.
- Избегать отображения пользователю больших объёмов текста для чтения. Также следует быть осторожным с расстоянием между глазами/камерой и текстом для чтения. 0,5 м неудобно, а на расстоянии более 2 м стереоэффект начинает разрушаться, поэтому предпочтительнее значение где-то посередине.
- Будьте осторожны с расстоянием между объектами и камерой в целом. Oculus рекомендует минимальное расстояние фокусировки в 0,75 м.
- Использовать указатель, если пользователю нужно взаимодействовать с объектом в сцене — это поможет им правильно указать на него с меньшими усилиями.
В целом, путь наименьшего зрительного усилия обеспечит пользователю менее утомительный опыт.
Морская болезнь
Если разработчики не будут проявлять максимальной осторожности, приложения VR могут на самом деле вызвать у своих пользователей недомогание. Этот эффект возникает, когда стимулы, которые получают их глаза, не соответствуют тому, чего ожидает тело.
Чтобы избежать морской болезни у наших пользователей (или по крайней мере свести к минимуму её эффекты), необходимо:
- Всегда поддерживать отслеживание головы (это самое важное, особенно если это происходит в середине опыта).
- Использовать постоянную скорость; избегать ускорения или замедления движений камеры (использовать линейное ускорение и избегать сглаживания, если это возможно).
- Поддерживать высокую частоту кадров (менее 30 кадров в секунду считается неудобным).
- Избегать резких и/или неожиданных поворотов камеры.
- Добавить фиксированные точки отсчета для неподвижных объектов (иначе пользователь будет считать, что он находится в движении).
- Не использовать постобработку глубины резкости или размытия движения, так как вы не знаете, на чём сфокусируются глаза.
- Избегать изменений яркости (использовать текстуры с низкой частотой или эффекты тумана для создания плавных переходов освещения).
В целом, ваши глаза не должны посылать сигналы в мозг, которые вызывают рефлекторные реакции в других частях тела.
Задержка
Задержка — это время между физическим движением головы и визуальным отображением, достигающим глаз пользователя со экрана гарнитуры, обновляемого на экране. Это один из самых критических факторов для обеспечения реалистичного опыта. Люди могут обнаружить очень небольшие задержки — нам нужно поддерживать задержку ниже 20 миллисекунд, если они должны быть незаметными (например, монитор с частотой 60 Гц имеет время отклика 16 мс).
Гарнитура Oculus Rift имеет задержку 20 мс или меньше, но с мобильными установками на основе устройств она будет сильно зависеть от мощности процессора смартфона и других возможностей.
Частота кадров (кадров в секунду / FPS)
Согласно определению Википедии, частота кадров — это частота, с которой устройство отображения генерирует уникальные последовательные изображения, называемые кадрами. Частота 60 кадров в секунду — приемлемая для плавного пользовательского опыта, но в зависимости от производительности компьютера, на котором работает приложение, или сложности отображаемого контента, она может значительно снизиться. Менее 30 кадров в секунду обычно считается мерцающим и раздражающим для пользователя.
Одна из самых сложных задач — поддерживать постоянную и высокую частоту кадров, поэтому мы должны оптимизировать наш код, чтобы сделать его максимально эффективным. Предпочтительнее иметь приемлемую частоту кадров, которая не постоянно или внезапно меняется; для этого нужно свести к минимуму необходимое количество объектов, движущихся в сцену, и (в случае WebGL) попытаться уменьшить количество вызовов отрисовки.
Расстояние между зрачками (IPD)
Согласно определению Википедии, IPD — это расстояние между центрами зрачков двух глаз. IPD имеет важное значение для проектирования бинокулярных систем просмотра, где оба зрачка должны располагаться в пределах выходных зрачков системы просмотра.
Расстояние между зрачками (IPD) можно рассчитать с помощью VREyeParameters.offset в WebVR, которое равно половине IPD.
Это значение возвращается гарнитурой, и его значение может составлять примерно 60–70 мм; в случае некоторых гарнитур, таких как Oculus Rift, вы можете задать собственное IPD. Обычно мы не изменяем это значение, но вы можете поиграть с ним, чтобы изменить масштаб всей сцены. Например, если ваш IPD установлен в 6000 мм, пользователь будет видеть сцену, как великан, наблюдающий за миром лилипутов.
Степени свободы (DoF)
DoF относится к движению твердого тела в пространстве. Нет единообразия в создании аббревиатур для этого термина — мы можем найти упоминания о 3DoF в контексте датчиков, которые обнаруживают только вращательное отслеживание головы, и 6DoF, когда вход позволяет одновременно управлять положением и ориентацией. Мы даже иногда находим упоминания о 9DoF, когда оборудование содержит три датчика, такие как гироскоп, акселерометр и магнитометр, но результаты значений 3 x 3DoF фактически вернут отслеживание шести степеней свободы.
DoF напрямую связан с отслеживанием движения головы пользователя.
Конус фокусировки
Хотя наше поле зрения намного шире (примерно 180º), нам необходимо учитывать, что только в небольшой части этого поля вы можете воспринимать символы (центральные 60º) или читать текст (центральные 10º). Если у вас нет датчика отслеживания глаз, мы предполагаем, что центр экрана — это то, на чём пользователь фокусирует свои глаза.
Это ограничение важно учитывать при определении того, где разместить визуальные элементы на холсте приложения — слишком большое смещение к краю конуса фокусировки может привести к напряжению глаз гораздо быстрее.
3D позиционное аудио
3D позиционное аудио относится к группе эффектов, которые манипулируют звуком, чтобы смоделировать, как он звучал бы в трехмерном пространстве.
Это напрямую связано с Web Audio API, который позволяет размещать звуки на объектах, которые у нас есть на холсте, или запускать звуки в зависимости от части сцены, к которой пользователь движется или на которую смотрит.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebVR_API/Concepts