#Hololens – Spatial Understanding vs Spatial Mapping, and a step-by-step on how to use it

Hi !

HoloToolkit has 2 main assets to perform a Spatial Mapping scan in an environment with the Hololens.

  • Spatial Mapping
  • Spatial Understanding

Spatial Mapping is the asset that we use by default and is the one which allows us to have basic control over the scan process performed by the Hololens. For example, once we add this element to an Unity3D project and we enable the drawing of the Mesh, we can see in real time the scan of the environment where while we are using it.

Spatial Understanding allows us to go one step further and perform more complex tasks. For example:

  • Define the start and end time for the scan process. This is really useful for example, when we need to perform an initial scan and then we know that the environment will not change. If we disable the scan in real time, we give more resources to Hololens to be used on other tasks
  • Perform simple queries on different elements in our point of view. For example, to search for flat surfaces in a wall or in the floor to position holograms.
  • Perform more complex queries, to search for items such as a chair, a guitar, etc. I have not used this feature yet, but I have it in in my to do list for when I need it.

Important: Whenever we use Spatial Understanding, we must have added the Spatial Mapping prefab, if we don’t do this we find see some very funny errors.

Personally I think that the 2 best ways to learn about how Spatial Understanding are as follows

  • Read Jeff Evertt article Case study – Expanding the spatial mapping capabilities of HoloLens, he comments on how they created this asset for specific scenarios that where nor contemplated in the original HoloToolkit Spatial Mapping.
  • Review the sample Scene located in “HoloToolkit-Unity/Assets/HoloToolkit-Examples/SpatialUnderstanding/SpatialUnderstanding-FeatureOverview/Scenes/“.
    It uses Spatial Understanding to perform an initial scan of the atmosphere and then present some options of simple queries.

If you also want it to use in a local project, the next tutorial may help you. The end result is an App that shows in real time a HUD with the status of the scan and at the end disable the visualization of the Mesh.

Easy steps.

  1. Create a 3D project in Unity3D
  2. Import HoloToolkit package
  3. Configure project to
    1. Support HoloLens projects (UWP, VR, etc)
    2. enable Spatial Mapping feature
  4. Clean Scene elements
  5. Add
    1. Hololens Camera
    2. Cursor With Feedback
    3. Input Manager
    4. Spatial Mapping
    5. Spatial Understanding
    6. FPS Display
  6. Add Empty element
    1. Rename to CodeManagers
    2. Add new C# Script named “GameStartScanner.cs”

The final project may seems similar to this one

Clipboard02

You can download the complete source code from GitHub (link).

The script for the new class is below, and it is best to check a couple of interesting notes about the same

  • MinAreaForComplete, MinHorizAreaForComplete, MinWallAreaForComplete properties defined the minimum area to be scanned to give the process how valid
  • In the Start() function starts the Scan process with operation SpatialUnderstanding.Instance.RequestBeginScanning (); and we also subscribe to us to state changes
  • The DoesScanMeetMinBarForCompletion property is that is responsible for validating if the scan process is finished
  • In the Update 2 major operations are performed
    • The status of the scan process is displayed in a FPS Text
    • If the minimal elements, it has been found we finished the scan process, and disable visual scan process

Sample Code

Greetings @ Toronto

El Bruno

References

Advertisements

#Hololens – Spatial Understanding vs Spatial Mapping, y un paso a paso sobre como utilizarlo

Hola !

HoloToolkit posee 2 herramientas que nos permiten realizar un un scaneo de nuestros alrededores cuando usamos Hololens.

  • Spatial Mapping
  • Spatial Understanding

Spatial Mapping es el asset que usamos por defecto y es el que nos permite tener un control básico del proceso de scan que realiza Hololens. Por ejemplo, una vez que agregamos este elemento y habilitamos el dibujo del Mesh, podemos ver en tiempo real el scan que hace Hololens del entorno donde la estamos utilizando.

Spatial Understanding nos permite ir un paso más allá y realizar algunas tareas más complejas. Por ejemplo:

  • Definir el momento de inicio y fin para el proceso de scan. Esto es realmente útil cuando por ejemplo, necesitamos realizar un scan inicial y luego sabemos que el contexto de trabajo no cambiará. Si deshabilitamos el scan en tiempo real, le damos más recursos a Hololens para utilizar en otras cosas
  • Realizar consultas simples sobre diferentes elementos en nuestro punto de vista. Por ejemplo, para buscar superficies planas en una pared o en el piso para posicionar hologramas.
  • Realizar consultas más complejas, para buscar elementos como una silla, una guitarra, etc. A esta opción no la he utilizado pero la tengo en reserva para cuando la necesite.

Importante: siempre que utilizamos Spatial Understanding, debemos tener agregado el prefab de Spatial Mapping, en caso contrario veremos unos errores muy divertidos.

