sobota, 25 marca 2017

[DSP2017] 8# Holowizja - gdy zwykły pokój przestaje być zwykłym pokojem…

A gdyby pokój, w którym siedzę lub stoję, przestał być zwykłym pokojem i wzbogacić go o elementy nowe, na które oddziałują te dotychczasowe prawdziwe ?

HoloLens dzięki mapowaniu przestrzennemu (spatial mapping) może spełnić takie życzenie. Dziś przejdziemy drogę dla absolutnie początkujących w tym zakresie. Zobaczymy dobrze znany już nam sześcian i kulę w powietrzu, które po umieszczeniu na nich kursora i wypowiedzeniu magicznego “Shoot down” spadną z pewnym łoskotem na podłogę pokoju, po drodze być może odbijając się od innych przedmiotów.

Room1

W pokazanym pokoju “zestrzelony” słowem sześcian spadł za czarną bryłę i straciłem go z oczu w tej perspektywie, natomiast “zestrzelona” kula odbiła się kilka razy i dotoczyła się do lewego kąta podłogi.

Room2

A teraz już do rzeczy i po kolei, jak takie coś osiągnąć i skąd ta czerwona siatka, o której jeszcze nic nie wspomniałem.

Na bazie poprzedniego przykładu HoloVision6 przygotowałem wyjściową scenę, do której dodamy przestrzenne mapowanie. Usunąłem zieloną płaszczyznę pod sześcianem i kulą. Kierując się większym komfortem, wyłączyłem sobie jęczące audio source na sześcianie (odznaczyłem checka), choć nie było to konieczne. W Edit > Project Settings > Player w sekcji Publishing Settings upewniamy się, czy SpatialPerception jest zaznaczone.

Teraz sprawa kluczowa. W Unity przeciągamy z Assets  HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab do Hierarchy na główny poziom. Zaznaczamy opcję Draw Visual Meshes. W Spatial Mapping Manager w Surface Material ustawiamy Wireframe (na screenie poniżej jest RedWireframe, ale o tym nieco później).

Room3

Jakbyśmy mieli fizyczne urządzenie, to otaczający nas pokój zostałby zmapowany za pomocą siatki podzielonej na trójkąty. Emulator nie pozostawia nas jednak całkowicie bez szans i oferuje kilka predefiniowanych pokojów, które można do niego załadować.

image

Po odpaleniu na emulatorze zobaczymy już białą siatkę pokoju.

Skanowanie prawdziwego pokoju za każdym razem jest nieco czasochłonną i skomplikowaną czynnością. Zeskanowany model można w Device Portal zapisać do pliku. Wchodzimy na zakładkę 3D View. Pod Spatial mapping naciskamy przycisk Update, co spodowoduje pokazanie się modelu. Następnie naciskamy przycisk Save.

 Room7

HoloToolkit także dostarcza przykładową siatkę pokoju. Znajdziemy ją w Assets w HoloToolkit/SpatialMapping/Tests/Meshes/SRMesh.obj. Jak przeciągniemy ją na pole Room Model skryptu Object Surface Observer w inspektorze SpatialMapping, to będzie prezentowana zamiast pokoju dostarczanego na żywo (czy też wybranego do załadowania w emulatorze).

Co nam to daje w stosunku do wcześniejszego ładowania przykładowego pokoju wprost z emulatora?  Otóż teraz już w Unity mogę podejrzeć tę siatkę przechodząc w tryb podglądu za pomocą przycisku play na górze.

Room4

Aha, czemu jest ona u mnie czerwona? Biała wydawała mi się zbyt banalna i przygotowałem sobie materiał o nazwie RedWireframe w Assets/Materials na podstawie kopii Wireframe dostarczanego przez HoloToolkit (w HoloToolkit/SpatialMapping/Materials). W inspektorze RedWireframe ustawiłem Wire color na czerwony. Następnie w inspektorze SpatialMapping w polu Surface Material ustawiłem ten materiał (skrypt Spatial Mapping Manager).

Siatkę pokoju w Unity zobaczyć możemy również na scenie. Wystarczy będąc w trybie podglądu przejść do zakładki Scene.

Room5

Przedstawioną tutaj scenę z siatką i bryłami w powietrzu udostępniłem jako HoloVision7 na github.

To oczywiście nie jest wszystko, co można osiągnąć w mapowaniu przestrzennym w HoloLens. Jak zawsze wskażę tu tutoriale z Holo Academy: Holograms 101E: Introduction with Emulator (ostatnia sekcja) oraz Holograms 230: Spatial mapping. Zmapowany pokój można sobie pokolorować, wykryć w nim ściany, podłogę i sufit, coś sobie na nich poumieszczać (programowo lub pozwolić na to samemu użytkownikowi naszej aplikacji). Uwzględnienie chowania się przedmiotów za inne przedmioty też jest istotne, można niewidoczne ich części prezentować w odmienny sposób np. jako siatkę. Sprawia to wrażenie jakbyśmy mieli Rentgen w oczach.

Kolejny równie awangardowy i niczym nieograniczony odcinek rodzi się już w mojej głowie. A zatem do następnego razu!

Brak komentarzy: