Ivan Novikov did a breakdown of his Half-Life inspired environment, discussed his workflow in Blender and in its real-time engine Eeeve, and talked about using Megascans Library for the concept art.
In case you missed it
you might find it interesting
Hi, my name is Ivan Novikov, I’m 26 years old, born and raised in Lyubertsy, a city near Moscow. I like video games and I’m a big fan of the Half-Life series. I literally started out with 3D because I was messing with Hammer Editor and wanted to make custom models for Half-Life 2. This was my first exposure to 3D graphics.
I found out about Blender in 2012 during my first year at college. I had a task to make a presentation and wanted it to stand out from the rest and decided to utilize 3D graphics and make some animated slides. It was an Apple-style presentation about gadgets. I've done this presentation, and I did it well, thanks to Blender. I was inspired by this first success so I continued digging it during my 4 years at college.
After four years of online courses and Youtube tutorials, I had some experience with 3D, but my knowledge was fractured, so I decided to apply to a computer arts school in Moscow. I applied for a 2-year course called “Computer graphics for video games”. Only there I learned Unreal Engine, ZBrush, learned about modeling principles for production and found out for the first time about such basic things as baking. This course was designed with Maya in mind as it is an industry-standard, but I stayed true to Blender and was using it as my DCC package way before it became cool with the release of Blender 2.8.
Upon graduating from this course, I got a job offer from a game studio “Anvio”. Anvio is a developer studio that focuses on making full-body virtual reality game experiences. I’ve been working in this company for the past two years and I was a part of several projects, for example, “Lost Sanctuary” and “Station Zarya Last Frontier”.
Inspiration & References
It’s a bit unusual how I started working on this scene. I made this scene out of necessity. I was invited to conduct several lessons for beginner concept artists. The main goal of those lessons is to showcase how a concept artist can use 3D and Blender, in particular, in the workflow. I decided to make a Half-Life Inspired Scene to showcase the power of Megascans to my students. The deadline for this scene was very tight since I wanted to show it in the upcoming lesson. I started working on this scene just two weeks prior to its release on Artstation. Initially, it was supposed to be an example scene, but while I was building it, I began to like it more and more. So I decided to keep pushing it. That was the time when I added important details, such as dynamic cable, electricity discharges, and a character.
I had several references for my scene. One of the main ones was Half-Life 2, the game itself. One of the levels of the game features a similar lighting setup, bright white light is coming from the window into the basement. Other references were a photo pack featuring abandoned, broken buildings. I also draw some inspiration from Gleb Alexandrov's work.
Layout & Modeling
When I was planning the scene, I wanted to make an environment that would look hostile. So I added a water surface as an obstacle and I had a character that was supposed to overcome this obstacle. I wanted to tell a small story within this environment.
Modeling was simple for this project, but there are some things worth mentioning. For example, I knew from the beginning that I want to use vertex paint material blending on the walls, so I subdivided walls a few times, to get an evenly subdivided surface that I can paint on. The way I created pipes is another thing to mention. I used a Piperator addon to generate them. It creates pipes procedurally based on the geometry of the scene. Very handy to save time.
Speaking about pipes. I was on a deadline and I didn’t want to waste any time unwrapping them, so I used a tri-planar method to apply textures on to them. With this method, there is no need for good UV’s, and the result is great. The person behind all this cool math is a user named Avenger. You can check out his work at the Blendswap website and download his tri-planar material example there. I modified his material for PBR because the original material only has slots for diffuse texture.
Another thing to point out is that I made this scene look like a diorama, and some walls are missing from the final shot, but while I was baking light, I was placing temporary walls to get correct light bounces in the scene.
Megascans for concept art
Megascans library is a huge time saver for a concept artist, it allows to just import and place decals, materials, and whole models in your scene. There is a small hiccup with the way decals are exported from Bridge to Blender since Megascans only send decal material to Blender, but not a mesh. In order to get a mesh with the correct aspect ratio, I use built-in addon “Images as planes”. After I import the decal with the correct aspect ratio, I just replace material generated by “Images as planes” addon for the one from the Megascans library.
But when it comes to exporting materials or meshes from Megascans to Blender, it’s a seamless process. But I always try to improve the materials that I get from Megascans. I like to tweak roughness with Brightness and Contrast nodes and adjust color with Hue Saturation Value node. For example, I adjusted color for the steps material (Damaged Castle Stairs on Megascans) to make it's color less saturated to fit in with the surrounding.
For people that recently started to work with Megascans or even open it for the first time, it might be overwhelming to search for the right assets. When I choose assets for my project, I usually go through Collections that correspond with my scene theme and add to my favorites everything that even remotely looks interesting. After that, I browse what I favorited and sometimes just by looking at assets it is possible to come up with new ideas. For example, it was a great success to find Concrete Rubble Pile asset, it fitted perfectly in the corner of my scene. Before I found it, this corner was just empty.
Even though I was using Megascans Library, materials weren't an area to slack off or relax. In one way or another, I tweaked every material that I imported.
For example, I added puddles to a floor material, I added fake caustics to the walls and objects that were close to the water, vertex paint blending feature for walls, and so on. Now let’s give some of those materials a detailed look.
Let’s take a look at the water material first. It’s a completely procedural material. It can be animated (green fields is the fields that I animated to make water flow)
Here is an example of wet material. This setup is how you can make any surface look wet. Procedural puddles made with Voronoi texture.
In order to detail walls, I used both decals and vertex paint blend material. Here is an example of a vertex paint material. It’s not the only way such material can be set up in Blender, but this is what I came up with. We have two sets of textures, two materials in one shade and we can paint with those materials with vertex paint.
The rest of the wall detail is coming from decals. I applied a lot of decals and probably could’ve applied even more, but I didn’t want to overload my scene with too much detail. I like working with decals, it gives you the freedom to put detail exactly where you want it to be, layer them on top of each other. By layering decals, you can tell a story of surface decay. First, we can put some cracks, then we can apply leakage decals and then graffiti. The only drawback that decals can be performance-heavy, so be aware of it.
Lighting and Render Settings
I knew from the beginning that I would use the real-time engine Eevee inside Blender to render my scene. It’s very powerful and can give great results fast. Some people in the comments were asking me if I was using Unreal Engine. It really is hard to tell them apart sometimes, and it’s totally possible to get realistic results with Eevee.
The lighting setup in a scene is very simple. I used a static Area Lamp to light the whole room. The only thing to remember here is not to forget to switch on Contact Shadows for your lamps. I made this scene look like a diorama, some walls are invisible for us, viewers, but when I was baking light, I was placing temporary walls to get correct light bounces in the scene.
Speaking of light baking. The way that Eevee handles light baking is speeding up the work process a lot. You don’t need to create Lightmap UV’s for every object in the scene. Eevee will bake light for any model just fine. All you need to do is to add special baking volumes to the scene. They are called Probes: Irradiance Volume for baking indirect light bounces and Reflection cubemap to capture scene reflections. Speaking of reflections, I added another type of probe to the water surface and floor: Reflection plane. It works similar to Planar Reflection from Unreal Engine. It provides accurate reflections by rendering your scene second time from the perspective of this probe. This effect is very important for any scene with large reflective surfaces.
When it comes to rendering the settings, I always switch on Ambient Occlusion, Screen Space Reflections as well as increase Cube Size and Cascade Size in the Shadows panel. It’s a must for any scene. This time, I switched on Bloom because I thought that it will make electricity discharges look better, but this one is optional. I often leave it off because bloom often makes scenes look dreamy.
Cable was a very interesting thing to set up. It might seem complicated at first but the main concept goes like this: we create a string of vertices, one vertex for a segment of the rope. This string of vertices is being simulated with cloth simulation. Since it’s only a handful of vertexes, blender simulates it on the go, real-time. Then, on top of those vertices, we add bones, one bone for every vertex. We parent rope to those bones and then attach bones to those simulated vertices with IK constraints and Empties (we create one Empty object per simulated vertex). So in the end, we have a low-resolution cloth simulation that drives a high-resolution rope mesh. Real-time.
Electricity discharges were another interesting effect to set up. In order to create a discharge itself, I started with a thin strip of polygons, then I added a Subdivision Surface modifier and two Displacement modifiers with Cloud textures. For those Displacement modifiers, I set Texture Coordinates to Object and set this object to be an Empty. With this setup, the shape of electricity discharge changes each time I move the Empty object. This gave me unlimited variation to the shape of the electricity discharges.
The rest is animation. I animated the transparency parameter to make electricity discharge appear at the right moment, I animated Empty so discharges will change their shape while it is visible. I animated lights to appear when electricity is striking and last but not least, I animated force field Wind to blow on a cable after each discharge. All this together created the illusion that electricity itself both light up the room and shake cable, but it’s not, it’s all smoke and mirrors.