How to Create A Stylized 3D Environment

Share on facebook
Share on twitter
Share on linkedin
Share on pinterest
Share on reddit

Yo! My name is Jamie Read and I am currently a 3D environment artist at Jagex, working on RuneScape.
After two years working as a tattoo apprentice, I decided to change career path and started learning 3D game art via an online course, whilst working part-time at the local supermarket (making that money with pro-shelf-stacking skills).

I spent a couple of years learning and practicing 3D art, before I landed my first industry job at a small mobile games studio called Neon Play.

I worked in Unity on a variety of unreleased and soft-launched titles during my time there, gaining experience in a variety of art styles and game genres.
In 2018 I made the move to Jagex and into an environment-specific role, where I have been making some cool stylized maps and props since!

Goals for Sunset Glade:

After playing a ton of Spyro: Reignited Trilogy (and getting three platinum trophies), I was really impressed by all the fantastic work poured into each and every level.

This got me super-motivated to start a new project, in which I would take inspiration from different elements of those games and come up with my own original environment design.
I had spent a while creating smaller props and dioramas in my spare time and working in Unity and custom games engines at my jobs. So the main goal of this project was to create a larger environment in Unreal, to add to my portfolio.
When working on personal projects I find myself sketching my own original designs a lot and typically like to make everything from scratch myself. Doing all of this was a great opportunity to learn the engine, tools and slightly more complex material creation.


Before diving into your modelling software or game engine, it’s important to invest some time putting together a mood board, asset list and a collection of reference images!
I like to gather imagery from a variety of places; Artstation, Pinterest, in-game screenshots and plain old Google search are my go-to methods. Using reference from a mixture of medium really helps in not limiting yourself to a particular way of thinking or art style as well.

I use PureRef to create my art boards, grouping images into categories such as lighting, colour palette, architecture, foliage etc.
By the end of this pre-production phase I was armed with my original concept sketch, a full list of assets I wanted to make, a bunch of great reference images and a rough colour palette to use as a base.

Now I was ready to start the blockout!


When creating environment blockouts I like to keep things as simple as possible. At this stage it’s all about laying down the broad strokes, creating a simple terrain and mapping larger forms using basic primitives. This way it’s quick and easy to assemble and iterate on the scale and composition of the space. I just used standard Unreal basic shapes to represent the portal, wall, large rocks and trees and landscape tools for sculpting a simple terrain.

I used the compositional rule of thirds as a guide to position my main shot, with the portal as the focal point on the right vertical grid line.

Rather than just creating a small corner with one singular shot, I wanted to created an entire closed area which could be viewed from various angles. As this wasn’t in my original sketch, I spent some time blocking in a little pathway area which the player would walk down, when first entering the space. This would also make for some nice videos and still shots when presenting the project up at the end!

Sometimes when working from a rough sketch or an idea in your head, you might find you play around with more compositions, but this gave me a solid enough base to start from and would remain largely unchanged for the rest of the project.


My general workflow for Sunset Glade looked like this: Maya for modelling, Zbrush for sculpts, Substance Painter and Photoshop for texture creation and compositing, Unreal for initial blockout, level assembly, material creation and vfx.
Once the initial blockout was completed in Unreal, I exported pieces out and imported them into Maya to use as scale reference to create my sculpt bases from.

Personally I’m much more comfortable with creating a proxy/base mesh in Maya and importing that into Zbrush for sculpting (unless it’s something very organic). I exported these models into Unreal as I went, swapping out primitive shapes and checking the scale and readability before heading into Zbrush.


I opted to keep my sculpting style fairly simple for this project, avoiding any harsh detail or unnecessary noise. Just enough to describe the material and any slight damage.
Just like how some concept artists only like to use a few brushes, I like to minimize the amount of tools and brushes I use to sculpt with.

Edge damage is made with TrimDynamic (sometimes a little TrimSmoothBorder too), creating some nice bevels and slight chips and pits. Volume was added using ClayTubes, mainly for the deer head sculpture. Orb_Rock_Detail was used as a base for the rock surfaces, but I would go in and edit it a lot rather than just stamping it everywhere. Orb_Cracks and Orb_Slash01 were used to add any cracks and crevices on the stone and tree trunk elements.