Personalmente creo que las 2 mejores formas de conocer como funciona Spatial Understanding son las siguientes

  • Leer el artículo de Jeff Evertt Case study – Expanding the spatial mapping capabilities of HoloLens, donde comenta como han creado este asset para escenarios específicos que no se contemplaban en HoloToolkit.
  • Revisar la Scene de ejemplo ubicada en “HoloToolkit-Unity/Assets/HoloToolkit-Examples/SpatialUnderstanding/SpatialUnderstanding-FeatureOverview/Scenes/“.
    La misma utiliza Spatial Understanding para realizar un scan inicial del ambiente y luego presentar algunas opciones de consultas simples.

Si además lo quieres utilizar en un proyecto propio, el siguiente pequeño paso a paso puede ayudarte. El resultado final es una app que muestra en tiempo real un HUD con el estado del scan y al finalizar deshabilita la visualización del Mesh.

Estos son los pasos a seguir.

  1. Create a 3D project in Unity3D
  2. Import HoloToolkit package
  3. Configure project to
    1. Support HoloLens projects (UWP, VR, etc)
    2. enable Spatial Mapping feature
  4. Clean Scene elements
  5. Add
    1. Hololens Camera
    2. Cursor With Feedback
    3. Input Manager
    4. Spatial Mapping
    5. Spatial Understanding
    6. FPS Display
  6. Add Empty element
    1. Rename to CodeManagers
    2. Add new C# Script named “GameStartScanner.cs”

El proyecto debe quedar similar al siguiente

Clipboard02

El código completo del ejemplo se puede descargar desde aquí (link).

Y el script para la nueva clase está debajo, y lo mejor es revisar un par de apuntes interesantes sobre la misma

  • Las propiedades MinAreaForComplete , MinHorizAreaForComplete, MinWallAreaForComplete definen el mínimo de área a escanear para dar el proceso cómo válido
  • En el Start() se inicia el proceso de Scan con la operación SpatialUnderstanding.Instance.RequestBeginScanning(); y además nos suscribimos a los cambios de estado
  • La propiedad DoesScanMeetMinBarForCompletion es la que se encarga de validar si se ha terminado el proceso de scan
  • En el Update se realizan 2 operaciones imporantes
    • Se muestra en un FPS Text el estado del proceso de scan
    • Si el se ha encontrado el minimo de elementos, finalizamos el proceso de scan, y deshabilitamos el proceso visual de scan

Código de ejemplo

 

Saludos @ Toronto

El Bruno

References

#Hololens – What to do when your app is not a 3D App!

Hi !

Today is a quick posts on Unity3D and Hololens, I’ve been dealing with com nice and heavy C# bot code during the past days so it’s time to go back to Hololens. So, a couple of days ago I found that my Apps were not deployed as Unity VR Apps to the Hololens, instead they were 2D UWP Apps. I usually leave all the configuration of the project to HoloToolkit.

I’ve already wrote about this. However this is a good reminder on how to do this. Go to the menu “HoloToolkit // Configure // Apply Hololens Settings”, and that’s it this will change the project settings to be a Unity3D Hololens enabled project. It changes the project target to UWP, the use of Direct3D,  it will set “Fastest” as the default Quality and some other internal actions.

Clipboard03

Once we apply this change, we need to restart Unity3D and then we can see all of this changes in the “Build Settings” window.

Clipboard04

One of the important steps performed by this menus was to add “Windows Holographic SDK” into our project virtual reality SDKs to be used. In my current version this was not part of the project settings process. And that’s why I found a UWP 2D version of my app in the device.

Clipboard05

It maybe related to my version of Unity3D or the HoloToolkit. However the fix is easy: add “Windows Holographic” and that’s it !!!

Clipboard07

Greetings @ Toronto

El Bruno

References

#Hololens – Qué hacer cuando mi app no es 3D!

Hola !

Hoy post rápido de Unity3D y Hololens que en el backend han sido semanas de bots y mucho C#. Hace unos días me encontré con un error extraño al momento de generar una app para Hololens desde Unity. Como siempre dejo en manos de HoloToolkit la configuración del proyecto, de las capacidades y de la Scene.

Alguna vez ya he escrito sobre esto, sin embargo es bueno recordar que para aplicar la configuración de un proyecto para Hololens en Unity3D, tenemos que acceder al menu “HoloToolkit // Configure // Apply Hololens Settings”. Esta acción, cambiará el target del proyecto a UWP, con Direct3D, cambiará la calidad a “Fastest” y un par de acciones más.

Clipboard03

Cuando aplicamos los cambios, Unity3D se reinicia y luego ya podemos ver que se han aplicado los mismos desde la ventana “Build Settings.

Clipboard04

