GAS STATION - FUELING A FUTURISTIC GAME ENVIRONMENT

Read through as Think Tank Online graduate Julian Rabe breaks down his Gas Station environment. He explores the wide variety of techniques involved in his workflow to create such a detailed scene, as well as his advice on how to effectively tackle a large project without getting burnt out.

Introduction

Hey! My name is Julian Rabe, I’m 22 years old and from Germany. As a child I enjoyed drawing and playing video games which got me interested in the subject. I got into the world of 3D thanks to a Maya modelling class at university 2 years ago. After that I started learning more and more about 3D modelling on my own but my training was lacking in structure. So I searched for an organised education specialised in 3D Computer Graphics which led me to Think Tank where I enrolled in June last year. I recently graduated from Think Tank’s online program where I created this project during the Mentorship Term.

Blockout to Final

Here’s some GIFs showing the progress from the blockout to the final piece:

progress1.gif
progress4.gif
progress3.gif

Lighting

For this project I decided to go with dynamic lighting because it's an outdoor scene that wouldn't benefit that much from bounce light/global illumination and since my past projects were all using static lighting I wanted to try something new.

1_lighting1.png
2_lighting2.png

The main light source is a directional light (sun) with a light function with panning clouds. That way you get some variation and motion in the scene.

Light function with panning clouds

Light function with panning clouds

With the skylight I filled in the shadows to get more like an overcast effect. With the exponential height fog I tried to give a sense of depth and mood to the scene. Distance fields were enabled in the project settings and I used them for ambient occlusion and for shadows in the distance.

Shadow Filtering Method

I used an experimental feature in UE4 to improve the shadow quality and get nice soft shadows. You can enable it by typing the following command in the console: “r.Shadow.FilterMethod 1”. After that you can adjust the softness of the shadow with the source radius parameter of the light that is casting the shadow.

4_shadow_filtering_method.gif
5_shadow_filtering_method2.gif

IES Profiles

To get the desired light falloff I used IES profiles and played around with inner and outer cone radius of the spotlights.

7_ies_profiles2.png

I also placed some lights inside the building facing the outside, casting a light cone on the floor to increase the contrast of the warm interior and the cold outside platform.

8_lighting.png

To keep the scene optimised and performant with the amount of dynamic lights I decreased the attenuation radius of the lights to the minimum to get as little overlap as possible. You should use spotlights instead of point lights when using dynamic mobility especially with casting shadows enabled. So for the few point lights I have in my scene I disabled the shadows to help performance.

Volumetric Lighting

With the volumetric scattering parameter you can control how strong the effect should be. I used it to get a nice glow around lights and screens.

Light Placement

Light Placement

In some areas where the falloff had to be really specific, I used a special material combined with a sphere with inverted faces. I found this technique in this video. I recommend watching the entire series, it helped me a lot with lighting scenes in Unreal Engine.

12_Volumetric_Lighting.jpg

In some areas I also used the lights as compositional elements. For example on the landing platform, pointing at the car and along the path around the shop.

Think Tank Online

I had a great experience at Think Tank. I really enjoyed the live sessions with industry professionals. They guided me through my projects, gave me confidence, and eliminated the guess work. The supervisors were very supportive which allowed me to feel more relaxed and productive. I especially appreciate the fact that they helped me choose my career path as an environment artist. Throughout the program you get a good grasp of the different fields to be prepared when it's time to specialise. 

Despite being so successful it's still a small school overall, with small classes and individual feedback for each student. The online format was the perfect balance for me between a structured curriculum while still maintaining the flexibility and freedom that comes with learning on your own. I was able to schedule my week as I want but the school ensured that I keep on track and come closer to my goals. 

Where I live, there are only a few good schools and to have the opportunity to study at one of the best schools on this planet, no matter where you are from, is just amazing. Since this format attracts people from all over the world you get to know international students and teachers with all kinds of different backgrounds which made the meetings together always interesting and refreshing.

Mentorship Term

