Notifications
Article
BioHazard Bot: The Industrial City
Updated 8 months ago
133
1
Submission Video

Introduction

My name is Gabriel Acosta, I'm a Dominican-American 3d artist and programmer. I've been using Unity since Unity 2.4 way back in 2009, before it was free. This past November I finished developing my first game BHB: BioHazard Bot for PC and released it on Steam. It was a long and exhausting project but in the post-launch time period I found myself in a really weird position: for the first time in a long while I actually had time to spare! I could finally relax! It was great at first...but then it felt strange because I wasn't used to that kind of freedom. I needed something to work on.
A few weeks later, and what drops into my lap but the Unity Neon Challenge. The timing was perfect. With the game being done and released I suddenly had plenty of free time and my trigger finger was dying to do something new. And what's more, it was a sci-fi challenge, which was right up my alley.
Suffice to say, this project had my full undivided attention.

The Philosophy

I've been using Unity for a long time, so long that I've adapted my workflow around Unity to take advantage of its strengths over the more traditional approaches. The typical way to create an environment would be to grab reference images to get a feel for what you want to make, make strong concept art, and then create all the 3d models and stuff to bring that concept art to life as a game environment. Storyboard the animation, all that good stuff.
Unity however has a number of strengths that in certain situations (like this competition) allows for a very different, and much faster, approach. Unity's lighting is great, the editor is fast and easy to use, and Unity has the Asset Store. Essentially, it's possible to circumvent the 2d concept art phase entirely--and instead create an environment that IS the concept art. 3d concept art if you will. This is commonly done in the Zbrush world where it's not unusual for an artist to quickly sculpt an object or character and use it as concept art. It's not necessarily meant to be used in the final project (it might have bad topology or high polygon count) but it gets the concept across and can be made very fast. And the big benefit is you retain the ability to change the pose, change camera angle, lighting, etc. Things which are more difficult to change in 2d concept art.
Unity allows us to take a similar approach with environments and even storyboarding. The asset store takes care of having to make every little individual asset for example, eliminating a lot of 3d modeling and texturing work you'd normally have to do yourself (why draw or model a car when you can just buy one?). Tools like Realtime CSG and ProBuilder allow you to model and UV map stuff directly in Unity. The new Timeline editor allows you to quickly block out shots and sequence animations. When you factor in tight deadlines, this approach is fantastic. You might even take a screenshot of the your 3d concept and paint over it in 2d. Or perhaps you find that the environment actually is usable as-is, and you just saved yourself a bunch of time (you can always replace individual assets later). Either way, it's a win-win situation.
This is the approach I employed for the Neon Challenge.

Starting Out

When I started this project, I had a loose idea of what I wanted to do. I usually start out with a rough look and feel in my head that I want to convey, and in this case I had a vision of a vast flat barren landscape going on for infinity except for mountains in the distance. And then a big sci-fi industrial environment. I live in Southern California, and having taken many trips to LA, San Francisco, and Las Vegas, the locations in between were a great source of inspiration. The images above are some pictures I've taken over the years that I ended up using as rough references.
I also knew that I wanted it involve BioHazard Bot in some way. Last November I finished and released BHB: BioHazard Bot for PC on Steam (which I worked on as a solo indie project for 5 years). It's a sci-fi game that takes place in an underground research facility overrun by alien creatures and the facility is located out in the desert (seen only briefly in the opening cutscene). I thought it would be really cool to connect the two projects and have my Neon Challenge entry be a way to reveal more about the world of BioHazard Bot.
Of course there were plenty of other influences from existing sci-fi media. Some of these included Firefly, Half-Life 2, Star Wars, Blade Runner, the Gas Town from Mad Max: Fury Road, Star Trek '09, and the robot city from The Matrix.

The Assets

