ARMeet: Augmented Reality for Meeting reports

March 22 | 17

TLDR; I created an app that eases up the understanding of project reports in meetings by aiding data visualization through Augmented Reality in the report itself; check the video.

Over the past 2 months I have been working on a proof of concept that actually performed surprisingly well  in my phone. I called this project ARMeet, and basically its an attempt to ease up the reading / understanding of the  reports given in a meeting with the help of Augmented Reality.

For this proof of concept I wanted to visualize an interesting (to me) dataset that I found in Kaggle about video game sales with ratings, I wanted to mix ratings with maybe the size of each visualized game or experiment with other factors like positioning or even rotation; but after some failed experiments I decided to not use the ratings as they where complete on ~40% of the total games the dataset contained (Around ~6900 games had complete ratings out of ~16700 games).

So I just sticked to games represented by bars organized by platforms that belonged to a console; I created 6 major consoles. Nintendo, Sony, Microsoft, Sega, PC and Other. The Other console represents all the smaller platforms that dont have renowed/still alive vendors. Among the Other consoles there are platforms like the Atari 2600, Wonder Swan, Turbo Grafx 16, etc.

Each game can consist of several stacked bars; each color represents a country: Blue for US, Yellow for EU, Red for Japan and white for Other countries. Along with a purple cylinder that covers all the stacked colored boxes that represents the total sales that game had. Games are organized by years and belong to platforms that belong to consoles. In order to visualize a platform the user just needs to point the application towards the image target at the end of each chapter in order to see the sales.

Without further ado; here’s a video of how ARMeet works:

If you want to read the report you can get it in here and if you are interested in the source code of the project, feel free to check it out in here also 🙂

Introducing Potel: A pottery maker simulator for VR.

January 11 | 16

Potel is a small VR application that focuses on exploring the art of pottery creation through virtual reality. Inside Potel, users are able to create virtual pots with the aid of a spinning wheel that lets them shape virtual “clay” the same way you would do if you where making pottery in real life.

Screenshot3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The way the players interact with the world is with their hands by modeling pottery to their will either by pushing or pulling an initial blob of clay.

We use a Leap motion for tracking the user’s hands movements in the world. An Oculus Rift to immerse themselves in the generated scene and an optional in house hand vibrators that let players know when they are interacting with the world.

Screenshot1

 

 

 

 

 

 

 

 

 

 

 

 

 

Finally after the desired shape has been created the user can 3D print the created art.

UP3Ck6If you happen to have an Oculus rift and a leap motion, feel free to download it from here.

We have noticed a big portion of the users that tried the system without haptic feedback (but knowing about the depth cues) try to place their hands just over the surface of the clay on the first experiences.

Some other users after the first attempts when they are pretty immersed in the environment try to reach a bucket of water that is next to the chair as a prop thinking that everything in the world is inter-actable.

The system currently supports clay deformation for each finger but we decided to stick to the palms because sometimes the leap tracker gets lost and the clay model gets affected because of tracking issues.

 

Here’s a small video of the app working:

And in case you are interested in a more in depth explanation on how the system works, you can read a paper we wrote in here.

If you like it, let me know :).

Space Invaders in SMFL and C++

March 13 | 14

I was planning to write this over the last year but never happened, now that I have some free time I’ve put this post together and here it goes.

I like to work on stuff different from Unity from time to time, and I was feeling rusty on my C++ skills so I needed a small project which I could finish over a week on my free time to study some C++. After thinking what to do I decided I wanted to do a game but wanted to use something different from SDL because I already have worked with it before so after googling on different frameworks I found SMFL (which I loved it for its easiness) and decided to give it a try.

The game I ended up doing was a space invaders clone. This is an OSX project developed in XCode. but it should be easy to port it to windows and linux. it should be a matter of just setting up the IDE and SMFL in your platform.

I also published the code I made with an MIT License, so you can do whatever you want with it. If you want to check/use the code, feel free to fork it from here

Here’s how it looks:
)

Dungeon Lords – Work In Progress

February 9 | 14

So I’ve been working for the past year on a dungeon keeper clone (its one of my fav games) and basically after lots of trying with the tiles I decided it was best to generate them in order to make them be as organic as possible and to match each tile with the other.

