#Hololens – Getting Started with #MixedRealityToolkit #MRToolkit

Hi!

So, HoloToolkit is gone (until you see the code on the new toolkit) and now it’s time to start using the new Mixed Reality Toolkit. There are a couple of ways to do this, IMHO the best one is to import a custom package in Unity3D with all the contents of the Mixed Reality Toolkit.

I’ve used to create and maintain my own custom packages for HoloToolkit, however I’ll follow the guidelines and now I’ll start to use the official ones. We can find them in the Release section on the GitHub repository (link). Then we need to click on [Edit / Packages / Custom package] and we have all the assets in our project.

In the releases page

  • We are going to see the status of the latests releases. That’s mean current bug, new features, fixed bugs and more.
  • We will have 3 different packages to download and import in Unity3D
    • Toolkit
    • Toolkit + Tests
    • Toolkit + Tests + Examples
  • We will be able to download the source code of the toolkit (if you don’t want to clone the git repository)

If you already know how to work with the Mixed Reality Toolkit, the 1st package is all you need. On the other hand, if you want to see some examples on how to use it, maybe the 3rd package is the best option. In example, the 3rd package contains several samples, one of them is a interaction demo such as the following animation.

2017 08 15 Holo MRToolkit New Samples 02

Among the innovations included in this version, we can find some very useful such as a keyboard to be used in AR / VR applications. We have a Prefab that we can use in our applications in [Assets / HoloToolkit / UI / Prefabs]

I1

Important: this new virtual keyboard does not automatically appear when you focus or gaze in a TextBox. There is some code required to do this, I”ll write a post in the near future on this.

Other elements to consider are the assets that allow us to manage the transitions between Scenes. In [Assets / HoloToolkit / Utilities / Prefabs] we can find a button to launch the navigation to a new Scene and also a prefab to return to the previous scene.

Finally I have to highlight the gallery of examples that are included in this release. In [Assets / HoloToolkit-Examples] we can find all the samples. At first glance I detected that there are a couple new ones, like the scenes of “Medical” and the scenes of “Prototyping”.

The 2nd one is especially interesting since it shows different forms of interaction with elements in a world of MR. The animation at the beginning of the post corresponds to the “CycleArray” scene.

Happy Holocoding!

Greetings @ Burlington

El Bruno

References

El Bruno, my posts

Advertisements

#Hololens – Empezando con #MixedRealityToolkit #MRToolkit

Hola!

Si bien hay varias opciones, la mejor forma de utilizar Mixed Reality Toolkit en nuestros proyectos de Unity3D es importando un Custom Package. Durante un tiempo, me dedique a mantener un repositorio con los paquetes que iba creando para uso personal. Sin embargo, en el mismo repositorio en GitHub podemos encontrar el listado de Releases (link), donde podremos

  • Ver el estado de la última Release activa, incluidos nuevas funcionalidades, bug solucionados y problemas existentes
  • Descargar 3 paquetes para importar Unity con las siguientes combinaciones
    • Toolkit
    • Toolkit + Tests
    • Toolkit + Tests + Examples
  • Descargar Código Fuente del Toolkit

Si ya sabes cómo manejarte con Mixed Reality Toolkit, el 1er paquete es suficiente. En cambio, si quieres ver algunos ejemplos sobre cómo utilizar el mismo, tal vez el 3er paquete sea la mejor opción. En este último package puedes encontrar ejemplos completos de interacción como el de la siguiente animación.

2017 08 15 Holo MRToolkit New Samples 02

Dentro de las novedades que se incluyen en esta version, podemos encontrar algunas muy utiles como por ejemplo un teclado para aplicaciones AR/VR. Tenemos un Prefab que podremos utilizar en nuestras aplicaciones en [Assets / HoloToolkit / UI / Prefabs]

I1

Importante: el teclado virtual no aparece automáticamente cuando hacemos foco en una caja de texto. Es necesario agregar un poco de código para utilizar el mismo, estoy creando un HowTo sobre esto.