A little dynamesh and polishing was used when I needed to tidy and smooth geometry.
That’s about it, not much to it!
I knew once I began adding more elements to the scene, layering in detail and adding set-dressing, it would be enough for the style I was aiming for.

Rather than manually doing retopo on assets, I used the Decimation Master plugin to reduce the polycounts down to a reasonable level. The decimated models were then exported and brought back into Maya for some quick manual clean-up and creating the UVs.


Similar to the sculpting techniques and style, I wanted to keep the textures simple!
This is something I’m finding myself doing more and more in both personal and professional projects, focusing on the ‘bigger picture’ over very complex, detailed assets.
To texture the tree trunks and various stone assets I used a great Substance Painter plug-in called SoMuchMaterials. It comes with a bunch of built-in presets, which can be used as a base template for most stylized materials you want to create. Simply drop the material into your layer stack, select the preset you want and use the range of sliders to generate all the attributes you want.

Once I had achieved the base look I wanted, I simply added an additional coloured fill layer and used a custom brush stoke alpha to mask it. This gave the surface some painterly brush detail, which was enough to break up the flat colours and gradients, without being too noisy.

For the tree foliage I planned which components I would need to create a single ‘module’, that would be used to assemble the canopies. Using just three simple leaf alphas, I arranged them into the required clusters and along simple branch shapes in Photoshop. This base greyscale alpha was modified to create a height texture, which was then used to generate normal and occlusion maps.
I wanted to be able to tint the foliage in Unreal (more on that later), so I packed various greyscale masks into the RGB channels to separate things like the leaves and branches from each other.

I used a similar technique to create the bush, flowers, ivy and grass textures. You can even see the same simple leaf alpha shapes used in a lot of them – a small detail, but a nice way to keep some shape shape language similarities around the environment.


Now that I had the tree trunk model and all the various alpha foliage components I would need, I could start putting together the tree canopy.
Once I had chopped out the individual parts from the texture into separate models, I duplicated them around and combined them up into a few simple models – one for creating the main body of the canopy and a couple of smaller branches.

The models could then be duplicated and places around the tree trunk model, to form the final tree canopy model. One was created for the regular trees (based on Ash) and the other for the portal tree (based on Red Maple).

I added a gradient of vertex colour to control which parts of the mesh would be affected by wind and a secondary tint colour in Unreal. The strong the vertex colour, the more stronger the secondary colour and wind influence would be. This was setup on all the foliage components in the environment and really helped to add some subtle color variation and movement, bringing life to the space.

This process is quite time-consuming, so I’ll make sure to check out SpeedTree properly one day.
Too many programs, too little time!


The master material used for the various stone assets and tree trunks has a few different
functionalities inside it.
I wanted to add moss to the tops of the rocks and portal, so setup a world-aligned texture using a simple tiling mask texture I made in Photoshop, which would affect areas facing up on the Z axis.

This was used as the alpha for the world-aligned blend and had parameters for controlling the sharpness and bias of the green moss.
A simple detail normal was sculpted and used to overlay some additional surface texture to the rocks. Parameters for controlling the scale and intensity of the normal map were also added, followed up by a Static Switch to toggle it on or off.

Vertex painting functionality was added, allowing me to paint in some subtle green and reds. This helped to embed ivy into the walls, rocks and pillars better. The blue channel was reserved for masking out the moss.
One final feature I added (and this could have been split out into a separate material potentially)

was a bobbing motion for the floating gems on top of the pillars. A Time node plugged into a Sine wave was multiplied with a Constant3Vector set to 0,0,5, which creates a slow up-and-down motion on the Z axis. Again this was plugged into a Static Switch, only being enabled for the floating gem material instances.

I knew from the beginning that I wanted all of the foliage colours to be tinted within a material in Unreal, so I could create variations easily and with less overhead (optimisation is important, kids).
I used a few Constant3Vector nodes (converted to parameters) so each material instance could have their own colours. These were masked using a Vertex Colour node and various channels of the foliage texture and lerped together to form the base colour and subsurface colour and opacity.
The foliage swaying was setup using a basic SimpleGrassWind node, with constant parameters used to control the strength in material instances. This was multiplied with a Vertex Colour node to dictate which parts of the meshes were affected and then plugged into the World Position Offset.

