Case study - Looking through holes in your reality (Пример использования. Взгляд сквозь отверстия в реальности)

Когда люди думают о смешанной реальности и о том, что они могут делать с Microsoft HoloLens, они обычно придерживаются таких вопросов, как "Какие объекты можно добавить в мою комнату?" или "Что я могу наложить поверх моего пространства?" Я хотел бы выделить еще одну область, которую вы можете рассмотреть, по сути, волшебный трюк, используя ту же технологию для просмотра или через реальные физические объекты вокруг вас.

Технология

Если вы воевали с пришельцами, как они прорываются через ваши стены в RoboRaid, разблокировали стену сейф в фрагментах, или посчастливилось увидеть ангар UNSC Infinity в опыте Halo 5 на E3 в 2015 году, то вы видели, о чем я говорю. В зависимости от вашего воображения, этот визуальный трюк может быть использован, чтобы положить временные отверстия в гипсокартон или скрыть миры под свободной половицы.

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

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

Используя одну из этих уникальных голограмм в HoloLens, приложение может обеспечить иллюзию содержимого за стенами или через пол так же, как реальность представляет себя через реальное окно. Переместите себя влево, и вы увидите все, что находится справа. Подойдите ближе, и вы сможете увидеть немного больше всего. Основное различие заключается в том, что реальные отверстия позволяют вам пройти, в то время как ваш пол упорно не позволит вам пролезть через, что волшебное голографическое содержимое. (Я добавлю задачу в невыполненную работу.)

Сопутствующие ресурсы

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

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

Это не фактический снимок экрана, а иллюстрация того, как секретный преступный мир из MR Basics 101 выглядит на HoloLens. Черный корпус не отображается, но вы можете видеть содержимое через виртуальное отверстие. (При просмотре через реальное устройство, пол, казалось бы, исчезает еще больше, потому что ваши глаза фокусируются на большем расстоянии, как будто его даже нет там.)

Это не фактический снимок экрана, а иллюстрация того, как секретный преступный мир из MR Basics 101 выглядит на HoloLens. Черный корпус не отображается, но вы можете видеть содержимое через виртуальное отверстие. (При просмотре через реальное устройство, пол, казалось бы, исчезает еще больше, потому что ваши глаза фокусируются на большем расстоянии, как будто его даже нет там.)

Голографическое содержимое с блокировкой мира

В Unity заставить голографическое содержимое оставаться заблокированным во всем мире так же просто, как добавить компонент WorldAnchor:

myObject.AddComponent<WorldAnchor>();

Компонент WorldAnchor будет постоянно корректировать положение и поворот своего Объекта GameObject (и, следовательно, все остальное под этим объектом в иерархии), чтобы сохранить его стабильным относительно близлежащих физических объектов. При создании содержимого создайте его таким образом, чтобы корневая сводка объекта была сосредоточена на этой виртуальной дыре. (Если поворот объекта находится глубоко в стене, его небольшие изменения в положении и повороте будут гораздо более заметными, а отверстие может выглядеть не очень стабильно.)

Occluding все, кроме виртуальной дыры

Существует множество способов выборочно заблокировать вид на то, что скрыто в ваших стенах. Самый простой использует тот факт, что HoloLens использует аддитивный дисплей, что означает, что полностью черные объекты кажутся невидимыми. Вы можете сделать это в Unity, не выполняя никаких специальных шейдеров или приемов материала. Просто создайте черный материал и назначьте его объекту, который упаковывается в содержимое. Если вы не хотите выполнять трехмерное моделирование, просто используйте несколько объектов Quad по умолчанию и слегка перекрывайте их. Этот подход имеет ряд недостатков, но это самый быстрый способ получить что-то работающее, и получить низкое соответствие концепции работоспособности отлично, даже если вы подозреваете, что вы захотите выполнить рефакторинг позже.

Одним из основных недостатков приведенного выше "черного ящика" подхода является то, что он плохо фотографирует. Хотя ваш эффект может выглядеть идеально на дисплее HoloLens, все снимки экрана, которые вы сделаете, будут отображать большой черный объект вместо того, что осталось от вашей стены или пола. Причина этого заключается в том, что физическое оборудование и снимки экрана по-разному делают составные голограммы и реальность. Давайте объедем на мгновение в некоторые поддельные математики ...