Here you can see a small video where I have the minions (red cubes) digging on the tiles the player commands to dig and after finishing digging they start to populate (as in conquer) the places that are unclaimed with the player’s tag.


Any Comments / Suggestions / Questions? feel free to write a comment

 

ProMouse – Control your mouse position from Unity.

July 9 | 13

Continuing with my small utility scripts for Unity, I’m releasing ProMouse for Unity, its a set of libraries that lets you control the mouse position within Unity, as Input.mousePosition in the docs is read only. This package works seamlessly across Windows, OSX and linux operating systems.

In order to modify the mouse position I  exposed a simple and small API to move your mouse locally or globally in the Screen.

NOTE: All the global coordinates for this package are relative to the main screen.

For more detailed info on how to use this package, you can also check:

If you are still interested you can also get the package at: http://u3d.as/content/pencil-square-games/pro-mouse/4Vy

USAGE:

The only class you should access when using this package is the ProMouse
class.

 

The ProMouse.cs class is a singleton that you can call from anywhere in your
code and exposes the following functions:

 

// Sets the cursor position to (xPos, yPos) pixel coordinates relative to
// Unity's window.
//
// The bottom-left of the window/screen(in full screen mode)
// is at (0, 0). the top-right of the window/screen(in full screen mode)
// is at (Screen.width, Screen.height)
//
public void SetCursorPosition(int xPos, int yPos);


// Sets the cursor position to (xPos, yPos) pixel coordinates relative to
// the main display
//
// The bottom-left of the main display is at (0, 0) and the top-right of the main display
// is at (ProMouse.Instance.GetMainScreenSize().x, ProMouse.Instance.GetMainScreenSize().y)
// which is your current main display resolution.
//
public void SetGlobalCursorPosition(int xPos, int yPos);


// Returns the value of the global mouse position relative to the main
// display going from 0,0 on the bottom-left corner of your main display to
// (ProMouse.Instance.GetMainScreenSize().x, ProMouse.Instance.GetMainScreenSize().y)
// on the top-right corner of your main display.
//
public Vector2 GetGlobalMousePosition();


// Returns the value fo the local mouse position relative to Unity's
// window, this is the same as Input.mousePosition
//
public Vector2 GetLocalMousePosition();


// returns your main screen resolution, this is the same as calling
// (Screen.currentResolution.width, Screen.currentResolution.height)
//
public Vector2 GetMainScreenSize();

 

Example usage. 

In order to access any function of the ProMouse class you just need to type

“ProMouse.Instance.” + the name of the function you want to call.

In example for setting the mouse position at 0,0:

void Start() {
ProMouse.Instance.SetCursorPosition(0,0);
}

For checking all the functions of the ProMouse class working just refer to
the Example.cs class that comes with the project.

 

For Advanced users:

ProCursor.cs is a singleton class that creates a hidden GameObject to act as a way
to call a coroutine for moving our mouse as we need to wait one frame in
order to get the updated mouse position.

This coroutine is needed in order to update the mouse position and get the
correct values but you dont need to worry about that, you just need to call:

ProMouse.Instance.SetCursorPosition(pixels on x, pixels on y) or
ProMouse.Instance.SetGlobalCursorPosition(Pixels on x, pixels on y)

Depending on your needs.

In case you need to do an operation between when the mouse gets updated to
the new position after moving the mouse (which only takes one frame), there
is a flag that lets you know if there is an operation being performed on the
mouse and can be accesed like this:

(bool) ProMouse.Instance.MouseBusy; (read-only)

*** *** *** *** *** *** *** ***
KNOWN ISSUES:

The ProMouse package will work straight on any platform natively, but if you are
testing your projects in a virtual machine the mouse position gets internally
updated but you will not see your cursor moved; This is caused because the
virtual machine installs mouse drivers in order to seamlessly go from the
Host OS to the virtualized OS.

So basically what you need to do is to disable the mouse integration with the
virtual machine.

Here are some links you can check regarding vmware but they are not
assured to work: (VMware specific)
* http://stackoverflow.com/questions/14553155/xwarppointer-does-not-work-on-ubuntu-12-04-in-wmware-player
* http://stackoverflow.com/questions/969031/programaticly-move-mouse-in-vmware-c-sharp

Maybe this will work on other virtual machines maybe not, if it
happens to work out of the box in other virtualizing software just share it
in the comments so people can know where it works.