Otros elementos a tener en cuenta son los assets que nos permiten gestionar las transiciones entre Scenes. En [Assets / HoloToolkit / Utilities / Prefabs] podemos encontrar un botón para lanzar la navegación a una nueva Scene y además un prefab para volver a la escena anterior.

Finalmente tengo que remarcar la galería de ejemplos que se incluyen en este release. En [Assets / HoloToolkit-Examples] podemos encontrar los mismos. A simple vista he detectado que hay un par nuevos, como las escenas de “Medical” y las escenas de “Prototyping”. El 2do es especialmente interesante ya que muestra diferentes formas de interacción con elementos en un mundo de MR. La animación del principio del post corresponde a la escena “CycleArray”.

Happy Holocoding!

Saludos @ Burlington

El Bruno

References

El Bruno, my posts

#Hololens – Goodbye #HoloToolkit, now it’s time for #MixedRealityToolkit for Unity!

MRTK_Logo_Rev.png

Hi !

During the past few weeks I’ve writing on some samples to create Hololens Apps using Unity3D and other assets outside of th HoloToolkit world. So, now it’s official the HoloToolkit change and I can start to share some information on this. Long story short,

HoloToolkit is getting a big update and now it’s called Mixed Reality Toolkit.

This new version includes some big changes. I really like the official support to Visual Studio 2017 and Unity3D 2017.1; and if we take a look at the road map, we can see the dates when future versions of Unity3D are going to be supported (view references). The main architecture of a Hololens Apps is not changing, however, now that we have some new devices in the Mixed Reality family, the way to create Apps is a little more complex. (still is a very funny one!)

MixedRealityStack.png

Like in the previous version, we have 2 flavors of the product: the generic version focused on Mixed Reality and the specific one for Unity3D. Maybe in the near future we will have a set of tools also for URHOSharp and Unreal Engine.

I’ll write a little more about this in the near future, mostly on the big changes and new features included in this “new toolkit”.

Happy Holocoding!

Greetings @ Toronto

El Bruno

References

El Bruno, my posts

#Hololens – Adios #HoloToolkit, ahora tenemos #MixedRealityToolkit for Unity!

MRTK_Logo_Rev.png

Hola!

Durante las últimas semanas estuve escribiendo algunos posts para crear Hololens Apps donde no utilizaba HoloToolkit. Ahora es oficial que la version de HoloToolkit que conocíamos se ha modernizado y ha pasado a llamarse Mixed Reality Toolkit.

Esta nueva version trae algunos cambios grandes, entre los que tengo que mencionar el soporte oficial a Visual Studio 2017 y Unity 2017.1. En la página oficial del producto (ver referencias) podemos ver además los prerequisitos, el roadmap y diferentes links para comenzar a utilizar este nuevo Toolkit.

MixedRealityStack.png

Como en la version anterior, tenemos 2 versiones del producto: la version general para dar soporte a los nuevos Devices de Mixed Reality y la version específica para Unity3D.

En próximos posts escribiré un poco al respecto, sobre cómo utilizar este nuevo repositorio y que novedades trae si lo comparamos HoloToolkit.

Happy Holocoding!

Saludos @ Burlington

El Bruno

References

El Bruno, my posts

#Hololens – How to use clases TapToPlace and InitialScanManager

Hi !

Yesterday I wrote about a custom solution I made to have Tap to Place feature in an Hololens App. The main set of features was

  • We can perform an initial scan of an environment, based on a time constraint. Also we can continue the scan process if we don’t find a minimum of number of planes for floor or wall
  • We can associate one class to an hologram to have the Tap to Place feature
  • This process also allow us to validate if we can place the hologram in a vertical (wall) or horizontal (floor) plane
  • The validation process also have some visual features like change the color of a box collider from red to green depending if we can or can’t place an object and also cast a shadow with the final location of the hologram

