rss LinkedIn
GitHub

Forbidden Forest

October, 2017

Halloween has become a big deal in our house. This year around August my kids asked that we create the Forbidden Forest from Harry Potter and build a giant mechanical Aragog spider. Because I love taking on projects to learn new things I agreed but soon realized I was in way over my head given the amount of time I had to dedicate to the project. Instead I built a mostly software driven Forbidden Forest complete with giant spiders that decend from overhead and localized sound.

Something Old, Something New

For a few years now I've wanted to extend my Python based scene coordinator software to support controllable audio in addition to lights and animation. I had a flight from San Francisco to Santiago for work and used the first leg from San Francisco to Miami to do a single, long hacking session to make it happen. I fully refactored the existing code to support a central Director to control the scene, and many network connected Actors that could each perform unique functions.

Each Actor registers with the Director by name. The Director then executes a scene and calls out queues to named Actors to perform specific parts. The Actor can run on Mac OS or Raspberry Pi and has the ability to play audio to one or more attached speakers, control Philips Hue lights or Samsung Smartthings devices, and when running on a Raspberry Pi it can control attached Neopixels or other GPIO functions. I also built a C# Unity Actor so the director can trigger specific animations or events in a running Unity 3D application. The Director can trigger many Actors to run simultaneously and block progress through the scene until one or more Actors is complete.

Improved Projection

The Stranger Things project used a Unity 3D application to project a Demogorgon escaping from the front of our house, which worked really well. For this project I wanted to have spiders descend from overhead so I ordered some rear projection screen material from Amazon and while it was being delivered I constructed a basic scene using assets from the Unity Asset Store. Once the screen material arrived, the first test happened in the workshop to see how large an image the projector could throw with various lighting conditions.

Eventually the screen was to be overhead outside our front door, which is up a long staircase under trees. To create the effect of standing in a forest, I wanted to make the real trees next to the stairs extend into virtual trees. I built a scene with wind blowing the tree branches to make it feel less static and added some misty fog to obscure the view to the "sky." I also added several very large spiders that drop out of the tree branches and stop over your head.

Installation

I first assembled a PVC pipe frame and test fit it on the front porch through the edge of the trees.

Once I found the final dimensions, I took the frame into the workshop and attached the screen. To mount the screen, I rivited grommets about every 12 inches and zip tied the screen to a PVC pipe frame. Although it was not very rigid in the workshop, once the entire assembly was installed, it held its shape.

Pay no attention to the construction debris bags and Amazon boxes in my garage. That's from a completely different project...

I placed the projector on the edge of the roof over the front porch. Although this looks precarious the adjustable feet of the projector hooked into the lip of the rain gutter and made an extremely solid anchor. I was able to prop the projector from behind to find the correct angle.

Then, after a bit of struggle to get the bendable PVC pipe to all line up, I got the screen in place by additionally tying it from above with two guide ropes. I aligned the projector and did the first test.

The next step was moving the trees and branches in the scene to better align with the actual trees next to the stairs. I also further adjusted the projector to get the largest image possible.

Once the projector was in the final position, I made some cardboard masks to place on the edge of the screen to prevent the projected image from having a hard edge. From underneath this caused the image to looksas through it was just obscured by other branches in the dark.

I've written software in many strange places, but never before had I coded on the roof of my house. I finalized the animations and connected my laptop as one of the Actors to in the scene management software to control the animation and to playback audio from speakers mounted on the roof.

Originally the entire front yard was to be the Forbidden Forest, but as Halloween rapidly approached I decided to focus just on the front stairs from the sidewallk to our front door. I positioned several additional Raspberry Pi Actors with speakers in the bushes and a Philips Hue light strip behind the top of the stairs. I then cut audio from Harry Potter to have Hagrid invite you to walk up the stairs and to have Aragog the spider speaking from afar behind the staircase. Along the way another projector shown directly down on the stairs like a flashlight searching around to reveal an army of spiders walking up the stairs. This was controlled by a second Unity scene using some spiders and a basic pathfinding script.

The final result was not as grand as I had hoped, but was fully successful and had none of the techical glitches from the previous year's project. It ran continually all night, much to the delight and fright of the 300 or so kids that knocked on our door to trick or treat.