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

Когда люди думают о смешанной реальности и о том, что они могут сделать с помощью Microsoft HoloLens, они обычно заменяют такие вопросы, как "какие объекты можно добавить в мою комнату?"When people think about mixed reality and what they can do with Microsoft HoloLens, they usually stick to questions like "What objects can I add to my room?" или "какой уровень можно поверх моего пространства?"or “What can I layer on top of my space?" Мне хотелось бы выделить другую область, которую можно рассмотреть — по сути, с помощью той же технологии, которая просматривает реальные физические объекты.I’d like to highlight another area you can consider—essentially a magic trick—using the same technology to look into or through real physical objects around you.

ТехническийThe tech

Если вы фаугхт пришельцы по мере того, как они переходили через стены в робораид, разблокировали появление стены во фрагментах или оказались достаточно счастливыми, чтобы увидеть УНСК бесконечности Хангар в е в E3 в 2015, то вы видели, о чем я говорю.If you've fought aliens as they break through your walls in RoboRaid, unlocked a wall safe in Fragments, or were lucky enough to see the UNSC Infinity hangar in the Halo 5 experience at E3 in 2015, then you've seen what I'm talking about. В зависимости от вашего воображения Эта визуальная хитрость может использоваться для помещения временных отверстий в дривалл или для скрытия миров в свободной флурбоард.Depending on your imagination, this visual trick can be used to put temporary holes in your drywall or to hide worlds under a loose floorboard.

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

Робораид добавляет трехмерные каналы и другую структуру позади стен, видимую только через отверстия, созданные в качестве инвадерсного перерыва.RoboRaid adds three-dimensional pipes and other structure behind your walls, visible only through holes created as the invaders break through.

Используя одну из этих уникальных голограмм на HoloLens, приложение может предоставить иллюзию содержимого за пределами стен или через пол точно так же, как реально представляется в фактическом окне.Using one of these unique holograms on HoloLens, an app can provide the illusion of content behind your walls or through your floor in the same way that reality presents itself through an actual window. Переместитесь влево, и вы увидите, что находится в правой части.Move yourself left, and you can see whatever is on the right side. Придвиньтесь ближе, и вы увидите все, что можно сделать.Get closer, and you can see a bit more of everything. Основное отличие заключается в том, что реальные бреши позволяют вам, тогда как упорно этажа не позволит прокрутить это Magical.The major difference is that real holes allow you through, while your floor stubbornly won't let you climb through to that magical holographic content. (Мы добавим задачу в невыполненную работу.)(I'll add a task to the backlog.)

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

Этот прием является сочетанием двух эффектов.This trick is a combination of two effects. Во-первых, с помощью «пространственных привязок» в мире закреплено содержимое.First, holographic content is pinned to the world using "spatial anchors." Использование привязок для того, чтобы сделать содержимое «мирово заблокированным», это значит, что вы ищете, не визуально отменяют физические объекты рядом с ним, даже если вы перемещаете или базовая система пространственных сопоставлений обновляет свою трехмерную модель комнаты.Using anchors to make that content "world-locked" means that what you're looking at doesn't visually drift away from the physical objects near it, even as you move or the underlying spatial mapping system updates its 3D model of your room.

Во-вторых, самое сложное содержимое визуально ограничено конкретным пространством, так что вы можете видеть только это отверстие в реальности.Secondly, that holographic content is visually limited to a very specific space, so you can only see through the hole in your reality. Это перекрытия необходимо для того, чтобы проанализировать логическое отверстие, окно или двери, которое продает прием.That occlusion is necessary to require looking through a logical hole, window, or doorway, which sells the trick. Без какой-либо блокировки большей части представления, взлом в секретном Журассик измерении может просто выглядеть как плохо размещенный динозавр.Without something blocking most of the view, a crack in space to a secret Jurassic dimension might just look like a poorly placed dinosaur.

Это не собственно снимок экрана, а иллюстрация того, как секретный код в порядке от MR 101 выглядит на HoloLens.

Это не собственно снимок экрана, но иллюстрация того, как секретный код на основе MR 101 выглядит на HoloLens.This is not an actual screenshot, but an illustration of how the secret underworld from the MR Basics 101 looks on HoloLens. Черный корпус не отображается, но содержимое можно просматривать через виртуальное отверстие.The black enclosure doesn’t show up, but you can see content through a virtual hole. (При взгляде на фактическое устройство пол кажется еще больше, так как ваши глаза сосредоточены на других расстояниях, как если бы это не так.)(When looking through an actual device, the floor would seem to disappear even more because your eyes focus at a further distance as if it’s not even there.)