Think Tank has a great portfolio of mentors to choose from for the mentorship term and recently they added the possibility to attend weekly mentor meetings additional to your normal weekly sessions to get even more feedback. 

I chose Sean Obridgewitch and he was an outstanding mentor. 

The term is 4 months long and there is a live session every week. To manage the project we collaborated on a Miro board, where he mainly posted paint-overs and I filled up the board with concepts and ideas for the scene.

Mentorship_term.jpg

Workflow Improvements

The trim sheet master material definitely improved my workflow. It allowed my to work on the environment in an iterative way. So a lot of the large platform pieces got multiple passes throughout the project. The possibility to swap certain decals at any time allowed my to try out different floor lamp designs without modifying the geometry or re-baking textures.

To populate the store shelves I created a blueprint that lets me quickly create arrays of static meshes. You can adjust the amount on each axis, the offset and rotation. For every setting I added a “variation slider” to add some randomness. By default it uses instanced static meshes to help the performance but on some meshes I wanted to mirror them to get more variation and since you can’t mirror instances, as soon as you toggle the mirror boolean it falls back to a normal static mesh component. You can also add multiple static meshes in the array and scatter them randomly.

2_Workflow_Improvements.gif
3_Workflow_Improvements.gif

Composite Roughness

In a workshop about lighting, Brian Leleux showed us this feature to modify the roughness map with the normal map. You just open your roughness map or the packed map in my case and select the normal map in the compositing tab. Underneath you can pick the right channel if you have a packed texture (I had to select the green channel). You can see the effect that it has in the GIF animation below. It basically spreads out the highlights a bit based on the curvature and improves the overall readability.

4_Workflow_Improvements.jpg
5_Workflow_Improvements.gif

Snow and Ice

For the snow I added a vertex blend to my master material (see also Trim Sheet section). It uses the height blend function so it slowly fills up the cavities until it covers all of the trim detail. To hide the hard edges between the platform pieces I placed snow clump meshes and some snow balls for visual interest. The snow meshes use DitherTemporalAA in the Pixel Depth Offset input to avoid new hard edges where the meshes meet.

1_Snow_and_Ice.png
Notice the softer transition between the snow and the platform pieces

Notice the softer transition between the snow and the platform pieces

With the spline tool in Unreal Engine and a decal material on it, I created tire tracks that the mobile light rig would create when moving it around. Here the same dither technique is used to blend it better with the ground and also you can mask the track in certain spots with vertex colour.

3_Snow_and_Ice.png

With the icicles I was focusing on the silhouette and in general where it would make sense.

Hologram

I used these tutorials for reference: 1, 2, 3. The shader is basically just a texture with opacity with multiple fresnel effects on top and panning clouds and scan lines.

1_Hologram.jpg
Fresnel effects

Fresnel effects

I reused the hologram shader at the bottom for the large signs and for the gas pump hologram.

3_Hologram.jpg
4_Hologram.jpg

Here I quickly modelled a gas nozzle mesh and projected the UVs so the scan lines go in the right direction.

Trim Sheet and Advanced Tiling Materials

The green parts are the meshes that are using the trim sheet material. So I used it almost everywhere and even for some props that are not so important.

The trim master material uses parallax occlusion mapping to fake the decal insets so it almost looks like actual geometry. I used 3 vertex blends for dirt, metal edge wear and snow. Tinting the material with a mask made it versatile and ready to be used on a bunch of objects.

3_Trim_Sheet.gif
Breakdown of one piece

Breakdown of one piece

I tried two different ways to achieve the effect of a trim texture and a tileable material on top. The first one is to create a second UV channel and then use the first one for the decals and the second one for the tileable material. The second method is to use world aligned textures in Unreal Engine (it’s basically a triplanar projection) and only use the UV channel for the decals. This one is faster and easier because you don’t have to export a second UV map, it just works in Unreal but it might be more expensive and you can’t animate the meshes unless you don’t mind texture swimming.

Jet Effect