Sin embargo, en versiones anteriores de HoloToolkit, esta acción también agregaba “Windows Holographic” en la lista de SDKs de Realidad Virtual que se utilizarán en el proyecto. Como se puede ver en la imagen siguiente, esto no sucede.

Clipboard05

Seguramente puede ser por las versiones de Unity3D y HoloToolkit que tengo configuradas. Aunque la solución es bastante simple, agregamos “Windows Holographic” y listo !!!

Clipboard07

Saludos @ Toronto

El Bruno

References

#Event – Materials used on “Lessons learned building #Hololens 3D apps from a 2D app developer”

 

Hi !

Yesterday I was lucky to get invited to participate in an event, and I shared my experiences learning on how to develop Apps for Hololens. (link). I was still kind of sick, so my voice was not as good as I want, however, I think the ideas were there :D.

As always, here are the materials for the event

The UrhoSharp samples apps is available here (link)

And this are the links I talked about during the event

Greetings @ Toronto

El Bruno

#Event – Materiales del evento “Lessons learned building #Hololens 3D apps from a 2D app developer”

 

Hola !

Ayer tuve la suerte de participar en un evento sobre Hololens, donde comenté mis experiencias creando apps para Hololens (link). Mi voz no me acompañó durante el evento, sin embargo creo que pude transmitir la idea y al final pasamos un buen rato.

Como siempre aquí estan los materiales

Y el código fuente de las apps basadas en UrhoSharp se pueden descargar desde aquí (link)

Y los links que comenté durante el evento

Saludos @ Toronto

El Bruno

#Hololens – Moving and rotating holograms using an #XBoxOne Controller

Hello!

Now that I have already connected the XBoxOne controller to the Hololens and I wrote on how to use some code to work with it, today’s post will show some of the features of the HoloToolkit class “Game Controller Manipulator“.

This class allows us to do several things, without having to add a line of code:

  • Selecting and moving a hologram in the PoV of the user of Hololens
  • Rotate a hologram on its 3-axis

Here is an example of this class in use.

2017 03 02 Holo XboxOne Controller Rotate Move 01.gif

Important: I found an error which affects the performance on a final app. I need to define the “ControllerTriggerAxis” as a new input element to be used for the Game Controller script. The following steps fix the original ones.

We start with the basics with these steps

  • Create a 3D project in Unity3D
  • Configure project to support HoloLens projects
  • Clean Scene elements
  • Import HoloToolkit package
  •  Add
    • HololensCamera
    • SpatialMapping
      • Uncheck the property “Draw Visual Meshes”
    • DefaultCursor
    • InputManager
  • Add Empty element, Managers
    • Add existing scripts
      • Game Controller Manipulator
      • Check the option “Move Gaze Target”
  • Add Empty element, HoloCollection
    • Add 3D elements
      • Cube
        • Position, x:0 y:0 z:2
        • Rotation, x:0 y:0 z:0
        • Scale, x:0.3 y:0.3 z:0.3
  • Edit – project settings – Input
    • Add element
      • Name: ControllerLeftStickX
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: X Axis
    • Add element
      • Name: ControllerLeftStickY
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: Y Axis
    • Add element
      • Name: ControllerTriggerAxis
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: Y Axis

The configuration of the Cube would look similar to the following image:

clipboard04

The input section would be similar to the following image:

clipboard02

Now we see a little so you can make the script Game Controller Manipulator. The first thing we see is that it has the following properties

clipboard02

In these properties we use the custom values we add in the Input for the Project settings. The 2 latest properties are also important

  • “Rotate modifier button name” indicate the name of a button on the remote control of XboxOne. Fire2 corresponds with the B button on the controller. While we hold it and move the joystick on the remote control, the hologram that this pointed to with the Gaze, will rotate on their axes, X, and y Z.
  • If you select “Move Gaze Target” when you press the button “Fire 1” (A button on the controller) we can move the hologram selected using the joystick on the remote control.

In these 2 scenarios, we see how the properties of the class define what are the elements of Input that are used to move the object of work.

Finally, comment that this class can be used in 2 ways

  • If you select the option “Move Gaze Target”, the movement and rotation apply to a hologram that is pointing the Gaze.
  • If the script is attached to an element and the “Move Gaze Target” option is not selected, move and rotate options are applied to the element

Greetings @ Toronto

El Bruno

References

#Hololens – Moviendo y rotando Hologramas usando un #XBoxOne Controller

Hola ! Ayer comenté como conectar un mando de XBoxOne a las Hololens, hoy veamos un poco de código para interactuar con el mismo. El ejemplo es simple Una vez agregada la capacidad de Spatial Mapping en el proyecto, activaremos la visualización de Mesh cuando se presione el botón A del mando de XBoxOne Por ejemplo: Empezamos por […]

