I find that at Zillow, I’m tackling interesting problems, meeting new challenges and learning something new every day. We spend a lot of time building new technologies that allow Zillow to serve our users better. We also spend time building other important things, such as Legos.
Legos are an integral part of Zillow. You’ll find that they’re a huge factor at meetings:
And day-to-day tasks:
Today however, I’d like to discuss the design and engineering process associated with some of our more recognizable creations:
A Classic Mario and Luigi. We have several of these 8/16-bit Legos scattered around the office. Now, let’s dive into the engineering process!
The first, and arguably most important, decision was: Which character should I build? Originally, we had a large stack of bricks to choose from, so we decided to go with our favorites. We mainly chose sprites from the NES era of gaming, although we tried SNES sprites with great success as well (the Megaman above being an example). However, our resources of brick colors and sizes began to run low, forcing us to restrict our construction to colors we had available (black and white blocks disappeared rapidly; red and green were fairly common). We even had to cannibalize certain parts of previous characters to free up blocks for newer ones!
Design and Construction
We extrapolated our designs from the source: images of the characters from the original games, found online.
Once the design was determined, a problem arose: Pixels are square, but Lego blocks are not. Specifically, a single Lego block is 4mm wide and 5 mm tall. In order to create a purely square block, we would have needed a 5×4 Lego block: not exactly standard, and a waste of blocks at that. We originally tried representing a pixel as a 2×1 block. Eventually, however, we switched to the smaller 1×1 block. We think the latter looks better, although the results vary on the sprite in question. Examples of 2×1 characters are the Mario and Luigi above, while the Megaman and the characters shown below are the 1×1 implementation. In addition, bases were put on the sprites meant to stand by themselves, to protect against tipping over.
It was also fairly difficult to build the sprite without any structural support. If we had done so, characters such as the jumping Mario would have many hanging blocks and a flimsy design. To overcome this, we added borders to many of the sprites; this ensures rigidity on the models so that they will survive for generations. We used black initially, but when we discovered that black bricks were integral in re-creating many of the sprites we desired, we quickly switched to more abundant colors, such as gray or yellow, whatever was appropriate to the color palette of the character.
To further ensure rigidity, we attempted to build as many of the bricks in a layered brick fashion as possible (with each brick resting on at least two other bricks). Interlacing these brick together proved to be much more rigid than having vertical columns of bricks, with only brick on top keeping the columns together.
Each sprite took about 3 hours of work spanned between downtime from various employees. If you come by our office, you’ll find them scattered around Zillow, either in our game room or on some desks. Here are a few of our highlights: