- Unreal Engine 5
- Substance Designer
- Substance Painter
- Marmoset Toolbag
As this was a collaboration, Justin and I had different motivations for doing the project. However, we tried to make sure our goals were aligned from the start.
We initially wanted the project to be a 5-week project (with the potential to expand further in the future), committing 10 hours per week. The animation was an important pillar for us. We discussed cycling videos, Sketchfab/marmoset viewer, or panoramic screenshots as our main output for our portfolios
My motivations were to create something I was proud to put on my portfolio and to learn more about the animation/rigging pipeline. Justin was trying to improve his environmental skills which led me into more of a teaching role as well.
We also tried to make sure there was a good structure in place to organise and manage the project, we used project management software, Perforce and had regular weekly calls to make sure everything was on track.
References & Inspiration
At the start of the project, things were quite loose, together we came up with lots of different suggestions, taking some time to decide on the final idea. We had various themes from diorama buildings, animated factory lines and homes within objects.
I created an art bible, a document that outlines the overall vision for the project, which is something I started to do with personal projects more recently. I find this very helpful to keep the project on track, especially as making environments tends to take a while. Justin provided his input on the document with ideas and suggestions as well.
In the document, we had the idea of a main structure or building with a small interior section. We detailed our lighting, narrative, prop style, main reference, mood boards and overall art style. We also clearly outlined the art style of props and assets. We knew we wanted the assets to be mostly rounded with exaggerated bevels and soft Boolean shapes.
Games such as Wolfenstein and fallout helped to inspire us for our prop style. For reference and inspiration, we looked at Love Death and Robots, Filip Hodas and some of our favourite games.
Blockout and Modelling
For the blockout, we initially started with a very different-looking scene. Originally, we wanted to create more of a beach-style environment with sand, the ocean and distant mountains and a dramatic sky.
With blockout, I always try to work with as close to low poly forms as possible and especially focus on colour and initial lighting. This is great for getting the vision of the project across early. You can make creative decisions and choices and get a clear idea of what the final product will look like early. At this stage, it’s also easier to change things as nothing is finalised.
I also tend to use tools like Megascans at this point, because I can get a good representation for trickier assets like foliage or rocks. If they don’t fit the overall style I can replace them later.
After a few weeks we started to use a project management tool called ClickUp, this allowed us to get a good overview of the project and see how many hours it would take to finish all the elements. Before we started production, we realised that there was a lot of work left.
We went back to the Art Bible and tried to make a quick blockout for the scene which focused on scaling back the project while capturing our vision. We picked our favourite, and this was the final composition we settled on for the project. At this stage, we planned out the flow for animation with the main machines the Robot would interact with.
Materials and Shaders
For the project I reused the main master Shader I have set up for other Unreal Projects, It’s mainly an asset-based Master shader with texture inputs from Substance Painter. It features a bunch of different parameters, allowing me to easily customise assets on the fly. I built a few new additions to the shader on this project, noteworthy additions included
- Flashing and soft pulsating emissive control
- Runtime virtual texturing controls so I can blend assets into the terrain nicely
- Grunge maps
- Sub-Surface control
- PDO options
For the material side, it was standard with a few base materials such as the Sand, these were made in Substance Designer with usual workflows.
I did also make a tiling trash material which was a good combination material, first creating assets using high to low poly, texturing in Substance Painter.
These were then scattered in Blender using simulation to create a tiling material on a plane, using offsetting to ensure the asset tiles. I found it helpful to add the assets into a collection so I could make a copy using collection instances and offset them in the correct place.
Then I baked everything in Marmoset and finished off the material in Substance Designer, combining the elements with the sand to create the final look. This material served as a good base for the other trash and litter objects.
One of the main narratives of the scene was the robot using machinery to sort trash from the sea, the trash was sucked up through the big orange pipes and sorted by the machine and crushed down into cubes. The robot would then carry the trash to the backside of the scene to be shipped off the island.
I created a few beach trash assets to help sell this story, for the piles of litter this was simple, it reused the tiling material with a few assets on top to create small mounds of litter, which helped fill out the scene and patch over where assets would intersect with the terrain, I also used the moss assets in the same way.
For the litter cubes, this was an asset that was more of a struggle, I initially started out trying to create a cube using the tiling texture with displacement. I even tried to simulate assets falling into a cube shape which looked cool but didn’t give the crushed look I was after.
In the end, I simulated a small layer of assets falling. By scaling them on one axis I could make them look as if they had been crushed. I baked the scaled result to a lower poly geometry and added unique assets on top to hide the edge seams.
Crab claws, Legs and Body
All the elements of the crab started life as a simple blockout which I ported to Zbrush. I sculpted the claws using a combination of standard brushes – Clay brushes, move, trim brushes, pinch, and dam standard. The only thing I did in Zbrush that was a little different made a custom alpha texture to use as a brush for some of the raised areas.
The low poly was created using quad remesher. As the crab was so large and prominent in the scene, I knew that texture resolution might potentially be an issue.
With the Zbrush sculpt I was able to get a large macro normal map to capture a lot of the detail from the sculpt. I then made a custom shader inside of Unreal to ensure proper Texel density was followed. This included macro colour, normal and roughness.
I used an RGB mask to define areas for tiling micro-overlay. I made a custom detail texture for the surface of the crab’s skin and sand tiling material to blend as a dirt mask. Finally, to pull it all together I had large-scale tiling grunge overlaid to give a nice breakup to the colours as well.
Foliage and Moss
For the regular pieces of foliage such as the seaweed, and small plants in the scene I used the same techniques I detailed in this article I wrote here – https://www.exp-points.com/ben-keeling-environments-foliage-and-materials.
The other asset that was a little unique to this scene was the moss, I wanted to try to create some fluffy moss like the look you see in Horizon. I found a great blog by Chris Kabeya about this topic here – https://www.artstation.com/blogs/kabeya/WdNV/wip-ue4-experiments-card-based-moss-visuals
He details his approach above, I replicated the same look with the only difference being that I had sculpted some moss pieces and baked these as part of my texture atlas for the foliage.
I made lumpy meshes I merged using quad remesher and then scattered the alpha cards on the surface using particle effects in Blender. I made a tiling moss material for the scene combining noises in Substance Painter. As this was mainly a background texture, I didn’t feel it was important to spend a long time making the perfect moss material.
VFX & Animation
Animation and effects were an important part of the scene. The simplest way for small asset-based animation was to be keyframed by hand. I made several material-based effects such as flashing lights and scrolling materials such as the one used for the conveyor belt.
Some slightly more complex material effects were shaders like the water with ripples and the bulging tube with trash moving along the orange pipe.
For effects I created a stylized-looking steam effect, using mesh-based particles with an alpha material set to fade out over time. I followed a great tutorial for this in Unity here and just applied it to Niagara in Unreal
For the Robot himself, once the asset was finished, I rigged him. Using Blender’s action editor, I created different animations for the robot; floating using his thrusters, waking up, collecting the cube, and operating machines. I exported the animations to Unreal and played these in different parts of the sequencer video.
The main video sequence was created in Unreal sequencer, Here I was able to create a lot of the timings for different things to happen. I had a Master sequence that controlled the cameras and camera cuts. This allowed for any fine-tuning of the camera’s settings such as focal length and aperture.
I then had Sub-sequences that covered specific things I wanted to do on an individual asset level. For example, with the Robot animation sub-sequence, I keyframed the Robot’s position in 3d space.
I also added keys to play the different animations so they would line up with what was happening in the scene. I could also time different things like materials to change at certain places. This was how I got his facial animations to change and things like the thrusters to increase in thrust when he flew upwards.
I also had a few other assets covered here such as light assets to indicate the machine was operating. Or the conveyor belts and trash cube moving.
Keeping this all separate as a Sub-sequence made it a lot easier to work on all the asset elements and where they were in the scene without worrying about lining up or timing cameras. I could then swap back to the master sequence and adjust the camera timing and position afterwards.
Polish and Final pass
Polish is always one of the most enjoyable parts of a project for me, I get to spend time making lots of small tweaks that take the project from being great to being awesome. I also try to incorporate any feedback I receive from peers at this point as well. PolishPass.gifTo polish in this project, I did a bunch of different tasks listed below
- Smoothing out the terrain to allow it to blend better into the water
- Improved placement and set dressing of all the assets around the diorama
- Refined the base colour of foliage to sit everything together better
- Asset polish such as improving moss
- Swapped radar dish in the eye socket to smaller fan blade asset, and added a socket piece
- Uv’d all the pipes and applied vertex colour to mask the bulging effect
- Improved repetition of the trash cubes
- Added buoyancy effect to assets floating in the water
- Added emissive flashing effects
- Volumetric clouds
- Lighting polish
Lighting and Rendering
Lighting was a super simple process for this project, I mostly used the environment light mixer to bring in all the lights I needed. I wanted lighting that was a fairly simple daytime setup. Mainly relying on lumen and raytracing to give good bounce lighting and reflections.
I used William Faucher’s videos a lot for tips with setup in Unreal 5
The only other noteworthy thing I did for rendering out the screenshots was to set up sequencer tracks with my cameras in. I could set up a bunch of settings for nicer renders and video capture using Movie Render Queue, this allowed me to get better Anti-Alias and much higher resolution on my shots out of Unreal. I also found it helpful for iterating on my screenshots as I could hit a button and re-render all my screenshots in one pass.
Another great video about this by William here:
Thanks to GamesArtist for letting me share my collaboration project with the community. Feel free to reach out on Artstation if you have any questions.
I would also like to give a big shout-out to Justin. It was an amazing journey working together and I am proud of the work we created. I hope it inspires some other artists out there.
Thanks for taking the time to read the article and congratulations if you made it to the end!