I used an effect from the Infiltrator Demo by Epic Games as a base. After that I tweaked the settings to my liking and redid the heat distortion because the default one was quite strong and distorted the lower half of the ship to much.

Simplified it’s a cylindrical mesh with a translucent material that is rotating quickly with some jitter. The UVs are laid out straight so the texture can tile around it.

1_Jet_Effect.jpg
3_Jet_Effect.gif
4_Jet_Effect.png
Heat distortion

Heat distortion

6_Jet_Effect.png

For the orange side thrusters I just tweaked the color and scaled the mesh to fit to the different exhaust shape.

7_Jet_Effect.png

Adding Life to the Environment

Movement Blueprint

This blueprint allowed me to animate the sign and the vehicle procedurally with the cosine function. So it's just like an idle animation with small movements back and forth, up and down and left to right. 

2_Life_to_Env.jpg

Blinking Lights

In this shader I have two different blinking animations that you can select in the material instance with a static switch parameter.

3_Life_to_Env.png
4_Life_to_Env.gif

Ads

For the Ads I felt like standard emissive textures were a bit boring so I added some glitch effects and motion graphics on top to grab more attention like real ads would do.

5_Life_to_Env.gif

Rotating Parts

For the vents in my scene I created a small blueprint to animate the blades.

6_Life_to_Env.png
7_Life_to_Env.jpg

Also some steam and fog from vents or the engines add a lot to the scene and mood.

8_Life_to_Env.jpg
9_Life_to_Env.jpg

Feedback

Fortunately I had a Mentor for this project: Sean Obridgewitch. He guided me through the entire project and whenever I had a question I could directly ask him. We had weekly feedback sessions and wrote emails almost daily. The Think Tank community is very supportive and for example I organised some live sessions together with another Think Tank student (Nikhil Kedige) to share environment projects and get feedback. 

Outside of Think Tank I can recommend the following Discord channels:

  • The DiNusty Empire

  • Experience Points 

  • No More Grid (NMG)

  • FlippedNormals

  • JRO Tools

Future

My main focus will always be Environment Art. But maybe I will do a hero prop while searching for a new idea/concept for the next environment.

I’m also interested in learning more about design to create without relying on concepts too much. Houdini has got me interested as well because I really enjoy working with nodes like in Substance Designer and some recent work that I’ve seen that was made with Houdini, impressed me a lot. Organic environments are on my list too, so stay tuned!

Advice

My number one advice is patience. Like most things in life, good things take time. Same with 3D, to learn all the software and art fundamentals is taking a lot of time so make sure you’re in for the long run.

Second most important one is: immerse yourself in the 3D world. There are so many resources out there (Discord channels, podcasts, tutorials, Artstation, articles from 80.lv and Experience Points, Polycount). I collect a huge list of tutorials, articles and videos saved for later so there is never a situation where I don’t know what to do, so try to be too busy with 3D that way you don't have time for distractions. 

Working constantly on something instead of small bursts is a big one. By working just a few hours everyday you will get so much more done than doing crazy weekends and then recovering from it. Sometimes it’s hard to start and it happens to me quite often that I’m not that motivated at the beginning but after a few minutes I can’t stop anymore. If you encounter days where you really don’t feel like you want to continue working on your project I try something new to freshen up, but still related to 3D or to the environment. For example for this project, I added some functionality to open up the trash bins. When your close to it, you can trigger them with the “E” key. Also you can walk to the car and fly around. Doing something just slightly different is most of the time enough for me to recharge my batteries and continue working.

1_Advice.jpg
Interactive trash bins

Interactive trash bins

The car has two modes, a hover mode and flying mode. When hovering the controls are similar to a quadcopter, optimal for landing and maneuver in tight areas. The flying mode is inspired by the “Flying” template in Unreals New Project section and behaves more like a plane so you can roll, yaw and pitch.

3_Advice.jpg
5_Advice.jpg

Outro

I hope you found something useful and maybe learned something new. Feel free to contact me if you have any questions! julianrabe@gmail.com