I'm Jorge, from Monterrey Mexico. I am the "game development team" of Casablanca Sistemas, a small software development studio located in Mexico city. I've been developing with Unity for almost 4 years now, currently I have 3 games published. I'm mainly a programmer not an artist, but I think Unity can allow me to overcome this limitation and to produce something really interesting, that's the reason why I decided to join the Neon Challenge.
This is my final submission after discarding 2 previous ideas, please see the "Update log" section.
My inspiration comes mainly form some wild dreams I had when I was on induced comma at the hospital due to a severe desease, complemented with ideas from several sci-fi movies, like Avatar, Star Trek and Star Wars. I didn't use any particular image as inspiration, so I jumped straight into production.
The story takes place in a post a post-apocalyptic future, where the survivors of a nuclear holocaust have built a new civilization upon the ashes of what once was called "a blue dot in the sky". The story revolves around Neblu a mining colony that processes the radioactive minerals resulting form the nuclear blasts allover the world, and export them to other planets.
My first task was to set up the environment. I live in a city surrounded by mountains so I thought it could be a good idea to use these mountains for the location of my scene. To do so I went to terrain.party and downloaded the height map of the area I was interested on.
Below you can see the final result after some editing in both Photoshop and the Unity's terrain editor.
This is a 64 squared kilometers terrain (8000 x 8000 meters), that's a huge chunk of land to fill with streets and buildings, so the second step was to build a large enough city within a short period of time. In my two previous attempts I tried to fill the space with huge buildings, but to detail them and to place them manually in the proper location consumed lots of time and the results weren't satisfactory. After the holidays and several days sick, time went away too fast and I wasn't satisfied with what I had so far (see Update 9). Then I remembered the Borg Cube from Star Trek and the Death Star form Star Wars, after looking at those images closely I realized they were made of modular components that repeated randomly, so I decided to take the same approach. I stated modeling blocks of 100 x 100 meters. I might be wrong but I feel that's the size of an average block on a whatever major city in the world. The streets are narrow because I think in a city that can distribute vehicle's traffic vertically the need for horizontal space is greatly reduced.
With just 10 of these modules and a script I wrote in a matter of minutes I could build the city in the image below, the whole process took me just one day, that's about one hour per modular block.
I believe in an efficient city all buildings ought to be the same height, also the city should have huge walls to keep an isolate climate, so my city had to be surrounded by walls, but not just walls, the walls are buildings themselves containing factories. So I created three additional models for the walls.
Advertisement drones use particle systems to simulate a hologram effect, it's very sutil but I think it adds up to the final result, the particle system has lights enabled to simulate light irradiating from the holographic display screen. The display screen is simulated with world space canvases.
One of the sci-fi scenes that have impressed me the most, was the mining scene at the beginning of Avatar. One day I decided to make my own version of the mining truck, but even bigger. I used that for a test project some time ago, so I had that asset already made, I just added more details for this project.
I modeled this and other simple Assets using SketchUp, the rest of the 3D models I found them on the Asset Store (see the full list at the bottom of this article), and that saved me a lot of time.
The materials for this project are very simple, I'm using only built in shaders with some textures form the assets listed at the bottom of this article, but also with some textures I made in Photoshop. Some buildings have movie advertisement displays, the material for those is a render texture which is updated by a video player attached to a hidden object. That way I can use one material to play the same movie on different displays.
Vehicles in the scene move by one of three methods. The mining trucks are driven by a scripts that controls speed and steering, it's a very simple script that just contains a list of commands that are executed at specific times. Flying vehicles like drones and space ships, are moved by a script when they follow a mostly straight path, but there's complicated and time consuming to create a script for complicated maneuvers, that's when Cinemachine and Timeline come in handy.
Cinemachine & Timeline
There are two methods I'm using to move the ships, the first and I guess the simplest is to create a dolly track with cart and to make the desired object a child of the dolly cart, that works great when you have one object moving along the path, you only need to add an animation track to your Timeline.
The second methods doesn't require an animation track on the Timeline, I only need to set the desired speed on the cart. In the last scene, there are several ships patrolling the factory, I'm using several carts on only one looped dolly track.
To move the camera the way I wanted I created several virtual cameras and assigned different objects to follow and/or aim, then I blended them into Timeline. The Video starts with the camera fixed at the ground, and then it blends consecutively to the next virtual camera, as you can see on the image above.
My original idea was to keep the camera moving from beginning to end in a single sequence of blending cameras, but soon I realized the camera cannot see anything that's beyond 5000 meters, weird things happen with the skybox when objects are further away, also there are problems with lighting and shadows, so at some point I needed to cut the scene in order to hide those adverse visual effects. For the camera movement I'm using only one dolly camera with track, in the final scene inside the factory, I'm moving an empty gameobject along a dolly track, and the camera just follows it.
Getting the lighting right is sometimes tricky, in a project with so many assets this big, waiting the light baking process to complete is just impractical. For this project I disabled the global illumination, but that made objects too dark at some angles, to correct that I made an array of 4 directional lights to ensure all surfaces of an object get some light regardless of their orientation.
One characteristic of the city is that all blocks are the same height, this generates strong shadows that make the overall look of the city darker as you get close to the ground, one solution is to make the building's materials emissive, but at the cost of loosing the metallic and smoothness effects. You could also place spot lights or point lights at strategic places, but that makes and uneven lighting, areas closer to the source become brighter while areas further away remain darker, my solution was to use a particle system with lights, that way lights are "pumped up" form roofs to floors, making a more even lighting across high walls.
Original my approach was to play the scene, changed some values and repeat again and again until getting the overall desired result, the problem with that approach is that it takes too much time and in the end you're never get fully satisfied. Getting close to the end of the project I realized the best way of doing it is to create a simple scene with just the main subject(s) then adjust set all the parameters and tweak them until your subject(s) look(s) as you want, then apply the results to your production scene.
This can also help to correctly calibrate those hard to tweak materials.
In this scene I'm using a single post-processing global volume, with color grading, I want a hot looking environment so I'm cranking up temperature, I'm increasing the contrast to make the scene more vibrant, and reducing the saturation because when combined with the other effects colors look over-saturated. I'm also using bloom to accent the lights, ambient occlusion, screen space reflections, motion blur, and chromatic aberration.
Originally (as you can see on the update log) I was using the depth of filed effect in almost all my virtual cameras, but the last month I saw several Pixar movies and payed special attention to this particular aspect, I was surprised to see they use the depth of field effect very seldom, apparently they only apply it when it is really important, so for this final submission I decided no to apply this effect.
One of the problems I faced when trying to record the video was that the Unity recorder makes difficult to record the UI properly when motion blur is enabled in the post-processing stack. The recorder only captures the UI when the Canvas render mode is set to "Screen Space - Camera", in most cases that doesn't mean a problem, however if you have the motion blur enabled and an object moves too fast the canvas gets also blured, which is not desirable. I solved this problem by adding a second camera, the canvas render mode is set to "Screen Space - Camera" and the render camera is set to the second camera which has no post-processing stack.
At moments there are lots of vehicles moving around which could cause a notorious performance drop, to prevent that, the scene is divided into sets which activate and deactivate according to the current needs.
Trying to remake the whole scene in record time...