The “InitialScanManager.cs” is the one I use to perform the initial environment scan. I usually add this class to an Empty Game Object. The main properties to use are this ones:

  • Limit Scanning by Time and Scan Time, definen how the scan process will be performed. If we set a Scan Time value of N, and check the Limit Scan time, the app will scan the environment for N seconds and then will stop the scan process
  • Minimum Floor and Minimum Wall defines the minimum amount of frames to be searched in the floor and the wall
  • Player, this is optional for the main hologram. When the scan process start it will be hide and when the scan process ends the player will be show again
  • DebugTextPlayer, optional, a TextMesh used for debug actions

Clipboard02.png

The class “TapToPlacePlayer.cs” is the one we must associate to the element where we want this feature. The main properties are

  • Placeable Bounds and Non Placeable Bounds Materials are materials used when we start the “place mode”. I create a collider with this materials and the class change the materials based on if we can place or not the hologram at the selected position
  • Placeable Shadow and Non Placeable Shadow Materials are materials used to display the final position to be placed for the hologram
  • Display Shadow defines if we want to show (or not) the final position of the hologram
  • Placement Surface defines the positioning mode Horizontal or Vertical. I mean Floor or Wall
  • DebugTextPlayer, optional, a TextMesh used for debug actions

Clipboard04.png

The complete source code can be downloaded from GitHub (link).

Greetings @ Toronto

El Bruno

References

El Bruno, my posts

#Hololens – Cómo utilizar las clases TapToPlace y InitialScanManager

Hola !

En el post de ayer compartí una solución para tener las siguientes capacidades en un proyecto de Hololens

  • Realizar un scanner inicial del ambiente basado en tiempo y en cantidad de frames encontrados para piso y pared
  • Se puede iniciar un proceso de Tap to Place sobre un holograma
  • El proceso valida además si la posición a la que se quiere mover el holograma es válida.
  • La validación es en primer lugar sobre mover a planos horizontales o verticales y luego si hay espacio para el holograma

Para la acción de análisis del entorno, he creado la clase “InitialScanManager.cs”. La misma puede ser agregada en un Empty Game Object o en uno existente y las propiedades principales a tener en cuenta son:

  • Limit Scanning by Time y Scan Time, definen si el proceso de scan se realiza en base a N segundos de escaneo
  • Minimum Floor y Minimum Wall definen la cantidad mínima de frames que se deben encontrar en el suelo y en un muro
  • Player, define el holograma o grupo de hologramas que se ocultarán al comienzo del scan y se activarán al terminar el mismo
  • DebugTextPlayer, opcional, un TextMesh utilizado para acciones de Debug

Clipboard02.png

Por otra parte tenemos la clase “TapToPlacePlayer.cs”, que es debe asociarse al elemento que queremos que tenga la capacidad de “Tap to Place”.  Las propiedades principales a tener en cuenta son:

  • Placeable Bounds y Non Placeable Bounds Materials es el material con el que se mostrará un collider cuando estemos posicionando el holograma
  • Placeable Shadow y Non Placeable Shadow Materials es el material con el que se mostrará la posición final que tendrá el holograma sobre el que estamos trabajando
  • Display Shadow define si queremos utilizar las propiedades anteriores
  • Placement Surface define si queremos soportar el posicionamiento en modo horizontal o vertical, es decir en muros o en el piso
  • DebugTextPlayer, opcional, un TextMesh utilizado para acciones de Debug

Clipboard04.png

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

Saludos @ Toronto

El Bruno

References

El Bruno, my posts

#Hololens – Alternative fix to the TapToPlace and WorldAnchor issue (until official #HoloToolkit release)

Hi !

If you work with Beta products you will find funny scenarios, like something working, then not working, then working again. The next Hololens forums thread is a must read if you want to understand the frustration you can get in this scenarios:

VS2017/U5.6 Crash – WinRTScriptingObjectWrapper::InternalAddRef Reference Count cannot be zero (link)

TLTR HoloToolkit current version is not officially supported for the combo Visual Studio 2017 and Unity3D 5.6. 

There are features like Tap To Place which are not working fine with VS2017 and Unity3D 5.6. If you implement this, as soon as the Hololens App starts, it will crash and close. Without any clear explanation on what´s happening. It seems to be something related to World Anchors and the way Unity are is working with this,  this issue is still alive on GitHub (link).

