February 20, 2019
Rainbow Island Treasure Hunt VR is a pirate-themed treasure hunt game I created for an installation at the WA Shipwrecks Museum.
The game allows up to 20 networked players using Oculus GOs to spend 25 minutes scouring a tropical island, collecting as many gold coins as possible and finding hidden treasure chests.
Super fun project created in around 8 weeks in Nov/Dec 2018 that ran at the Shipwrecks Museum in Fremantle during Jan/Feb 2019.
Working with 2 interns and a few of the regular Frame Labs crew, we built and ran the game.
Some interesting aspects included:
Retopologized some 477 assets from the Synty Studios Pirates asset pack into several level-of-detail (LOD) versions.
Created additional animal NPC characters:
Developed a novel object culling system:
Created a super simple shader that almost all objects used to draw with:
NOTE: I talk a bit about the production of Rainbow Island Treasure Hunt VR on the Industry Insights – Designing the Future of XR Panel
Below is a breakdown of the key tasks and systems I delivered on Rainbow Island Treasure Hunt VR, from concept and scoping through to networking, performance, tooling, and installation delivery.
Rainbow Island Treasure Hunt VR started as a fast-moving installation concept and needed a clear, deliverable design from day one. I created the core game concept and wrote the pitch document for the WA Shipwrecks Museum so stakeholders could sign off on the experience, scope, and intended outcomes. From there, I broke the idea down into the concrete features and systems the build would require, including multiplayer session flow, player goals and scoring, exploration pacing, and the content needed to keep 20 players engaged over a 25-minute run.
With the format locked, I scoped the production plan and translated it into a practical schedule and budget that fit the timeline. That meant prioritising what mattered most for a public installation, such as reliability, ease of operation, performance on Oculus Go, and a gameplay loop that remained fun even with large groups.
Because the schedule was extremely tight, I leaned heavily on proven off-the-shelf assets to get to a playable, themed experience quickly. I purchased the pirate-themed Synty POLYGON pack as the primary art foundation, then supplemented it with a small set of other asset packs I already owned, which helped fill gaps without blowing out scope.
To reinforce the tone and make the installation feel cohesive, I also sourced pirate-themed background music and selected fun, readable fonts that matched the family-friendly style. This gave us a strong visual and audio identity early, so the remaining development time could focus on gameplay, networking, optimisation, and polishing the player experience.
Houdini was used to generate the island terrain as a procedural asset, which let me iterate quickly and keep the pipeline consistent under a tight schedule. The terrain was automatically sliced into streaming-friendly sections, with matching seam handling so adjacent pieces stayed watertight and did not show cracks. Each section also had automatically generated lower detail versions, keeping the world large and dense while remaining practical to render on Oculus Go.
To bring the shoreline to life without expensive water simulation, I built a lightweight surf collar mesh extracted from the terrain boundary where the land met the ocean plane. In Unity, a simple shader animates this collar by distorting vertices in the XZ plane using time-driven sine waves, creating a convincing rolling surf effect along the beaches at minimal performance cost.
To populate the island quickly and consistently, I reused a spawning tool I had built on earlier projects and extended it to suit this game’s requirements. The tool places objects onto scene geometry and supports pseudo-random distribution with repeatable results, which makes it ideal for dressing a large environment on a tight schedule.
For Rainbow Island, the system was used to scatter trees and foliage and rocks, as well as to place 2,000 collectible gold coins across the terrain. I added placement controls to keep spawns player-friendly and gameplay-safe. Coins were constrained to ground surfaces players could actually reach, and prevented from appearing on trees, buildings, and other non-walkable surfaces, and from spawning in inaccessible areas such as steep volcano slopes.
To hit a stable framerate on Oculus Go, I avoided real-time lighting entirely and leaned on the built-in render pipeline with a deliberately simple custom shader. Instead of per-pixel lights, the shader estimates lighting from surface orientation by using the mesh normal’s up component to sample a 1D gradient texture. That gradient gave me art direction control over the look, with a bright top range, a darker mid range, and a subtle lift near the bottom to mimic bounce light on downward-facing surfaces such as the underside of foliage.
To minimise draw overhead, almost everything renders using a single shared material to reduce shader and material switches. The Synty POLYGON assets already suit this approach because they use a colour swatch texture with UVs laid out to sample blocks of flat colour. The combination of no real-time lights, a cheap gradient-based lighting pass, and near single-material rendering was a major factor in achieving smooth performance while keeping the low-poly aesthetic readable and appealing.
Even though the Synty POLYGON assets were already low poly, they did not ship with LODs, and Oculus Go performance demanded something leaner. To solve that, we created additional, much lower-polygon versions of a large portion of the environment and prop set for distance rendering and culling.
The bulk of the retopology work was handled by the two interns, and I also contributed directly by producing a significant portion myself. We used a hybrid approach depending on the asset. Hand retopology was used where silhouette control mattered, and Houdini’s Reduce workflow handled fast, repeatable decimation where it held up visually. The result was a set of super-light LOD levels that let us keep the island dense while staying within the Go’s tight rendering budget.
The biggest technical challenge on Rainbow Island was performance. To run smoothly on Oculus Go while still feeling like a rich world, I built a custom culling and LOD system that supported scattering more than 5,000 environment objects across the island, including trees and foliage, rocks, buildings, jetties, and ships.
The key idea was to exploit the island’s layout. Each object was assigned an angle index around the island’s centre. When a player was exploring the outer rim, the system calculated the player’s current angle and very quickly culled everything outside an angular slice around them. When the player moved into the volcano in the island’s centre, the approach switched by culling the entire outer ring and only managing LODs for the interior set. After culling, the remaining objects were grouped and assigned LOD meshes based on distance. Both the culling and LOD evaluation were implemented heavily using Unity Jobs to keep the work fast, parallel, and GC-free. Updates only happened during blink teleport, while the screen was faded to black, which made the cost effectively invisible and helped keep the game comfortably above the 60 fps target on Oculus Go.
To make the experience accessible to players of all ages, I designed a point-and-click locomotion system that worked well with the Oculus Go’s 3DoF controller. Players aimed at a destination in the world, pulled the trigger, and their character would move there, walking for short distances and running for longer ones. Once the character arrived, the camera performed a fast blink transition that briefly fades to black, teleports the player viewpoint to a safe position behind their character, then fades back in. I added checks to make sure the HMD camera could never be placed inside terrain or other geometry, avoiding uncomfortable clipping and keeping movement consistently smooth and VR-friendly.
To get characters moving quickly within the tight schedule, I used Mixamo clips such as idle, walk, and run, paired with already rigged character models from the POLYGON pack. In Unity, I built the core Animator and blend-tree logic needed for clean locomotion and state switching, keeping it simple, readable, and easy to extend.
One of the largest pieces of work on Rainbow Island was building the full networking system to support up to 20 Oculus Go headsets running in sync from a single Windows PC. Around this time, I moved away from Unity UNet and built the system on the Telepathy C# networking library, writing both the Android client and the PC server to suit the installation setup.
The system handled live gameplay state across all devices, including player and NPC movement along Unity NavMesh paths and animations, coin and treasure collection, score updates, and a shared session timer. On the operator side, the PC server included a simple control interface for running sessions, switching between headsets, and mirroring any selected player view and interactions to an external TV alongside a looping pirate-themed soundtrack to attract walk-up players. It also showed headset battery levels remotely so staff could manage charging and keep sessions running smoothly throughout the day.
Although I led the project hands-on, delivery still depended on coordinating a small team with clear tasks and a tight turnaround. I worked closely with two interns and structured their workload so they could contribute meaningfully while staying unblocked and learning production-friendly workflows. I also collaborated with a part-time team member who supported level layout late in production, helping push the island into a more playable, readable space for large groups of players.
Alongside that, I coordinated with two regular Frame collaborators on asset creation. A 3D modeller, a rigger and animator produced 11 unique animal characters that added life and charm to the island. My role here was planning and integration, keeping the team aligned on priorities, reviewing work as it landed, and ensuring everything fit the performance and gameplay constraints of a 20-player Oculus Go installation.
Overall, I was very pleased with how Rainbow Island Treasure Hunt VR turned out. Built with a tiny team, a tight schedule, and a lean budget, it is a good example of what can be achieved when scope is clear, decisions are pragmatic, and the team is given room to solve problems creatively. The museum brief required something fun for all ages, easy to operate, and robust enough to run session after session in a public space, so the project leaned heavily on smart constraints, rapid iteration, and a few think outside the box technical solutions to make ambitious goals fit the hardware and the timeframe.
Across the four-week installation at the WA Shipwrecks Museum, more than 500 visitors played the game, ranging from kids to older adults. The system ran reliably throughout the season with no major issues, which was the most satisfying result of all. It proved that with the right tooling, careful performance discipline, and an installation-first mindset, a small crew can deliver a polished, public-ready VR experience in a very short window.