One priority for this project was that I wanted to keep the creation of new custom assets to an absolute minimum. I wanted to leverage the Asset Store as much as possible, as well as leverage assets I'd already made for other projects. This way more time could be spent on lighting, environment creation, composition, camera animations, cinematography, etc.
Greeble Kit: One thing I immediately knew was that I would be making gratuitous use of Greeble Kit. And why not, I created it! This is precisely the type of project it was intended for, so it was a natural fit. I also used it a lot in BHB: BioHazard Bot. Can't start a sci-fi project without it, it makes the creation of detailed sci-fi environments so easy. This was the single most important asset in the whole project: the city, the big spaceship, and the massive artillery canon were built entirely with Greeble Kit.
Realtime CSG: I've been using Realtime CSG almost since it launched and I used it extensively in BHB: BioHazard Bot. It's a fantastic tool for blocking out environments, adding materials to them, and so on. The main landing platform area was modeled with it. Realtime CSG made it easy to model non-destructively so the platform could be easy to adjust to fit the shots as needed.
OilJack Indusrial Area: An important asset for creating this environment. Adjustments were needed on some of the materials to make them look right, but it worked out great.
CUSTOM PBR Sci-Fi Substances Vol. 1 and Vol. 2: For sci-fi textures, these substance packs are pretty awesome. I used them a lot in BHB: BioHazard Bot and they were a good fit for the landing platform area.
Unity Particle Pack: This was used for the fire and smoke particle systems of the towers.
Destructor Spaceship: This was used for all the tiny vehicles flying around in the main city area.
Desert Texture: The textures used for the desert terrain and mountains were made in a previous project using images from textures.com (formerly cgtextures.com).
Song - Space Cowboy: This song from Pond5 was a match made in heaven and really established the tone. It was added towards the very end of the project. There were so many happy accidents with this one--the length was almost exactly the same as the full animation, and many parts of the animation were already naturally synced to the music to the point that virtually no editing was needed. A surprise to be sure, but a welcome one.
Fake Interiors FREE: This handy shader was used on one of the buildings in some of the background shots. To be fair, you have to have a very high IQ to understand Fake Interiors (yes that's a Rick and Morty joke).
Recorder: This tool by Unity was used to output a JPEG sequence of the animation for the final submission.
Post Processing Stack V1: The Unity Post Processing Stack was powerful enough that no additional post effects were really needed.
Cinemachine: Naturally the project would make good use of Cinemachine. The virtual camera system was a joy to use in combination with Timeline.
There were a few custom 3d assets that were used here and there, but they were mostly existing assets from previous projects. The main one of course was BioHazard Bot himself, the same character model and textures used in game (yes he is that detailed in the game, even though you rarely see him up close). The other custom 3d assets used were the 3d model of the desert terrain, and a custom geode rock that was made using photogrammetry in a previous project.

Some assets that were used in early tests but not used in the final entry:

ProCore/ProBuilder, Free HDR Sky 1.0, Quantum Theory's Better Rocks and Cliffs

The Concept Phase

BHB: BioHazard Bot started out in Unity 4.x and released in Unity 5.3 and because of this I never had much time to mess around with the newer Unity features like Cinemachine, Timeline, and the new post effects stack. So I needed to take some time to get myself familiar with them and see what they could do. Although there are certain things I'm not a fan of with the V1 Post Effects Stack compared to the legacy effects (I don't like the in focus/out of focus transition of the depth of field), overall I was able to get great results.

One of the first things I like to do is set up the rendering effects and lighting to look nice so that I have something pretty to look at while I iterate. At this stage nothing was set in stone and I was just spitballing and seeing what worked and what didn't, and testing out different looks. I was initially leaning towards the idea of a sunset but later on I realized a mid-day sunny afternoon looked great too and for a good long while I was pretty undecided on which to go with.
Luckily, because the environment wasn't bound a traditional concept art image and instead WAS the concept image, I had plenty of freedom to frequently switch between both looks. For the mid-day version, I used the Unity procedural skybox which worked great because the environment was influenced by Southern California, and it's not uncommon to have sunny days with literally no clouds. The procedural skybox has settings you can tweak to make it look just right and it's a very underrated feature of Unity.

Having refined the general concept a bit, by the end of this phase I started building what would eventually become the main industrial city area using Greeble Kit assets and the Oil Jack assets. The desert terrain was modeled in 3ds Max but it was simple enough that I could have done it with the Unity terrain system, it was mostly a flat plane with the mountains in the distance.

Settling on the Look

At this point I was leaning more towards the sunny version but was still undecided. The thing that sealed the deal however was when I started to experiment with the color correction tools of the post effects stack.
This was the point where I was absolutely thrilled with the results and became convinced to go with the sunny version. With some minor refinements here and there, I really honed in on the cinematic the look I was after. Because of the high quality texturing work on the BHB character, he made a good test subject for refining the lighting and post effects settings, hence why he appears so much in these screenshots. The idea was that if he could look good, everything else would look good.

Various test screenshots


