In this fourth MCU Dev blog post I cover the next wave of advanced features I developed after the basic functionality of the package was finished. This set of advanced features focuses on tracking the flyers currently visible by the camera in the scene at any given time.

The Motor Control Units Development (MCU Dev) package was created to familiarize myself with the Motor Control Unit functionality for the physics based interaction system called Forcibles which the VR framework PuppetJump uses for object interactions.

This package was also created to explore some of the capabilities which could become possible by using the Motor Control Units functionality.

 

 

 


 

This post will cover the following sections:

 


 

Intro

As a developer, I find that the development process gets streamlines when working with content and functionality that I am familiar with. The more acclimated I am to the core functions and capabilities of the framework or platforms I am working with, the easier and more intuitive it is to build, create, and brainstorm various functionality and features for any project.

With that in mind I started the MCU Dev package. The MCU Dev package is a bundle of assets and code I created while exploring the Motor Control Unit (MCU) feature included in the Forcibles package used to create and control physics based interactions in the PuppetJump framework.

The goal of the MCU Dev package was to familiarize myself with the basics of Motor Control Units, while also exploring what capabilities I could create by leveraging their functionality.

The following blog post covers each step I took during my exploration of the Motor Control Units functionality.

 


 

Visible By Camera

During the preliminary development work for the Butterfly Project, my group wasn’t quite sure what additional functionality the collaborators may want to have us create and include in the project. One feature that we estimated as being a likely possibility had to do with tracking how many butterflies were currently visible by the user at any given time through the experience.

With this in mind, I started creating the basic building blocks for the Visible By Camera functionality. This feature would find, identify, and track all of the flyer objects which were currently visible by the main camera for the scene.

 

 

 


 

Tracked Visible Objects

The next step in this phase of development was the creation of the Tracked Visible Objects functionality. This feature added to the Visible By Camera feature by allowing it to save snapshot data sets. Each of these snapshot data sets contained information about what flyer objects were visible by the camera at that moment. This data includes the timestamp which the snapshot was saved, the total number of flyers visible at that moment, numbered list of each flyer, and an indication of which type of flyer each numbered flyer was.

 


 

HUD Markers

Once the camera was able to track and identify all the visible flyers currently in its view, the next feature I added was a visible on screen indicator of where each fly was.

The HUD Marker functionality displays a brightly colored circle around each of the flyers currently being tracked by the main camera’s Visible By Camera functionality. This feature also adds different colored rings for each type of flyer, making each type easily identifiably at a glance.

In the demo video below, the HUD Markers are teal for original flyer cubes, green for prototype wing flyers, blue for prototype fish flyers, orange for prototype butterfly flyers, purple for squid flyers, pink for jellyfish flyers, and black for bat wing flyers.

 

 

 


 

Snapshot Printouts

What good is gathering all of this snapshot data if no one can see it?

To address this question, I created the Snapshot Printout functionality. This feature allows the user to open a scroll-able display panel which prints out all of the data saved in each snapshot dataset saved during the experience. Eventually if the collaborators decide they want this Visible By Camera functionality included into the program, the Snapshot Printout functionality will also function as a foundation for sending all the saved snapshot data to external sources such as exported text documents. This could allow any researchers using the program to acquire comprehensive data sets for additional research and analysis after the users have finished the experience.