#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

#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

#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

#Unity3D – #GitHub for Unity in super Beta mode !

Hi !

Good news for the Unity3D developers who wants to use GitHub: We have available a beta version for the Unity and GitHub connector. You can find the source code and a compiled unity package on GitHub. Also, on the main page, there is a nice step by step on how to use it.

Once we install the package we can access a new “GitHub” menu,  where we can activate the “GitHub Window”. Our main step here is to create a Git repository for the current Unity3D project.

Important: This Addin works creating a single repo for each Unity3D project.

Clipboard04

Once we init the repository, we can access to the other sections of the addin: Changes, History, Branches, Settings and Account. In Changes, we can start to track and commit our changes in the current project. All this changes, will be commited to the local project, of course 😀

Important: If you open a project with many assets, there is the chance that the Aaddin lost the track of changes. I manage to fix this closing and open Unity again, not the best option but it works. And remember, this is a Beta version !

Clipboard05

And, when it works, is really cool to see the track of changes in the History section.

Clipboard01

The next step is to synchronize our local changes with a remote repository in GitHub. In the Settings section we must define all the values needed to do this. However I could not make it work. I have some errors like not getting the remote repo value, closing and opening Unity3D fixed this. And then I got some timeout errors, and more.

Clipboard03

So, a great idea with plenty of work to do ! I will really like the moment when it get to the V1.0 and we can use it !

Greetings @ Toronto

El Bruno

References

#Unity3D – #GitHub for Unity en modo super Beta

Hola !

Buenas noticias para los que trabajamos con Unity3D y con GitHub: Ya tenemos disponible una versión Beta del conector de Unity3D y GitHub. El mismo está disponible en GitHub y podemos instalarlo como un paquete de Unity. En la página oficial del paquete hay un paso a paso detallado sobre cómo utilizarlo.

Una vez instalado podremos ver que tenemos un nuevo menú “GitHub”, donde podremos activar la ventana “GitHub”. En la misma veremos que tenemos la opción de inicializar un repositorio Git para el proyecto actual.

Importante: La forma en la que trabaja este addin es creando un repo por proyecto de Unity.

Clipboard04

Lo siguiente que podremos ver es las diferentes secciones que tenemos una vez que ya inicializamos el repo: Changes, History, Branches, Settings y Account. En la sección de Changes, podremos comenzar a hacer commits de los cambios que realizamos en nuestro repo local.

Importante: al utilizarlo con proyectos con muchos assets, llega un momento donde el track de cambios se pierde. Cerrando Unity y abriendo nuevamente el proyecto esto se soluciona. Cosas de las Betas.

Clipboard05

Eso sí, cuando funciona es un placer ver el listado de commits en la sección “History”.

Clipboard01

Finalmente está la opción de sincronizar con un repo remoto en GitHub. En este punto debemos configurar las settings para poder trabajar con el mismo. Yo no he podido publicar mis cambios. En un principio no me tomaba la url del repo remoto, y luego de cerrar y abrir Unity, comencé a tener errores de TimeOut y otros similares.

Clipboard03

Así que bien, el proyecto está en Beta, muy en Beta diría yo, pero es algo que agradeceremos y mucho en un futuro cercano !

Saludos @ Toronto

El Bruno

References

#Unity3D – Unity 5.6, has been released, and, as a #developer, you must care about this

facepalm reaction star trek.gif

Hi !

Disclaimer: Quick Friday entry, I’m still managing a couple of busy family weeks, so I don’t have much time to test and write!

When I started to create Oculus Rift Apps, a couple of years ago, I discovered Unity3D. Now with all my “non pro” Hololens work (link), Unity is one of the most important tools in my development time. I’ve seen several changes in the tools in the last years, since my first version Unity 5.5.

So, on March 31, Unity released the version 5.6 (in the last day available on their road map). And, as a Microsoft developer, you must start to take a look at this tool. Not only because of Hololens development:

All the development for the Windows Holographic platform will be performed with the mix of Visual Studio and Unity3D.

Some time ago, I wrote on why all developers need to learn some 3D skills (link and link). I was part of a couple of “nice” conversations on this. However, the truth is that in your next developer station you will use Unity3D and Visual Studio, that’s it.

For sure, for the near future, I must add some extra skills related to Machine Learning, Bots, Artificial Intelligence, etc. In my personal scenario, I think Unity 3D and Windows Holographic will give me plenty of work!

Greetings @ Toronto

El Bruno

References

#Unity3D – Se ha liberado Unity 5.6, y si eres programador debería importarte

facepalm reaction star trek.gif

Hola !

Disclaimer: Post rápido de viernes que todavia ando 2 semanas con trabajo atrasado!

Desde que comencé a crear apps para Oculus Rift y luego Hololens, tuve que acercarme a Unity3D. La verdad es que, si bien no me he acercado de manera profesional a la herramienta, he visto como la misma mejoraba con el tiempo desde el lanzamiento de la versión 5.5 hace un par de años.

La versión 5.6 es finalmente la versión estable que tenemos para crear apps para Hololens. En realidad el panorama es más grande, porque no es solo para Hololens, es para todo tipo de apps que utilicen Windows Holographic.

Hace un tiempo escribí el porqué todos los programadores deberíamos aprender a crear 3D Apps (link y link) . Hoy ya tenemos los productos necesarios para esto: Visual Studio 2017 y Unity 3D.

Seguramente en los skills que necesitaremos para el futuro debería agregar algo relacionado con Machine Learning, Bots y Artificial Intelligence. En mi caso, creo que solo con Unity 3D y Windows Holographic tengo camino para varios años.

Saludos @ Toronto

El Bruno

References