Поддельное математическое оповещение! Эти числа и формулы предназначены для иллюстрации точки, а не для того, чтобы быть какой-либо точной метрикой!

То, что вы видите через HoloLens:

( Reality * darkening_amount ) + Holograms

То, что вы видите на снимках экранах и видео:

( Reality * ( 1 - hologram_alpha ) ) + Holograms * hologram_alpha

На английском языке: с помощью HoloLens вы видите простое сочетание затемненной реальности (например, через солнцезащитные очки) и любых голограмм, которые приложение хочет показать. Но при создании снимка экрана изображение камеры смешивается с голограммами приложения в соответствии со значением прозрачности по пикселю.

Одним из способов обойти это является изменение материала "черного ящика" на запись только в буфер глубины и сортировка по всем другим непрозрачным материалам. В качестве примера проверка файл WindowOcclusion.shader в MixedRealityToolkit на GitHub. Соответствующие строки копируются здесь:

"RenderType" = "Opaque"
"Queue" = "Geometry"
ColorMask 0

(Обратите внимание, что строка "Offset 50, 100" предназначена для решения несвязанных проблем, поэтому, вероятно, имеет смысл оставить это.

Реализация такого невидимого материала для закусок позволит вашему приложению нарисовать прямоугольник, который выглядит правильно на экране и на снимках экрана смешанной реальности. За бонусные очки, вы можете попытаться улучшить производительность этого ящика еще дальше, делая умные вещи, чтобы нарисовать еще меньше невидимых пикселей, но это действительно может попасть в хворы и, как правило, не будет необходимо.

Вот секрет преступного мира из MR Basics 101, как Unity рисует его, за исключением внешних частей occluding box. Обратите внимание, что pivot для преступного мира находится в центре коробки, что помогает сохранить отверстие как можно стабильнее относительно вашего фактического пола.

Вот секрет преступного мира из MR Basics 101 , как Unity рисует его, за исключением внешних частей occluding box. Обратите внимание, что pivot для преступного мира находится в центре коробки, что помогает сохранить отверстие как можно стабильнее относительно вашего фактического пола.

Попробуйте сами

Есть HoloLens и хотите попробовать эффект для себя? Проще всего (кодирование не требуется) — установить бесплатное приложение 3D Viewer, а затем загрузить файл .fbx, предоставленный на GitHub , чтобы просмотреть модель цветочных горшков в вашей комнате. Загрузите его на HoloLens, и вы увидите иллюзию на работе. Когда вы находитесь перед моделью, вы можете видеть только небольшое отверстие— все остальное невидимо. Посмотрите на модель с любой другой стороны, и она полностью исчезнет. Используйте элементы управления движением, поворотом и масштабом в 3D Viewer, чтобы разместить виртуальное отверстие на любой вертикальной поверхности, о чем вы можете придумать, чтобы генерировать некоторые идеи!

При просмотре этой модели в редакторе Unity появится большой черный ящик вокруг цветочного горшка. На HoloLens коробка исчезает, уступая место магическому эффекту окна.

При просмотре этой модели в редакторе Unity появится большой черный ящик вокруг цветочного горшка. На HoloLens коробка исчезает, уступая место магическому эффекту окна.

Если вы хотите создать приложение, использующее этот метод, проверка из руководства по mr Basics 101 в руководствах по Смешанная реальность. Глава 7 заканчивается взрывом в вашем полу, который показывает скрытый подземный мир (как на фото выше). Кто сказал, что учебники должны быть скучными?

Ниже приведены некоторые идеи о следующем:

  • Подумайте о том, как сделать содержимое внутри виртуального отверстия интерактивным. Предоставление пользователям некоторого влияния за их стены может действительно улучшить чувство удивления, что этот трюк может обеспечить.
  • Подумайте о способах просмотра объектов обратно в известные области. Например, как можно поместить голографическое отверстие в журнальный столик и увидеть свой пол под ним?

Об авторе

Фотография Эрика Ремейера Эрик Ремайер
Старший инженер программного обеспечения @Microsoft

См. также раздел