The Platform Area

Now that I had the concept down, it was time to crack down and turn it into a proper entry. I didn't want it to just be a pretty environment, I wanted it to involve storytelling. I decided on the idea of having this industrial area be something like a repair or refueling station for a giant spaceship, and this would be the main "hero" area. There would also be several BioHazard Bots walking around going about their business

Building the ship was straightforward enough, I'd already made one entirely out of Greeble Kit assets before so I just used that. The nice thing about using Greeble Kit is that it's completely modular, so it's easy to grab individual parts and move them around and stuff like that, the ship is built like Lego. For modeling the platform, I used Realtime CSG since it's easy to adjust the layout non-destructively (like cutting out that chunk in the center in the landing area). At this point I started experimenting with animations and camera angles to see what kinds of shots would work well. Some of the following screenshots became early versions of shots that made it into the final version.

Camera angle test screenshots

The Cutscene

I started out by first assembling the general animations, which in this case was mainly the ship flying above the city, landing, and then taking off again. The animations (landing and taking off) were done in Unity using the Animation window at the bottom, as were all camera animations. During this time I also placed a few BHBs around the landing platform with looping walk cycles. The idea here was to just get the general events in place (which could be refined later as needed) to have some "noise" to get the imagination going.
After that, I started creating camera animations. Rather than going in with specific shots in a specific order in mind, I instead first created a small "library" in the Timeline of camera shots. I'd look at the environment from different angles, I'd figure out what looked good and what didn't, and I'd get mental images of how the shots could go. Then I'd animate the camera and move on to the next one. This was an enjoyable process thanks to Cinemachine's virtual camera system. I made lots of animation clips this way and the priority was just to make lots of shots and worry about how they would fit together later.
Once I'd created enough shots, I started assembling them into a rough partial timeline. As I watched it, I would take notes on areas that needed adjustments, I'd think of new shots that would help different parts flow better, etc.
The workflow I found worked best was to have 3 virtual cameras in the scene. One camera would be the main one used in the final result. The second and third virtual cameras were always disabled and were there mainly for workflow purposes. The second camera's timeline track acted as the "library" where I'd put animations until I decided to use them in the main camera track. The third camera was the one I used for actually creating the camera animations. Whenever I wanted a new shot, I'd enable this virtual camera, make the animation on an infinite track, and then convert the infinite track to an animation clip and then move that clip up to camera 2 for storage or camera 1 for immediate use. I'd also drop clips back to camera 3 if they needed further editing.

Lighting

The lighting of the entire scene is real-time. Being able to iterate quickly was very important for my workflow and baking takes too long, so I decided to just do everything in real-time. The lighting is a combination of a single reflection probe covering the whole environment, and a directional light.
The biggest issue I ran into had do with the shadow distance in the quality settings. Because the environment was so large, a long shadow distance (around 1250 or higher) was needed for the big wide shots in order for shadows to get applied to the buildings. The problem however was that when things got up close and personal on the landing pad, it resulted in weird flickering and blurry shadows.
My solution was to make a script with a float value that would be used to set the shadow distance on a per-shot basis. I added the gameobject with this script to the Timeline and inside an infinite track I keyframed that value (with the keframes set to constant) so that the shadow distance would be very high during the wide shots, but low (around 500 or less) during the closeups.

Final result

When everything was ready to go, I used the Unity Recorder to record the animation as a 4k resolution JPEG image sequence. The recorder tool currently has some limitations and I wasn't able to output to the 2.35:1 anamorphic aspect ratio I wanted directly so I ended up using a script I used in BHB: BioHazard Bot which would force the 16:9 aspect ratio to 2.35:1. Outside of the titles and adding the music (since the recorder doesn't output audio), there was no external editing of the sequence, the video is pretty much exactly how it is when you hit play in Unity.
Overall this was a very fun project and I'm proud of how it turned out. There's tons more I could talk about, but this is getting long enough as it is. While I didn't quite get the Christmas break I was expecting after finishing BHB: BioHazard Bot, it was very refreshing to have a chance to work on something brand new and completely different. It was a chance to put into practice many of the lessons learned over the years, while at the same time being an opportunity to have fun with new tools and do something fresh and original.

Gabriel Acosta
3d Artist, Programmer - Programmer
2
Comments
Jorge Reyna Tamez
8 months ago
Game Developer - Programmer
Excellent work, conratulations!
1