Week 6: Final Tasklist
In order to have a demo prepared on time, we’re setting a list of tasks to be completed, as opposed to the previous approach of assigning particular aspects of the implementation to specific people. The following is the tasklist:
- Allow for safe open-socket communication on the client side, i.e. Hololens can receive mesh whenever server decides to send.
- Easter egg candidate selection. Listed in order of implementation.
- Find the ground plane and ceiling plane.
- Place the eggs randomly at some point slightly above the ground.
- Check if easter egg intersects with existing geometry. If so, move it.
- Choose a position above the ground plane that is occluded by existing geometry for as many of the players as possible. Since we’re already sending the Hololens positions to the server, this could be done by ray-casting to find occluders.
- Figure out what is the best way to establish the notion of occlusion. We’re probably going to have to display the estimated mesh, even if it’s very wrong, so that people understand that they have to walk around something to discover the egg behind incorrectly estimated geometry.
- Glowing, shining eggs
- Spatial sound to lead the players to the eggs
- On-screen HUD to display the current score.
- Winning condition?
- What if an object is unfindable? I.e. we’ve placed it inside a wall? We are thinking of having a game loop which will place several eggs in the scene, and when a player finds any of the eggs, re-position all of them. This may make the game more competitive.
- Make sure egg placement is uniform across the size of the scanned area. If people started in the same spot but moved in opposite directions, we don’t want to give one person the advantage.
Floor/Ceiling Plane Finding
We will be generating targets at random locations on the floor plane. In order to do this, we must first know where the floor and ceiling planes are. We estimate the locaiton of these planes as follows:
- Smooth the Y-coordinates of all the vertices currently known using a Gaussian kernel. This is to reduce noise.
- We compute a histogram of a Y-coordinate locations.
- We locate the bottom-most and upper-most local extrema in terms of the frequency of Y-coordinates.
This gives us a reasonable esimtation of the planes since the ground and ceiling planes.
Our application kept crashing on the Hololens due to excessive memory usage. This was caused by the Hololense’s garbage collector not being invoked automatically. Rather, we must call it manually. Invoking the garbage collector manually solved this issue.
For next week, we plan to have basic gameplay in place. This would allow a single Hololens to receive egg positions, spatial sound cues, and reset the egg positions when the eggs are found.