Блокировка мира — holographic-содержимоеWorld-locking holographic content

В Unity, что привело к тому, что мы не так просто добавим компонент Ворлданчор:In Unity, causing holographic content to stay world-locked is as easy as adding a WorldAnchor component:

myObject.AddComponent<WorldAnchor>();

Компонент Ворлданчор постоянно регулирует расположение и вращение его GameObject (и, таким же, что-то еще в этом объекте в иерархии), чтобы обеспечить стабильность его работы относительно соседних физических объектов.The WorldAnchor component will constantly adjust the position and rotation of its GameObject (and thus anything else under that object in the hierarchy) to keep it stable relative to nearby physical objects. При создании содержимого создайте его таким образом, чтобы корневая Сводная таблица объекта выровнять по центру этого виртуального отверстия.When authoring your content, create it in such a way that the root pivot of your object is centered at this virtual hole. (Если сведение объекта находится на глубокой стенке, его небольшие изменения в положении и повороте будут гораздо более заметными, а отверстие может показаться нестабильным.)(If your object's pivot is deep in the wall, its slight tweaks in position and rotation will be much more noticeable, and the hole may not look very stable.)

Окклудинг все, кроме виртуального отверстияOccluding everything but the virtual hole

Существует множество способов выборочного блокировки представления на содержимое, которое скрыто в стены.There are a variety of ways to selectively block the view to what is hidden in your walls. Самый простой из них имеет преимущество, так как HoloLens использует аддитивный экран, что означает, что полностью черные объекты отображаются невидимыми.The simplest one takes advantage of the fact that HoloLens uses an additive display, which means that fully black objects appear invisible. Это можно сделать в Unity, не выполняя никаких специальных построителей шейдеров или материалов — просто создайте черный материал и назначьте его объекту, содержащему содержимое.You can do this in Unity without doing any special shader or material tricks— just create a black material and assign it to an object that boxes in your content. Если вы не хотите выполнять трехмерное моделирование, просто используйте множество объектов по умолчанию и пересекает их немного.If you don't feel like doing 3D modeling, just use a handful of default Quad objects and overlap them slightly. Этот подход имеет ряд недостатков, но это самый быстрый способ получить что-то, который работает, и получение качественного подтверждения концепции с низким уровнем точности является великолепной задачей, даже если вы считаете, что хотите выполнить рефакторинг позже.There are a number of drawbacks to this approach, but it is the fastest way to get something working, and getting a low-fidelity proof of concept working is great, even if you suspect you might want to refactor it later.

Одним из основных недостатков в случае «черного ящика» является то, что он не подходит для фотографий.One major drawback to the above "black box" approach is that it doesn't photograph well. Несмотря на то, что ваш результат может показаться идеальным при отображении HoloLens, все снимки экрана, которые вы принимаете, покажут большой черный объект, а не то, что остается на стене или этаже.While your effect might look perfect through the display of HoloLens, any screenshots you take will show a large black object instead of what remains of your wall or floor. Это связано с тем, что физическое оборудование и снимки экрана имеют разные составные голограммы и реальность.The reason for this is that the physical hardware and screenshots composite holograms and reality differently. Давайте взглянем на несколько подложных математических вычислений...Let's detour for a moment into some fake math...

Фиктивное математическое предупреждение! Эти числа и формулы предназначены для иллюстрации точки, а не для какой-либо точной метрики.Fake math alert! These numbers and formulas are meant to illustrate a point, not to be any sort of accurate metric!

Что вы видите через HoloLens:What you see through HoloLens:

( Reality * darkening_amount ) + Holograms

Что отображается на снимках экрана и видео:What you see in screenshots and video:

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

На английском языке, что вы видите через HoloLens, это простое сочетание затемненной реальности (например, через своему солнцезащитных очков) и всех голограмм, которые приложение хочет показать.In English: What you see through HoloLens is a simple combination of darkened reality (like through sunglasses) and whatever holograms the app wants to show. Но при создании снимка экрана изображение камеры смешивается с голограммами приложения в соответствии со значением прозрачности для каждого пикселя.But when you take a screenshot, the camera's image is blended with the app's holograms according to the per-pixel transparency value.

Одним из способов обойти это является изменение материала "черного ящика" на запись только в буфер глубины и сортировка со всеми другими непрозрачными материалами.One way to get around this is to change the "black box" material to only write to the depth buffer, and sort with all the other opaque materials. Например, ознакомьтесь с файлом виндовокклусион. Shader в микседреалититулкит на GitHub.For an example of this, check out the WindowOcclusion.shader file in the MixedRealityToolkit on GitHub. Соответствующие строки копируются здесь:The relevant lines are copied here:

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

(Обратите внимание, что строка «offset 50, 100» связана с несвязанными проблемами, поэтому, вероятно, имеет смысл покинуть ее.)(Note the "Offset 50, 100" line is to deal with unrelated issues, so it'd probably make sense to leave that out.)

Реализация невидимого перекрытия материала, такого как, позволит приложению нарисовать поле, которое выглядит правильно в дисплее и в снимках экрана смешанной реальности.Implementing an invisible occlusion material like that will let your app draw a box that looks correct in the display and in mixed-reality screenshots. В премиальных баллах вы можете попытаться повысить производительность этого окна, добавив в него еще меньше невидимых пикселов, но это может быть дебряхо и, как правило, не требуется.For bonus points, you can try to improve the performance of that box even further by doing clever things to draw even fewer invisible pixels, but that can really get into the weeds and usually won't be necessary.

Ниже приведена секретная информация по принципу MR 101, так как Unity рисует его, за исключением внешних частей поля окклудинг.

Ниже приведена секретная информация по принципу MR 101 , так как Unity рисует его, за исключением внешних частей поля окклудинг.Here is the secret underworld from MR Basics 101 as Unity draws it, except for the outer parts of the occluding box. Обратите внимание на то, что в центре бокса находится сводная таблица, которая позволяет максимально стабильное отверстие относительно фактического основания.Note that the pivot for the underworld is at the center of the box, which helps keep the hole as stable as possible relative to your actual floor.

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

У вас есть HoloLens, и вы хотите испытать результат?Have a HoloLens and want to try out the effect for yourself? Самое простое, что можно сделать (без написания кода) — установить бесплатное приложение для просмотра 3D-файлов, а затем загрузить файл. FBX, который я предоставил в GitHub , чтобы просмотреть модель с цветовым пространством в комнате.The easiest thing you can do (no coding required) is to install the free 3D Viewer app and then load the download the.fbx file I've provided on GitHub to view a flower pot model in your room. Загрузите его в HoloLens, и вы увидите иллюзию на работе.Load it on HoloLens, and you can see the illusion at work. Когда Вы находитесь перед моделью, вы можете видеть только небольшое отверстие — все остальное невидимо.When you're in front of the model, you can only see into the small hole—everything else is invisible. Взгляните на модель с любой другой стороны и полностью исчезает.Look at the model from any other side and it disappears entirely. Используйте элементы управления перемещение, вращение и масштабирование 3D-просмотра, чтобы разместить виртуальное отверстие на любой вертикальной поверхности, чтобы создать некоторые идеи.Use the movement, rotation, and scale controls of 3D Viewer to position the virtual hole against any vertical surface you can think of to generate some ideas!

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

При просмотре этой модели в редакторе Unity будет отображаться большой черный прямоугольник вокруг фловерпот.Viewing this model in your Unity editor will show a large black box around the flowerpot. В HoloLens поле исчезает, что дает возможность волшебному экрану.On HoloLens, the box disappears, giving way to a magic window effect.

Если вы хотите создать приложение, использующее этот прием, ознакомьтесь с руководством по MR 101 в учебниках по смешанной реальности.If you want to build an app that uses this technique, check out the MR Basics 101 tutorial in the Mixed Reality tutorials. Глава 7 заканчивается развертыванием в цехе, которое открывает скрытую подсветку (как показано на рисунке выше).Chapter 7 ends with an explosion in your floor that reveals a hidden underworld (as pictured above). Кто сказал, что учебники пришлось скучным?Who said tutorials had to be boring?

Ниже приведены некоторые идеи, в которых можно взять эту идею.Here are some ideas of where you can take this idea next:

  • Подумайте о том, как сделать содержимое внутри виртуального отверстия интерактивным.Think of ways to make the content inside the virtual hole interactive. Предоставление пользователям какого бы то ни было негативного воздействия за пределы их стен, в действительности, может повлиять на то, что этот прием может помочь.Letting your users have some impact beyond their walls can really improve the sense of wonder that this trick can provide.
  • Подумайте о способах просмотра объектов в известных областях.Think of ways to see through objects back to known areas. Например, как можно разместить holographic-отверстие в таблице кофе и видеть свое основание под ним?For example, how can you put a holographic hole in your coffee table and see your floor beneath it?

Об автореAbout the author

Picture of Eric Rehmeyer РехмэйерEric Rehmeyer
Старший инженер по программному обеспечению @MicrosoftSenior Software Engineer @Microsoft

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