So, I need Tap To Place, and I decided to implement this myself. I pickup some code from HoloToolkit and some other pieces from Holographic Academy tutorials and I’ve created 2 main classes which fix the problem, and also add some additional value. Here are the main implemented features

  • We can perform an initial scan of an environment, based on a time constraint. Also we can continue the scan process if we don’t find a minimum of number of planes for floor or wall
  • We can associate one class to an hologram to have the Tap to Place feature
  • This process also allow us to validate if we can place the hologram in a vertical (wall) or horizontal (floor) plane
  • The validation process also have some visual features like change the color of a box collider from red to green depending if we can or can’t place an object and also cast a shadow with the final location of the hologram

In the next animation we can see a cylinder hologram with the following configuration:

  • Green material for the rigid box for valid place
  • Red material for the rigid box for invalid place
  • No shadows enabled

2017 04 26 Holo TapToPlace with Validation 01

The complete source code can be downloaded from GitHub (link).

Greetings @ Toronto

El Bruno

References

#Hololens – Solución al problema con TapToPlace agregando validación de planos (hasta que #HoloToolkit sea compatible)

Hola !

Cuando trabajas con productos en estado Beta puedes encontrarte con errores como el que se comenta en el siguiente post del foro:

VS2017/U5.6 Crash – WinRTScriptingObjectWrapper::InternalAddRef Reference Count cannot be zero (link)

TLTR la versión actual de HoloToolkit no está soportada por Visual Studio 2017 y Unity3D 5.6. 

En otras palabras hay funcionalidades como la de Tap To Place que al momento de lanzar una App hacen que la misma se cierre sin lanzar una excepción ni nada parecido. Parece que es por un problema de cálculo de Anchors, como comentan aquí (link).

Pues bien, tomando un poco de código deHoloToolkit y otro poco de Holographic Academy, he creado 2 clases que me permiten solucionar el problema. Por ahora soporta lo siguiente

  • Realizar un scanner inicial del ambiente basado en tiempo y en cantidad de frames encontrados para piso y pared
  • Se puede iniciar un proceso de Tap to Place sobre un holograma
  • El proceso valida además si la posición a la que se quiere mover el holograma es válida.
  • La validación es en primer lugar sobre mover a planos horizontales o verticales y luego si hay espacio para el holograma

Veamos el siguiente ejemplo. En el mismo trabajo sobre un holograma de tipo cylinder, cuando se activa el TapToPlace se crea un rigidBox para mostrar con colores si podemos posicionar o no el cilindro.

2017 04 26 Holo TapToPlace with Validation 01

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

Saludos @ Toronto

El Bruno

References

#Hololens – #SpatialMapping, tutorial search for simple surfaces (1×1 floor tile)

Hi !

In my previous posts I wrote on how to use Spatial Understanding to have a better control of the environment scanning process with Hololens. In that post I created a demo with the following steps

  • As soon as the App starts, Hololens started the scanning process
  • We defined a minimmun number of planes to be found, when we reach this number the scan process stopped
  • We have a FPS displaying the scan process

Today’s sample is the next required steps after last post to

  • Search for a simple surface in the floor with a size of 1×1
  • We start this search process with an AirTap / Click on a hologram

The next ugly animation shows the scanning process (at X6 speed) and then the floor mapping process.

2017 04 25 Hololens Spatial Understanding 01.gif

Tutorial simple 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”
  7. Add Empty Element
    1. Rename to HoloCollection
    2. Add 3D Cube element to HoloCollection
    3. Rename to “InteractiveCube”
  8. Set this properties to Cube
    1. Position: x: 0, y:0, z:1.2
    2. Scale: x: 0.2, y:0.2, z:0.2
  9. Add a new C# Script to the cube named “Scanner Analyzer”

The final project must be similar to this one

Clipboard02

