Rec Room
Rec Room is a UGC (user-generated content) game platform and social app with a friendly aesthetic and an extremely powerful in-app creation toolset. Play games with friends from all over the world - or create your own! Creation is a social, play-adjacent multiplayer experience that does not require an external editor and can be done from within the game on any platform.
Over the last nine years, I have helped Rec Room grow from a small VR-only minigame collection into a robust multi-platform community with millions of user-created rooms, first as an artist, and eventually as the Design Lead for the Logic team. During this time the company grew from 14 people to over 300 at its largest.
There are very few parts of the game I haven't touched in some capacity, so I’ve included a sampling of projects from the past decade and a bunch of info about the challenges we faced, some of the solutions we arrived at, and how I thought about them.
Engine: Unity
Roles: Design, Product Management, Art
Duration: ~9 years (of ~10 total project lifetime)
Rec Room Circuits
“Circuits” is Rec Room's in-app, node-based scripting language, in which "chips" are connected with "wires" to build complex logic in 3D space. As the design lead on the Logic team, I drove the design for both Circuits itself and the suite of Circuit-powered building blocks that our creators use to make games. I had a hand in almost every part of it, from the initial visual language and systems design through to the ship notes.
Circuits has hundreds of chips that can be recombined to create enormous variation, each chip roughly equivalent to one line of code. My job was to make the language more capable by identifying and designing features that added multiplicative power. This work required deeply understanding both the rules of Circuits and its interactions with Rec Room’s peer-to-peer networking and other built in systems. Because the power of the language is directly linked to the granularity of its elements, making it also feel friendly and consistent was key to helping Rec Room’s creators penetrate its complexity.
In close partnership with the principal software architect, I have helped Circuits mature from a bare bones scripting system into the power behind countless UGC experiences and some of our first party games. I designed and managed countless projects, from large and small, to expand what creators can make. One of my challenges in this area was my lack of programming experience, though it made me a good proxy for our user base. Working closely with developers helped me balance the capabilities of the language with its accessibility to a technically-minded amateur. Today, Circuits enables almost 9 million UGC experiences.
My role on Circuits included:
Owning the overall design for a large-scale scripting ecosystem that was used by 100+ internal devs and millions of players worldwide
UX design for new core language features, including new data patterns and logical structures
Designing and overseeing development of new "building blocks," Circuit-powered props with gameplay effects
Driving QOL upgrades, including in-app debugging and tools for managing settings and moderation
Managing the user-facing presentation of Circuits, including the visual language, naming/terminology, and in-app tutorial text
Knowledge-sharing across the company, including teaching sessions, standardizing UX patterns, and helping other teams integrate their features with Circuits, with the end result of near company-wide fluency in building with and developing for Circuits
Tutorializing new features for our userbase by establishing consistent user-facing language, writing public blog posts, and engaging with the community on Discord
Working directly with internal game teams as a customer and supporting them with targeted Circuits features and QOL improvements
Unifying functionality across in-app creation surfaces and Rec Room Studio, our advanced creation editor
Designing the visual language of Circuits and creating the art assets still used today
Tracking key performance metrics for new features and participating in Consumer Insight sessions to guide iteration
As design lead for the Logic team, providing the team with vision and clarity for the evolution of Circuits, as well as shepherding the work to release
Helping team members connect their work to the company’s overall strategies, and ensuring that they’re able to work with autonomy
Communicating upward to company stakeholders and laterally to other team leads, ensuring that our work was aligned with company priorities
Leading and managing a small team of other designers, providing feedback and mentorship and seeking out opportunities for their growth
Moonlighting as Product Manager, Project Manager, or Artist, depending on a given project’s needs
I’ve been involved in too many Circuits projects to enumerate. Below are a few interesting ones.
Language feature - Constants
Summary
A language feature that provides a friendly UX for introducing complex objects into Circuits
Challenge
Rec Room has many complex or custom data objects that the creator of a game can set up in advance, such as different SKUs for in-room monetization, procedural skybox shaders, or imported audio. In the early days of Circuits, there was no way to reference these in your code, which allowed for only very rigid, pre-defined configurations. This was a painful constraint, and we needed to make these things more dynamic and easier to use.
Solution
It was clear that this need would recur over and over again as our UGC capabilities expanded. Therefore, I was hungry for a pattern that could be easily re-used, maintaining consistent UX and surfacing the right options for each of these custom Types without requiring bespoke design each time.
The solution we arrived at was a new category of chip called a "Constant," which taps into one of these complex Types, allowing creators to configure an object’s settings with a friendly UI, and then pass it into Circuits. As with the programming concept, this value is set at creation time and remains unchanged during execution. The same pattern could then be used for "constant" values of any type.
Being able to get a direct reference in Circuits automatically increases the ways in which a complex Type can be used, since logic can switch between them situationally. It also allows internal teams to make new chips that work with that Type, incrementally expanding its capabilities. Each additional chip requires only a minor amount of dev work, making this an easy addition for any team that wants to integrate their feature with UGC tools. This type of multiplicative power is a key principle of Circuits design.
Constants now exist for many complex types.
The Sound Effects (SFX) constant exposes many of our built-in audio clips and relevant settings
Constants are a great way to handle complex or highly visual creator input
Several audio Constants being fed into logic that swaps background music according to game state
Constants now exist for many complex types
Debugging tool - Wire flash
Summary
A tool for understanding and debugging node-based scripting in a spatialized, 3D context
Challenge
When programming in Rec Room, creators - especially amateurs - need a way to understand the order in which their logic is executing. The problem is further compounded by the spatial, physicalized nature of Rec Room creation, which means that the logic might be spread across a level.
Solution
The ports and wires used to connect Circuits chips already glow when active, so we decided to lean into this visual treatment and have them flash when actively passing data. Information flows in two ways in Circuits, so this solution comes in two parts.
Basic execution can be thought of as “pushing” left to right as each chip executes the next in the chain. Execution is indicated by prominent orange wires and ports, and they flash while Circuits runs so the user can see which code paths are activating. The frequency of this flash is an intuitive signal for how often, and under what conditions, a given part of the code will run.
Data outputs are calculated only when requested, and can be thought of as “pulling” right from left. The most useful debug workflow in this case is to backtrace your Circuits graph to see where a value is coming from. This path flashes when you interact with a data port, tracing the current value’s inputs backwards until they become ambiguous.
These two cases are represented in the example videos. In addition to design, I also tuned the visuals.
As Circuits executes, the ports and wires flash along the signal’s path. In this example, the signal terminates at an “If” chip with no “else” path. A viewer who knows this code can quickly tell that the “If” condition is false.
Hovering over a data port traces the origin of the derived value back through the graph - and in this case, far into the physical distance.
Building Block - Objective Markers
Summary
Circuits that control a UI element to help players navigate a level
Challenge
One of our game teams needed some UGC UI tools to make an RPG. UI elements have always been a challenge for Rec Room’s UGC tools, largely because of the wide range of different platforms that Rec Room supports. Identifying bite-sized cross-platform UI features is the first part of the challenge, and the rest is exposing controls that offer creators enough power to achieve their vision, without forcing them to reckon directly with supporting different input modalities.
Solution
In these situations, I usually tried to make each feature as small and independently useful as possible, since tightly coupling them together both limits their versatility and increases implementation time. One feature we made to address these challenges were Objective Markers, which anchor a UI indicator to a player, object, or static position, and have some simple controls for appearance and behavior.
Objective Markers demonstrate an extension of the Constants pattern described above which is common across many of our UI features. After an Objective Marker is created using a Constant, the details of its appearance can be changed by Circuits.
This slightly muddies the mental model of Constants. In this case, the Constant refers to the Unity UI prefab associated with the UI element, not to its manifestation on the player’s screen, which avoids some technical constraints but forces the user to understand a little more about how the sausage gets made. While this extended functionality now shows up often enough to have become a well-established UX pattern itself, it was originally the lesser evil in a situation where I had to choose which artifact to accept in order to keep the project low-scope.
Objective markers in ^MyLittleMonsters, a UGC-powered game.
The settings for Objective Markers
Circuits can control & adjust Objective Markers
Visual Design
Summary
The visual design of Circuits reinforces the rules of the language while adding “Rec Roomy” charm
Challenge
Circuits is complex, but must be both accessible to technically-minded amateurs, and compatible with Rec Room’s spatial, physicalized building tools. Circuits needed to visually communicate a lot of subtle information about the language, while also being delightful to use and representing the game well in screenshots.
Breakdown
Included here is my early pitch for Circuits visuals, the spirit of which was captured in the final implementation. The visual language attempts to establish a few rules that, even without being explicitly tutorialized, communicate information that help users intuit the correct decision.
Chips have different shapes based on their function. It was an important goal to be able to identify those functions at a glance, and from a distance, without having to rely on text.
Chips that perform a calculation, or have custom circuits inside them, are vertical
Chips that deal with wireless “Events” are horizontally oriented. These are comparatively rare, and the most important to distinguish at a glance
Utility chips such as Constants and Variables were meant to be square, but this idea fell through instantly because of long names! We ended up with a horizontal format here too
Chips are made of two materials, a matte light grey and a glossy dark grey. Ports only ever appear on the light grey surfaces, which means the relative configuration of those surfaces communicates something about the function.
Definitions have no light grey borders, as they will never have accessible ports
Event receivers only have light grey on the right, as they will never have a wired input
Circuit boards can be fully customized and contain other chips. Chips with a “footer” element can always be opened up to see what’s inside.
The dark grey areas can be recolored for organizational purposes
Lit and unlit states communicate a great deal about how circuits operate.
Ports glow when they are successfully connected to another port
Wires have a banding animation that flows in the direction that their signal is moving
Ports and wires flash brighter when they are actively transmitting information
Circuits needed to feel “Rec Roomy” in public screenshots and videos. Therefore they fit the overall visual style, including being subject to local lighting. There’s a subtle glow to most elements to enhance their visibility while still matching style.
My original concept art. After this, most iteration took place in 3D
The final appearance of all the chip types
Animation flows along wires in the direction that data travels
Rec Room AI Prototypes
As we explored the role of AI in Rec Room, I took on some of the challenges of integrating generative AI into our UGC tools.
My role included:
Investigating strategies to help “Maker AI,” our short-lived AI creative assistant, get better at writing Circuits
Standing up a prototype version of AI-generated 3D Meshes and iterating toward a shippable product
Vetting and tuning various models for both Mesh and Image Generation to find the right balance of speed, cost, quality, and content moderation
Integrating Mesh Generation and Generative Image Editing into Circuits as part of “Game AI,” a suite of Circuits that lets creators use LLMs in their games
Dogfooding Game AI to create and release two MeshGen-focused games, Sketchy Showdown and Make It Real
Shepherding dev work to support other teams with integrating MeshGen into their projects
Meshgen 0-1
Summary
Prototyping ways to add AI-generated 3D meshes to Rec Room
Challenge
The ability to conjure 3D objects felt like a powerful gateway into creation, so we wanted to explore bringing it to Rec Room’s creative toolset. But since Rec Room creation is a multiplayer, realtime, in-app experience, there were some extra challenges when it came to turning Meshgen into a good, safe, prompt experience.
Exploration
We began by prototyping and standing up a full end-to end-demo as quickly as possible, calling out to external services and relying on existing systems for run-time asset import to get us to a place where we could “feel the magic.” This was slow, expensive, and unperformant, as expected, but we got there in a few days. The initial version took up to 12 minutes to return a high poly mesh .. with no texture! But it still felt pretty magical.
Then we started to refine, iterating towards speed and quality by exploring different self-hosted models, GPU rentals, mesh/texture formats, optimization settings, and alternative ways of importing and serializing the generated assets. Ultimately we got it down to ~15 seconds and an estimated cost of about $.04 per mesh.
Originally, we expected to include Meshgen in “Maker AI,” an AI powered creation assistant that had just launched a trial run. However, the cohort most likely to pay for access to creation tools were the most advanced creators - both the least likely to need an AI assistant, and the most strongly opposed to AI-supported creation on principle. We got clear feedback that people felt it was ethically dubious, and we wanted to make sure our players felt good using it.
Since Maker AI’s trial run performed poorly, I started prototyping against other use cases for generative meshes, including as prop support for a terrain tool, as purchasable “toys on demand,” and various ways to integrate it into gameplay. I was keen to focus on use cases that felt more “Recroomy” and were likely to land better with our community. So I went back to first principles: can it enable delightful, creative, social fun?
The very first end-to-end meshgen build review. I had asked MakerAI to use Circuits to make the Sasquatch chase me :]
Prototyping with Meshgen + Game AI
Summary
The process of looking for “Rec Roomy” social magic with Generative AI and LLMs
Challenge
With the hope of finding interesting AI-driven products, I turned to Rec Room’s earliest DNA - creative, social play. How do we incorporate meshgen into the app in a friendly, “Rec Roomy” way that doesn’t feel ethically suspect? Can we find novel creative, social playgrounds that are actually improved - or fully made possible - by AI?
Breakdown
Early on, I landed on the idea of wanting to use our popular in-app drawing canvases somehow. They’re a great experience in VR, but it’s not easy to draw with a controller - then again, bad art is more fun than good art when it comes to social chaos.
I spent some time investigating how well various AI models could interpret bad drawings without being told what they’re supposed to be, and it turns out: pretty well! But it would be disappointing to feed something into an AI and have it erase all of your personal style while “improving” it. So my next investigation was into whether it could produce an image suitable for meshgen, while still preserving the author’s hand in the final result.
I was so charmed by the results that I spent a weekend chasing this idea in various directions. Would this make a better version of meshgen for Maker AI, since it’s enhancing your own creativity? What about letting people draw their own special avatar item? (I did a manual version of this for the sake of proving it out, and to document the parts that would need dev work to automate.)
Back at work on Monday I roped one of my meshgen dev partners into a silly little pitch: two people face off in a drawing contest, and the winner gets a mesh made of their artwork. They helped hook both the whiteboard and the meshgen model into “Game AI,” another team’s project to integrate LLMs into Circuits, and I built out the game itself.
Two days later we had this fairly rough little experience. The AI gives you a prompt and you have a very short timer to make a drawing that is, inevitably, pretty bad. At this point in time, meshgen was taking about 45 seconds, so to cover the generation time, we had the AI vamp with a harsh critique of your work under the guise of a snobby art critic, leaning into over-the-top pretentious hilarity.
I went on to do several more prototypes using combinations of Game AI, whiteboards, and meshgen, including a detour into escape room mechanics - can drawing the right symbol open a door? (Yes!)
My little drawing game was fun and funny, but Rec Room has a robust 2d art community, and I was eager to see what they could do if they weren’t on such a strict timer. With some new prototype Circuits to hide the avatar, we put together a testbed for drawing your own silly costume. As soon as we played it, we knew that this was our next AI-powered game.
A silly video we made to share with the team. Lots of bugs and rough edges in this one.. including the volume! (Watch out, it’s loud)
Early prototyping for making costumes with meshgen and whiteboards. It’s a good sign when people stay late after a playtest to keep playing!
AI-Driven Games & Products
Summary
Two fun little Meshgen games and a prototype for “Draw your own costume”
Challenge
We’d found some “magic” with a couple of meshgen prototypes, but we wanted to learn about it’s reception with our community ASAP. We also needed to prove that we could monetize, since each generated mesh incurs a cost.
Breakdown
Our meshgen prototypes generated a surge of interest across the company, and my team suddenly had their hands full replacing prototype code with something that could ship. One of our internal building teams was on the lookout for small projects to add to their lineup, and took my little drawing game - which I’d called Sketchy Showdown - all the way to a shipped experience. This was our initial sentiment test. People didn’t love the AI voices, but a ton of them were playing the game. (And ironically, by the time it launched a week later, meshgen was so speedy we didn’t actually need much vamping anymore.)
An early version of the Sketchy Showdown trailer
The second half of this video shows folks playing in the wild!
We also pursued the costume prototype as a social playground called “Make It Real.” I spent a lot of time fine tuning our content moderation solutions (and trying to slip naughty doodles past them) in order to get this shipped! For this experience, we monetized from the jump, experimenting with prices and freebies over a week or two until it was cash flow positive. The outpouring of photos and videos being shared told us that our players were having exactly the kind of creative, social experience we’d hoped for.
The official trailer, and some cheeky shared photos
There was immediate demand from players to take these costumes elsewhere in the app, so I grabbed my dev partner and we put together a quick internal prototype to get people excited about the possibilities. It worked, and Custom Costume Consumables were born. At the time of writing, this feature has just been released in a very limited form - we want to feel out demand and moderation challenges to guide its next evolution.
While Make It Real (originally called Sketchy Hangout, which I reference here) was underway, I put together this internal prototype video for custom Meshgen costumes
Early test for the “real deal” consumable costumes. Like the circuits in Make It Real, these just hide the avatar and use the existing animations. Please admire my radish.
Rec Room Art
Prior to transitioning to design, I spent several years on Rec Room’s art team as a technically-minded generalist, happy to wear whatever hat was required. During some of this time I was also designing systems with an art focus, and able to self-serve on any art those prototypes required.
My role included:
Modeling, texturing, lighting, level propping, environmental storytelling, asset implementation and optimization for over a dozen first party experiences
Design and implementation for the initial version of several core features that have since been expanded upon in future iterations
Concept art, mostly for avatar items and consumables
Collaborating on design and narrative for first party games
Mentoring junior artists
Poseable Hats
Summary
Multiplying avatar customization options by letting players adjust their hats
Challenge
Especially in the early days, we were eager to find ways to let players personalize their in-game appearance as much as possible without our tiny team simply having to make hundreds of assets.
Solution
One of the ways we achieved more variation was by allowing players to pose their hats. In pursuit of maximum personalization with minimal weird clipping, we allowed hats to slide along a hemisphere that was fitted to the avatar’s head, while maintaining the correct orientation relative to the head. Combined with small allowances for rotation and translation, this enables a huge range of good outcomes.
Contributions
On this project, I designed and iterated on the system in partnership with a tech art engineer, created the necessary underlying assets, implemented constraints on the bulk of the existing hats, and wrote documentation on this process for the art team.
Tilting my hat to a jaunty angle!
Consumables
Summary
Delightful, shareable food and beverage items, and AI-generated costumes
Challenge
In its early days, Rec Room was a VR-only game with a strong emphasis on delightful, physical interactions that took full advantage of VR’s spatial awareness and user-controlled hands. We were always in search of new ways to craft memorable social experiences that would help people find friends.
Solution
We began selling shareable food and beverage items whose sole purpose was social delight. They’ve been a small and consistent revenue source, but their more important function is as an icebreaker in crowded rooms, where they encourage people to gather, be generous, and enjoy the generosity of others. They have become one of the staple elements of Rec Room’s vibes, and dozens of different varieties now exist.
Contributions
I helped create the first sets of items, creating the assets and implementing them in Unity, then continued to champion the system, working with devs to iteratively add more cool stuff to what consumables could do. Later, I designed tooling to make the implementation of these complex assets easier and semi-automated.
Recently I returned to Consumables to integrate Generative 3D Meshes and our UGC AI tools, prototyping and then driving the design for Custom Costumes. These costume consumables can be created based on a player’s specifications, a UGC game’s themes, or even a drawing created on our in-app whiteboard.
One of the OG food items, and still a staple
Bubbly is a favorite, despite being premium. Probably because you can shoot people with the cork.
Early test for consumable costumes. These naively replace the avatar with a generated mesh based on a drawing done by the player.
Another early fave - and a glimpse of many more modern offerings in the Backpack UI.
Level Art
Summary
Over the course of my four years on the art team, I was part of the development of many of our “Rec Room Original” games. These lean into the fiction that Rec Room takes place on a college campus, and student clubs are behind the activities, which lends them a scrappy, low budget, handmade-out-of-cardboard aesthetic.
Contributions
Concept art, art direction, 3D modeling, texturing, level design, propping and environmental storytelling, lighting, optimization, animation, vfx, asset implementation, and whatever else needed doing. Small team, lots of hats, lots of fun!
Activities contributed to:
Quest for the Golden Trophy
The Rise of Jumbotron
Curse of the Crimson Cauldron
Isle of Lost Skulls
Crescendo of the Blood Moon
Paintball: Clear Cut
Paintball: Spillway
Paintball: Sunset Drive-In
Laser Tag: Hanger
Disc Golf: Propulsion
The Rec Center
The Park
Charades
Rec Royale
Clear Cut, one of our paintball levels. I was the only artist involved for most of this one
The entryway for Isle of Lost Skulls, an interactive quest from the Theater Department
Disc Golf: Propulsion, featuring a bunch of experimental tech from the Science Department
Laser Tag: Hanger, an unused space on campus repurposed as a laser tag arena