Creating a Gothic Horror In Unreal Engine
It’s time to get spooky! In this article we’re joined by Marcin as we dissect his gothic horror, Bloodborne-inspired environment. Discover how Marcin used level design principles, modular kits, blueprint tools, fog and much more to craft a beautiful scene of epic proportions and packed with detail.
Intro
Hi, my name is Marcin Wiech, I’m a game-dev generalist since 2008, living in Warsaw, Poland. I’ve started as an environment artist and been doing hard surface modelling for games and cinematics, among some other things in game-dev area. From 2014 I’m focused more on wider development pipeline (mostly for VR and AR) in one of the Polish XR companies (doing coding, devops, rnd, some technical art), but still creating environments whenever I only have time, as it has always been something very close to my heart.
Composition
First, let’s list some of the elements of the classic horror theme (in no particular order):
mist and fog, volumetric effects, light diffusion
full moon, midnight
monotone, cold and dark colours with contrast focus points
heavy and harsh architecture, preferably gothic: sharp and monumental
vampires, werewolves and graveyards
mystery, unknown
Now, let’s take a look…
So as you see, I just stuck to the points on the list. This is only one of the views, but the rules apply more or less to the whole level. Level design and asset placement is also just some basic level design principles like guiding player with paths, shapes and light and filling areas with objects without creating too much noise and clutter:
Obviously, not every single meter of the player’s path is created this way, but important places are.
Colour and Light
The theme itself made the choice quite easy, especially that I wanted to stick to the good old blue/ orange formula. Most of the view is in blue-ish tones (it’s night, full moon, and it creates nice mysterious atmosphere), the rest in oranges for contrast (candles and lanterns play naturally with the scene, small orange spots give good focus points to the player). The rest is just playing with shadows and lights to make the views interesting and filling areas with lit fog, to get some light volumes, not only lit surfaces (more on that later).
Inspiration Behind The Scene
Bloodborne. Some of my favourite themes in one place: eldritch, Lovecraftian horror, full moon, nightmarish beings and twisted gothic architecture. I knew I couldn’t reach Bloodborne’s “unworldliness” level and polish, but I just had to try something in that direction.
Goals When Creating The Scene
Apart from the looks, I wanted to create something playable, a piece of a level that could be used i.e. for testing game mechanics like combat. Modularity, reusability and simplicity were the base – for quick design reiterations and assets that can be integrated easily to other projects as well. No heavy complex materials, no super custom asset setups, ‘as simple as possible’ approach. Also, I wanted to have 60+ fps on GTX 2070 in Full HD everywhere, with all the goodness of realtime rendering (DFAO, volumetric clouds and fog, fair amount of details, etc), no baked lighting. Lastly, a night and day version, with most of the focus on the night setup.
Lighting Breakdown
The main principle I always take with lighting (and, well, everything else) is „keep it simple”. Don’t overdrive values, don’t compensate one setting for the other, turn knobs and switches only if necessary, one at a time. With outdoor scenes like this, I start typically, with directional light and a skylight and one unbound post-volume. I set auto-exposure to Min/Max = 1 and compensation = 1 (this basically turns the auto exposure off). I don’t like auto exposure, because it adds more variables to the overall setup and it’s harder to tune everything. I set directional light and skylight to 1, then add clouds, atmosphere fog, height fog and leave them with their default values. After that I start to play with the overall ambient. Skylight (at it’s default distance threshold) renders what’s on the skybox – whether it’s just clouds, atmospheric fog or height fog. How much they are lightened with directional light plays a big role in how bright the ambient will be. I leave the sky intensity at 1 and play with the dir light intensity and height fog settings. I wanted to have some moon shadows, so I set the directional light intensity to 0.5, but at this point the height fog was too bright for the night scenario so I turned the value of the fog inscattering colour down, to 0.03. Fog and the sky started to look more or less fine together, the ambient went almost completely black, but now I had complete control of the scene overall ambient intensity, with good fog values.
I ended up with setting sky light intensity to 3.5 – fog, sky and clouds brightness played together nicely, and I had just enough ambient light everywhere to not have black spots and a lot of room to place point lights like lamps and candles. That was the base for the lighting. The rest was just playing with colours without touching values/ brightness anymore: first moon and the skylight colors as the base, then height fog inscattering colour, global saturation, gain and shadows in post processing, but only subtle colouring of brights (gain) and darks (shadows), nothing else. It’s very easy to overdrive post process and I wanted to keep things as simple and paint the scene with light, fog and materials, not screen effects. Last thing was setting the fog scattering for the moon and the sky. I started with increasing the scattering intensity in skylight to 2 to brighten up sky influence on the height fog and local fog volumes a bit, and turning scattering in directional light way up to 6 to give the moon light a boost. With both sky and moon volumetric shadows enabled, I got good distinction of areas in the moonlight vs areas in the dark, plus no moon/ sky influence in interiors. Everything else like bloom, flares, chromatic aberration, etc is just cosmetics, remember to not overuse them. There’s one thing to remember when working with lighting and creating your own materials: it’s important to have only small value changes in material’s base colour and never go fully white or black. Otherwise it will be hard to unify everything and paint the scene with light. Too bright or too dark base colour will get you to the point where you will need too much light (to compensate for very dark base colour) or too little (to fight overexposure).
Planning
At the very beginning I was planning to do only the entrance to the cathedral (without the interior) with some small walkable front area. The rest supposed to be only mark-ups and closed spaces, just to make a few screenshots and small playable binary (something similar to my industrial scene). When I was done with basic building blocks, I thought it would be nice to do a little bit more than just the front of the cathedral.. and as they say “Appetite comes with eating”, suddenly there was the whole blocked-out level, with the lower parts, the cathedral front and the bridge, cathedral surroundings, interiors, the cemetery and big list of assets to create. So honestly, there was no ahead planning of the scene apart from some basic nice-to-have list and references. Everything came more or less along the way: I divided the level into focus areas and tried to create some design differences between them, refining distances, scale and spacing, so a lot of reiterating until I was satisfied with the design and performance.
Techniques For Creating A Large Environment
Modularity and trim sheets are the key here. I knew I needed different environment pieces, but I also knew I couldn’t create huge amounts of unique ones. Creating each module in ZBrush with custom texture set and material would give the best visual result, but memory and time wise it was completely not an option. I started with about 10-15 environment meshes just to make the level blockout, and I was sure to go with trim sheets. They gave the ability to push many different types of the same material variation into one texture set (like small and big bricks/ blocks, trims and decors, tiles, etc), while keeping material uniform across the modules (and having much less material instances for the whole scene). Next big time saver is modularity. With good set of building blocks you can reiterate very quickly (I needed that a lot), and combined with trim sheets it gives very high reusability (same tiles on a texture can be used on a wall and a column, one or two texture decors tiled in one axis can easily be used for a trim, a doorway ornament or a base of a column). When everything is more or less on it’s place, the real magic comes when you detail, refine and export one module, and the whole scene changes, sometimes dramatically. Lastly, Unreal blueprints are great for creating simple helpers for procedural asset placement (more on that later).
Considerations When Creating A Scene With An Interior and Exterior
A very important part in setting up the meshes was making them fit together on a fixed grid (first defining the ‘smallest grid step’, in this case 0.5m) so the blocks can snap to each other in different configurations, with overlaps, but without much z-fighting (in problematic areas I could always place some smaller decorator piece for masking such area: a trim, column, corner décor, etc). Next thing is making meshes double sided, i.e. one side of the window has the same details as the other side and can act as an inside and outside wall at the same time. Big rectangular column can be a wall ending for the outside, but stick to the interior a bit and act as a corner decorator inside, etc. I also didn’t want to have different post volumes for interior and exterior, so I relied mostly on lighting. As mentioned before, the whole process was to balance basic scene lighting (sky and directional light) with fog first, then place lamps and candles. DFAO, Fog and volumetric sky/ moon light shadowing helped to make the scene a bit brighter outside, while the interiors stayed slightly darker, relying more on the point lights.
Creating A Sense Of Scale
It took a bit of a trial and error. When I created the first environment blocks, I started with Unreal mannequin as the scale reference for third person view. After some running through very roughly blocked out scene, testing different scales of the blocks, I decided that the default wall will be 5x5x1 meters. Everything else was in relation to it, on the 0.5m grid. This way I could have fairly low amount of modules rendered, but enough to reuse everything with not that badly visible repeatability, even when I needed some really tall or wide constructions. The rest was just reiterating to see what works or not, looking at the scene from different angles (99% of the time from the player’s perspective) and moving things around. Also fog took a part in creating the feeling that the scene is bigger than it really is. Even when not very dense, it slices the view into planes - the brain focuses on clearly visible things nearby, and less visible and contrasty they are, the greater perceived distance.
Prop Workflow
This was just regular approach: modelling mid-poly in MODO, exporting and creating high poly and decimated low-poly in ZBrush, going back to MODO for clean-ups and unwrapping, baking and texturing in Substance Painter. Nothing too crazy here :)
Statues
I knew the scene had to have some statues, in Bloodborne there are tons of them and I really couldn’t imagine a gothic level without even small amount of such props. The problem is that I’m not a character artist, even a tiny bit. That’s where Daz Studio came with help and after a few hours of doodling I came with the workflow:
After the first statue, the rest was just repeating the whole process again. Daz Studio, Marvelous Designer, ZBrush and Substance Painter are absolute time savers.
Each statue has unique texture set. I was thinking about masking + tiled textures, but at that point half of the other props had unique texture sets already and I went along with uniformity across the project (so not creating another specialised master material).
Foliage
The secret is to place everything to appear there is much variation, while in reality, there isn’t. I think most important thing is to have different scales of foliage to create a detail gradient: tiny clumps of grass, tall weed sticking out, horizontal wide ferns, and vertical vegetation like ivy and trees.
Small foliage is fairly simple made: just some cards, simple cut shapes placed together to create a plant. Trees were made by extruding tubes along splines (trunk and branches), giving them some randomness and weird shapes (after all, these are trees from a horror), smaller branches and leaves are just cut-out planes. Tree bark is the only material I created with scans (I used 3DF Zephyr and Substance Alchemist for this purpose), the rest are just processed photos with good old bitmap to material.
Everything had to be modelled and combined more or less by hand, because I had pivot painter wind in mind. PP demands good mesh setup: each part of a plant or a tree has to have it’s pivot at origin, pointing in direction of the mesh bounds, and everything must be hierarchical: branches attached to the trunk, leaves attached to the branches etc. If something is wrong, pivot painter plugin will not process the object properly and will not bake good textures for pp wind. For PP baking and exporting I used PP plugin for Blender.
Blueprints
Apart from the standard setup of master materials and their instances (for unifying textures sets usage and vertex painting layers) there are some helper blueprints for making level design easier. Spline fence blueprint is one example. I wanted to have something for making simple barriers and decorators, but more flexible than just set of modules. I came up with a blueprint that spawns mesh instances along the spline, but with some control: there are regular ribs of the fence with some repeating larger ‘main ribs’ and mesh connectors between them. Space between the ribs is set by the width of connectors automatically, and everything is aligned with the ‘flow’ of the fence – you can rotate spline control points and the whole fence bends and turns naturally, you can randomise the rotations of the ribs and the connectors will follow, etc. Other helper blueprints include some grid spawner for cobblestone (where every brick can align with the terrain position and normal), leaves spawner for ivy roots (leaves spawn on vertices positions and their scale is controlled by the curve in regards to Z axis of the object’s bounds). Unreal blueprints are awesome for making really simple tools that can save a lot of time automating design work!
Sky and Fog
Most of the lighting setup was described in the lighting breakdown, but I’d like to point out again one specific thing I wanted to achieve – good distinction between dark and bright areas, or “real” light volumes - not only shaded surfaces, but bright haze wherever the moon is casting rays. Needless to say, volumetric fog in Unreal is absolutely awesome.
Areas Looking To Grow As An Artist
Where the algorithms and art meet. We have some non destructive workflows like smart materials or modifiers stack, but with procedural modelling there can be so much more! I’d love to get my hands on Houdini, model graph in substance designer or Blender’s geometry nodes.. just when I learn to clone the time. There is a great potential in parametric modelling (MeshOps) in MODO, but docs and tutorials are scattered around, making learning it very hard. When I started my journey with 3D I wouldn’t even imagine of all of the tools available now and can’t wait to see more.
Inspiration
I see inspiration in two categories. First are ideas, and those are everywhere and everyone has some. Better yet, you don’t even have to think of anything new, the world around is full to the brim with nuances and intricacies. My history-passionate friend used to say that you don’t need to create unique ideas to make good games or movies. Just read history books and you’d be amazed of all the things you don’t hear from teachers or popular tv shows.
Second is execution. Truth is, even the greatest idea executed poorly will be abandoned and forgotten quickly, and even the most simple idea executed perfectly can be a milestone in history. Execution is the heavy part of the work, it’s the planning, organisation, managing resources, learning, refining, testing, problem solving and connecting hundreds of things together to make something great. Sometimes I’m stuck and don’t know how to approach something. For this kind of inspiration I go to the industry sites like Artstation or Exp-Points or just Youtube to watch how other artists and devs deal with production problems.
Feedback
Sometimes I share a scene with a friend or two to get their opinion. Most often is just reiterating to something is close enough to what I have in my head, or to the point I’m so frustrated with endless refining I say ‘enough’ and just make the work public. Then, the audience’s opinion is a great indicator that effort was worth it (or not).
Additional Advice
Quick tip on how to make opaque windows that transmit light: switch their shading model to subsurface, just as you would with leaves. The result can be quite convincing.
As for advice…. Someone said a long time ago “Done is better than perfect”. I leave you with that.
Future Work
There will be more scenes for sure. In the nearest future probably some urban, industrial and sci-fi. I have a lot of ‘sketches’ - scenes I started and never got back to. Maybe it’s about time to un-shelve some of them, we’ll see.
Outro
I hope you have found something useful in this article and I didn’t bore you to death. If you have any questions feel free to send me a message on Artstation. Thanks for reading!