VR Track Painter

Freehand VR Design App for “Painting” Spline-Based Experiences

VR Track Painter is a work-in-progress demonstrating the potential of painting track and spline-based experiences in VR, but not just for VR. The initial idea came from the frustration of designing game levels and other 3D environments, even with the aid of multiple views. The immersion and stereography of VR makes spatial creation significantly, and given my affinity for creative VR apps such as Google’s TiltBrush, this seemed like an interesting hybrid.

Combining spatial painting and the creation of a comfortably ridable track presents many significant challenges. One of the greatest is maintaining the smoothness of the ride, without sacrificing too much creative freedom from the track’s architect, the player. Proxy splines, and redistribution algorithms are currently improving the experience significantly, but there’s a lot of room for improvement.

One of VR Track Painter‘s most entertaining features is the ability to lock certain elements to an existing track, such as tunnels. While it’s permitted to paint fully in freeform, VR Track Painter makes it effortless to add an accompanying structural element which aligns perfectly with the track, significantly improving the resulting ride experience.

Tunnel locking to track

VR Track Painter requires a complex UI to be both fun and functional. Getting the right result requires iteration, and below is some of the work that’s gone into VR Track Painter‘s Spatial UI system. The current build uses standard Unity UI panels with Grid Layouts to drive 3D icon wells rendered with stencil shaders. This actually looks rather nice, but I think we can do better, which is why I’ve also been working on this Radial Grid-Layout Spatial UI Component, which will likely be implemented later.

Currently there is an Object Placement Tool, which is how the brick cubes and trees are added to the scene. At present, it’s very limited.

A few more examples of Track-Bound Tunnels, and blocks and trees placed with the Object Tool.