The source code for the ScannerAnalyzer.cs script is below. As always a couple of important notes on this script.

  • The sample is based on the Spatial Mapping sample included on HoloToolkit
  • I use several additional classes (mostly for drawing), you can find this classes as part of the project
    • AnimatedBox.cs
    • AnimationCurve3.cs
    • GameStartScanner.cs
    • Line.cs
    • LineData.cs
    • ScannerAnalyzer.cs
  • In simple terms, the new class starts when the scanning process stops. As a reminder the scanning process was defined in “GameStartScanner.cs”
  • In the Update() function we check if we are in “search tile process”. If we are looking, we draw blue tiles on the floor
  • The search process start on “OnInputClicked”, this one is triggered on an AirTap on he Cube
  • The variables minWidthOfWallSpace and minHeightAboveFloor defines the size of the tile to search
  • Line 54, this is the important section. Here we use the core of Spatial Understanding to start the search process. We use the functions
    • SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(_resultsTopology);
    • SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnFloor()
  • The 1st steps create a memory pointer with all the scanned elements. 2nd steps filter this for the elements which matches the query
  • The next lines are drawing lines. Most of this code is based on HoloToolkit Spatial Mapping samples. Tons on C# lines of code, which requires a nice refactoring

Sample code

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

Greetings @ Toronto

El Bruno

References

#Hololens – #SpatialMapping, tutorial sobre cómo buscar superficies simples (Un tile de 1×1 en el piso)

Hola !

En el post anterior expliqué como utilizar Spatial Understanding para tener más control sobre el proceso de escaneo que realiza Hololens. En ese ejemplo, se realizaban los siguientes pasos

  • Cuando se lanzaba la App, Hololens comenzaba el proceso de escaneo
  • Cuando se llegaba a un mínimo de planos encontrados, se finalizaba el mismo
  • En todo momento se mostraba el estado del escaneo en un FPS

El ejemplo de hoy es la continuación del anterior, en el que una vez finalizados los pasos anteriores

  • Buscaremos una superficie de tamaño 1×1 en el piso, cuando se haga AirTap / Click en un holograma

La siguiente animación muestra el proceso de scanning (X6 speed, no apto para personas que se mareen) y luego el mapeo en el piso donde se puede ver como se “pintan” los mosaicos del tamaño encontrado.

2017 04 25 Hololens Spatial Understanding 01.gif

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”
  7. Add Empty Element
    1. Rename to HoloCollection
    2. Add 3D Cube element to HoloCollection
    3. Rename to “InteractiveCube”
  8. Set this properties to Cube
    1. Position: x: 0, y:0, z:1.2
    2. Scale: x: 0.2, y:0.2, z:0.2
  9. Add a new C# Script to the cube named “Scanner Analyzer”

El proyecto debe quedar similar al siguiente

Clipboard02

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

  • Esta clase está basada en el ejemplo de Spatial Mapping de HoloToolkit
  • La misma usa clases auxiliares que son parte del proyecto,
    • AnimatedBox.cs
    • AnimationCurve3.cs
    • GameStartScanner.cs
    • Line.cs
    • LineData.cs
    • ScannerAnalyzer.cs
  • La funcionalidad de esta clase se activa cuando la clase que creamos en el post anterior “GameStartScanner.cs” termina el proceso de scan del entorno
  • En el Update se verifica si se está “buscando” una superficie de 1×1 en el suelo, en caso afirmativo se dibuja la misma
  • El proceso de búsqueda se realiza en “OnInputClicked”, que se activa cuando hacemos AirTap o click sobre el Cube
  • En esta funcion también se define el tamaño de superficie a buscar con las variables, minWidthOfWallSpace y var minHeightAboveFloor
  • En la línea 54 comienza el proceso de búsqueda utilizando los tamaños a buscar y las funciones
    • SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(_resultsTopology);
    • SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnFloor()
  • En el 1er paso se crea un puntero en memoria con todos los elementos de trabajo y el 2do paso es el que “filtra” por los que estén en el suelo y con el tamaño deseado
  • Lo siguiente es dibujar los frames en el piso, este código está basado en lo ejemplos de Spatial Mapping. Son líneas y líneas que merecen una buena tarde refactoring.

Código de ejemplo

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

Saludos @ Toronto

El Bruno

References