The material used for the portal, gem fx and clouds was super simple. I created a swirl texture using the leaf alphas from the foliage and added movement by turning it with a rotator node.

 A small perlin noise texture was used to pan across the mesh and offset verts, by being plugged into the World Position Offset.


There is nothing fancy happening with the lighting in Sunset Glade, but it did go through some evolution during the time I was working on it, mainly down to the post-process material I added (more on that later).
I was initially using a static lighting setup, baking in all the information at regular intervals, but it quickly became apparent it was very time-consuming with my current laptop (she needs putting out of her misery soon and replacing with a shiny desktop).
A main orange directional light was used for the sun, angled in a way that illuminated the pathway leading to the portal. This light casts the majority of the shadows in the environment.

To balance the lack of bounce light, I used a secondary directional light with a slight yellowy-green hue pointing in the opposite direction for the sun, to help knock-back some of the darker areas. A very subtle skylight (using an image downloaded from HDRI Haven) was also used to help add a little more ambient lighting to the shaded areas.

A big teal coloured spotlight was used for the light emanating from the portal, supported by point lights near all the crystals to create some additional glow. These complimented the surrounding warmer tones and created some nice contrast in values at the same time.


Part-way into the project I was taking a look back at the E3 trailer for the upcoming Rare game, Everwild (excited to see more in the future!). Feeling inspired by the beautiful visuals and art style,
I went searching for something which could help me bring a little of that cel-shaded flare to Sunset Glade.

I came across the Simi CelShade post-process material during a Google search one day and used the thread to set up the material in my project, to see what result it would give me. Setting the strength of the post-process array layer to 0.8 created a nice blend of the original style and this new cel-shaded look. You can see how much difference it makes to the lighting when set to 0.

This material comes with a few big limitations however. It doesn’t work well with (or completely disables) metallic/roughness/specular setup, near distance exponential fog and volumetric rays! 

This drastically changed the art style, but also the approach I had to take to balance these limitations.

Right at the end of the project, I took an image of the main shot into Photoshop and added some
subtle adjustment layers (mostly some hue/saturation, brightness/contrast and levels) to create a
custom LUT image.

Making it Unique

Sketching and designing your own environments and props from scratch always brings an element of uniqueness to a piece of art. No one else would have worked from this concept before, after all!

Aside from the concept though, the decision to setup the Simi CelShade post-process material part way through the project really helped to bring a unique twist to the art style. Dialling it back slightly achieved my goal of landing on a style somewhere between Spyro: Reignited Trilogy and Everwild – Something you might not see too often.


I’ve dabbled a little bit with UDK/Unreal over the years, but had mainly used Unity and custom inhouse engines in a professional setting, so there was a bit of a learning curve getting used to the engine itself again.

One of the downsides of using the Simi CelShade post-process material were the limitations it presents. It took a bit of time and experimentation to implement alternatives which made up for those lacking features.
The main challenge during the making of Sunset Glade was 2020 itself (and I’m sure I’m not the only one who was affected). I went through patches of low productivity due to being a little mentally drained at times, plus a few very busy months at work which took the steam out of me.

I typically aim to put 6-8 hours a week into personal projects. That’s a nice balance for me and fits around my life and commitments, but there were periods when it would be almost zero because of these things.
I did manage to get into a consistent flow again towards the end of 2020 and into the new year, which helped pushed through that wall and finish the project off!

Gathering Feedback

Throughout the production of Sunset Glade I was regularly posting WIPs to Twitter and started utilizing Discord channels more towards the end of the project, such as Experience Points and Stylized Station (no money exchanged hands to say this).

I only got a couple of small bits of feedback along the way, which perhaps meant I was on the right track, but I was left with more of a feeling that getting feedback on Twitter or Artstation blog posts just doesn’t cut it.
For my next project I’m going to use Discord channels and create a Polycount thread from the getgo (something I’ve not used for a couple of years now).

Wrapping up

Thanks to Stylized Station for inviting me to write this breakdown and to you, for taking some time to read through the first article I’ve written!

I hope it was a good insight into the making of Sunset Glade, my approach and general workflow.

Perhaps you even picked up a few nuggets of useful information.
You can check out the rest of my work on Artstation or follow me on Twitter. I’m generally pretty good at replying to people and answering any questions too!

Want to learn from the pros?

Come join our community!