We Are All Animals
We Are All Animals is a Public Studio three-part installation commissioned by Daniels Corporation placed in the front of Daniel’s High Park Condominiums. I was hired as a payed-intern to work with a group of other OCADU students to create one piece of this installation – a large scale digital painting. The program itself is a representation of the forest in High Park offset by one season. It’s based highly on controlled randomization to make it feel as natural and real as possible and includes systems such as: a day-night cycle, weather, grass, leaves, snow, wind, and clouds. All of these are generated using both a combination of code and art assets created by the rest of the team. Overall, the piece took one year to complete.
Assets were created, animated and tweaked by: Han Yang, Yifat Shaik, Saffron Chiong, Emma Burkeitt, Ryan Mason, Corey Dean. The foundation of the program was coded by Ben (a mysterious programmer I’ve never met in person) and was built upon by me. Lili Herterich and Josh Schonblum managed the project from various aspects and Josh even worked as level designer in the second stage of the project. Finally, Elle Flanders, Tamira Sawatzky organized and conceptualized the project and are the ones that managed to get the funding to create the project.
The main programming language I used to code the project.
Created shaders and modified some of Unity’s default ones.
Used Git with Github for version control.
The IDE used with Unity.
Used to modify textures.
Used for pseudo code and problem solving.
Used for managing my tasks and giving estimates on completion time.
Learning New Tools
The piece was originally going to just display a different looped scene each month for the year without any randomization or intense code involvement but has changed drastically over the year. When I started the internship I didn’t know much about Unity3D or C# but I had previous programming experience in other object-oriented languages such as Java and Python. On the first day I was a bit disappointed to hear that majority of the code was already finished and that my only job would be understanding how to use the scripts and import assets into the system. To make this an experience I wouldn’t regret I asked to expand on the project if I could grasp the system within the first week and show I could important assets in quickly. Within that week I managed to learn how to read C# and use Unity3D to the point where I could understand what the system did and how it worked. This was almost entirely thanks to how clean the code the previous programmer left was. Although I never met Ben in person I consider him a teacher because of this. Throughout the project I gained experience in both the language and the software to the point where I could say they are my strongest skills as of finishing this project. As for the piece itself, the combined end product of everyone’s work was beautiful and the organizers were really happy with out things turned out.
Probably the hardest and most rewarding feature I added to the project was snow. At the start I had no idea how this could be done so I spent time looking around for solutions. I found that a lot of people either draw the snow on the texture itself or create a whole mesh just for it. Interestingly, I ran into a site that showed how a shader could be coded to generate snow onto the mesh at run-time. The site itself was in Chinese and I had no idea what the instructions were saying but the code and pictures made sense. This was the first time I tried using Cg/HLSL and it turned out to be an incredibly different experience compared to the object-oriented languages I’ve used before. After some playing around I got a hang of the language and started adding in a lot of tweaks that I wanted. I even managed to make separate snow shaders for the terrain and trees. Once I got that working I made a C# script to control the snow throughout the year based on how hot it was and how much snow is falling. Overall I found working on snow to be cool way of doing things and the effect it had on the scene was amazing.
One of the most requested features was to make the scene feel more dynamic by making the grass and trees move using wind. As soon as I started creating the script I hit a roadblock as none of the values on Unity’s WindZone component were accessible through scripting. I searched things up and eventually ran into this thread where someone posted a script that revealed the properties that I needed. I put the ‘Googling’ skill on my LinkedIn as a joke but I find Googling really does help a lot when it comes to programming. Being able to solve solutions yourself is important but I find being able to find and utilize another person’s solution even faster to be equally as important. Once I got past that roadblock I managed to add a lot of features to the WindControl script like randomizing based on the time of year and changing based on the current weather. As a bonus, this ended up making storms look a lot more intense as well.
To add even more to storms I decided to create lightning as well. I was originally planning on actually showing lightning strikes but I ran into a lot of problems doing so. The first was that I found it pretty hard to make lightning look good when using textures as things ended up looking really similar. To mix things up I would need to generate lightning somehow and I found that to be too time-consuming. Because of this, and the fact there wasn’t much sky visible to begin with, I decided to show just the lightning flash using a point light. This was fast to implement and ended up looking pretty real as the flash is usually the most noticeable part of lightning unless your looking straight at the sky without any obstructions.