Hola !

Ahora que ya tengo conectado el mando de XBoxOne a las Hololens, y escribí sobre la base para trabajar con el mismo, hoy veremos algunas de las funcionalidades de la clase “Game Controller Manipulator“, que es parte de HoloToolkit.

Esta clase nos permite hacer varias cosas, sin tener que agregar ni una línea de código:

  • Seleccionar y mover un holograma dentro del PoV del usuario de Hololens
  • Rotar un holograma sobre sus 3 ejes

Veamos un ejemplo de esta clase funcionando.

2017 03 02 Holo XboxOne Controller Rotate Move 01.gif

Importante: He encontrado un error en los pasos de configuración y he actualizado el post para solucionar los mismos.

Empezamos por lo básico con los siguientes pasos

  • Create a 3D project in Unity3D
  • Configure project to support HoloLens projects
  • Clean Scene elements
  • Import HoloToolkit package
  • Add
    • HololensCamera
    • SpatialMapping
      • Uncheck the property “Draw Visual Meshes”
    • DefaultCursor
    • InputManager
  • Add Empty element, Managers
    • Add existing scripts
      • Game Controller Manipulator
      • Check the option “Move Gaze Target”
  • Add Empty element, HoloCollection
    • Add 3D elements
      • Cube
        • Position, x:0 y:0 z:2
        • Rotation, x:0 y:0 z:0
        • Scale, x:0.3 y:0.3 z:0.3
  • Edit – project settings – Input
    • Add element
      • Name: ControllerLeftStickX
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: X Axis
    • Add element
      • Name: ControllerLeftStickY
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: Y Axis
    • Add element
      • Name: ControllerTriggerAxis
      • Gravity: 0
      • Dead: 0.19
      • Sensitivity: 1
      • Type: Joystick Axis
      • Axis: Y Axis

La configuración del Cube quedaría similar a la siguiente imagen:

Clipboard06

La sección de input quedaría similar a la siguiente imagen:

Clipboard04

Ahora veamos un poco lo que puede hacer el script Game Controller Manipulator. Lo primero que vems es que el mismo tiene la siguientes propiedades

Clipboard02

En estas props se utilizan los valores custom que agregamos en las settings de  Input del proyecto. Además las 2 últimas propiedades son importantes

  • En “Rotate modifier button name” indicamos el nombre de un botón  del mando de XboxOne. En este caso Fire2 se corresponde con el boton B. Mientras tengamos presionado el mismo y movamos los joysticks del mando, el holograma que este apuntado con el Gaze, girará sobre sus ejes X, Y y Z.
  • Si seleccionamos “Move Gaze Target”, cuando presionemos el botón “Fire 1” (botón A en el mando) podremos mover el holograma seleccionado utilizando los joysticks del mando.

En estos 2 escenarios vemos como en las propiedades de la clase se definen cuáles son los elementos de Input que se utilizan para mover el objeto de trabajo.

Finalmente  comentar que esta clase se puede utilizar de 2 formas

  • Si se selecciona la opción “Move Gaze Target”, el movimiento y rotación se aplicará al holograma al que esté apuntando el Gaze.
  • Si se asocia el script a un elemento y no se selecciona la opción “Move Gaze Target”, las opciones de mover y rotar se aplicarán al elemento

Saludos @ Toronto

El Bruno

References

#Hololens – #HoloToolkit compiled packages for #Unity3D in #GitHub

Hello!

A while ago I wrote on how to use HoloToolkit in my projects: I export the latest version of HoloToolkit-Unity in a Unity 3D package and then imported them into my Unity 3D projects (link).

This week I created a repo on GitHub where I will begin to leave the compiled packages: HoloToolkit-Unity-Packages (link)

In each compiled package I include:

  • HoloToolkit
  • HoloToolkit-Examples

Clipboard01

This seems a good way to share or update HoloToolkit if you work on various devices and with a distributed team. I will comment on the experience in a couple of months.

Greetings @ Toronto

El Bruno

References

#Hololens – Paquetes compilados de #HoloToolkit para Unity3D en #GitHub

Hola !

Hace un tiempo expliqué cómo utilizaba HoloToolkit en mis proyectos: exportaba los contenidos en un paquete de Unity 3D y luego los importaba en mis proyectos (link).

Esta semana he creado un repo en GitHub donde comenzaré a dejar los paquetes compilados: HoloToolkit-Unity-Packages (link)

En los paquetes incluyo:

  • HoloToolkit
  • HoloToolkit-Examples

Clipboard01

Al comenzar a trabajar en varios devices y con un equipo distribuido, esta parece una buena forma de compartir / actualizar HoloToolkit. Os comentaré la experiencia en un par de meses.

Saludos @ Toronto

El Bruno

References