Rookie Awards 2024 - Open for Entries!
The Potion Shop - Game Environment
Share  

The Potion Shop - Game Environment

by fluxmotion on 5 May 2024 for Rookie Awards 2024

Welcome to "The Potion Shop", an environment optimized for real-time. I will break down how I created every single aspect of the environment from scratch and walk you through my process from start to finish.

35 1003 12
Round of applause for our sponsors

Hi everyone,

My name is Felix and I am an aspiring 3D Environment Artist from Germany. I am currently finishing my education at Pixl Visn Media Arts Academy and "The Potion Shop" is my first portfolio project. As I created everything from scratch, it took about 3 months and was a collaboration with my colleague and good friend Ilias Morscher, who created the character.

Setting Goals

Before I had a concept in mind, I always try to set some goals, think about the skills I want to showcase and finally, set a deadline.

Finding a Good Concept

The next step was looking for a concept that fits my goals and is achievable in the timeframe I gave myself. 

After a few hours of scrolling through ArtStation and Pinterest, searching for the one concept art to rule them all, I stumbled upon the work of Rhys Griffiths and immediately fell in love with his project called "Potion Shop". 

The inviting ambiance, the earthy colors, and the familiar, yet fresh look, hooked me and I decided I wanted to make my own version out of it!

I asked Rhys for permission to use it and was ready to get going. As the Concept includes characters, I showed it to Ilias Morscher, an aspiring character artist and friend of mine, whether he wants to join me on this journey. He loved the piece as well so I continued with my preparations.

Theme Exploration

Now it was time to research and brainstorm about how I would translate the beautiful concept into a 3D environment optimised for games. 

A mindmap, some keywords, and some pictures from Pinterest help me get a feeling for the amount and type of assets I want to create.

I begin by asking myself questions like when, where, and what. That way I have a better understanding of what kind of references I have to gather. I used Miro to visualise all of my thoughts and to share them easily with my mentor.

Where would the Potion Shop be located on planet Earth? I was struggling a bit to find a real location that fits the concept, as it has European and Eastern elements. After some research I found Georgia! Not the one in the USA... the one in Eastern Europe.

As the country was influenced by classical Greece, the Roman Empire, the Byzantine Empire, and various Iranian Empires, it has a unique mix of cultures. Also, I loved the idea of incorporating foreign scripts for the labels and manuscripts.

These incredible photographs from Pablo Ferrari further inspired me and even showed similar columns to the ones in my concept.

List of Assets

It was time to analyse the concept further and plan what kind of assets I had to create for this project. I started by color-coding the assets that were repeatedly used to identify which ones needed to be modelled individually or built in larger groups.

The next step was to make sure I had enough references to portray the assets accurately so I'd be able to fully concentrate on the creation part without going back into research. 

List of Materials

I also analysed which kinds of materials I needed to create.

I made a list of base materials like wood, different metals, leather, paper, and fabric and gathered some reference for each material to be able to portray them accurately. By creating all the base materials in the scene from scratch in Substance Designer, I'll be able to reuse them for assets sharing the same one. This saves time, ensures consistency, and gives me great flexibility!

The procedural approach of Designer will enable me to tweak stuff in seconds, even later on in Painter/Unreal, after publishing the graph and exposing the desired parameters. Thats why I decided to create all of them from scratch.

Blockout

Blocking out the environment in Maya to ensure everything is at a real-world scale and then bringing it into Unreal helped me with the camera angle, composition, placement of assets and proportions.

For the camera, I emulated a real one, the ARRI Alexa 35 with an anamorphic Panavision C series lens, which is used for feature films. By default, the cameras in Unreal don't have any lens distortion so every line in the image is perfectly straight. By using real-world lenses the image is being distorted and the straight lines get bent slightly, which gives a more natural look.

Wooden Floor

I like to work my way from big to small and from high priority to low priority. This way I make sure to not lose myself in the tiny details and I always try to have the bigger picture in mind. 

Thats why the first material I tackled was the wooden floor, as it covers a large portion of the image.

I created two versions of the floor: an aged one and a really dirty one, to later be able to vertex paint for more variation and breakup.

I began by creating a wood grain generator. I made several versions and tried different techniques until I was satisfied with the result. For the Desigher graph, I tried to stay as organised as possible. I also use the same color coding as in Painter to be able to navigate and work fast.

While researching for the best way to create wood inside of Designer I found, Derk Elshofs course about aged wood and he described a technique for creating height maps that includes a height to normal and then a normal to height conversion, which gives you, with a little help of a highpass filter, a result that looks more like a height map.

Base Materials

These might look a little plain and simple but they just serve as base materials. Later on in Painter, I built smart materials by utilizing the parameters that I exposed in Designer. This ensures a time-efficient and very flexible texturing workflow later on.

Texel Density

Before I jumped into one of my favorite parts of my future profession, modeling and texturing, I needed to settle for a texel density. This is crucial to ensure consistent texture resolution across the whole scene. However, I learned that it is not as set in stone as I thought. When it comes to really tiny assets, baking can get difficult and therefore it is ok to up the pixels for those. I decided on an unusual texel density of 20.48 px/cm. This enables me to present my props in the best way possible, while still being able to use texture maps with half the resolution. This leaves me with a texel density of 10.24 for the environment, which is quite common for first-person games. 

Table

One of the assets I tackled first is the table. My goal here was to establish a workflow and set the quality bar for the rest of my props. 

I created the high poly in Maya and then went over all the edges in Zbrush to give them a less perfect look. I kept the sculpt really simple as my wood base material and texturing will take care of all the surface details. 
I reduced the polycount from 33k to 2k and started unwrapping the low poly model.

To fit a medium-sized asset like the table on one UV, I used mirroring for parts that wouldn't be visible at the same time. Additionally I reduced the bottom side of the tabletop, as it won't be visible in my game. 

Next up I went over to marmoset to bake mesh maps. 
I used baking groups to get a clean bake without any artifacts or bleeding and moved on to Substance Painter, where the real fun began.

In Painter, I started by tweaking my base material to the desired look with all the exposed parameters of the sbsar. Next, I start layering details like color variation, damages, crevices, roughness breakup and dust. 

Lastly, I exported the maps and imported the low poly, and the textures into Unreal to see if it looked good in engine. If it was necessary, I went back to Painter to fix stuff but often times I could tweak the assets with the LookDev tools I built into my master material.
Of course, I used packed maps with the AO, Roughness and Metalness in the R, G and B channels of the texture to reduce draw calls.

Column

Master Material

To speed up my workflow I created a master material with some simple Albedo and UV control parameters.
That way I just needed to make material instances for each prop and plug in the textures. It also enabled me to create variations quite fast by altering the parameters in the instance.

World Position Noise

Additionally, I set up a 3D noise to create darkened spots, especially on larger surfaces like the beams.
In combination with offsetting the U and V values of the beam trim sheet, it was easy to make them look different. 

I exaggerated the effect for better visibility:

Glas Shader

One of the biggest challenges of the whole project was the glass shader. 
While clean glass looks good quite fast inside of unreal, I struggled to nail the mix between opaque and translucent parts. I did a lot of experiments with both legacy and substrate materials to create the look of the dusty glass jars I had in mind.

Vertex Painting

To break up the big surfaces like the walls and floor I used vertex painting. For the walls I additionally set up nanite displacement to break up the silhouette of the wall a little bit.

Blueptrints

I used Blueprints to set up actors with assembled asset groups like piles of paper, scrolls, or books. This makes setdressing easier, as I just need to select one actor and not all the individual objects the pile is made of. 
I can also edit the Blueprint to make changes to all the actors in the scene at once. 

Learnings

1. Preperation is everything
As my education was more focused on VFX-related workflows this project was my first venture into game environments. There were a lot of first times and basics to understand but preparation and planning gave me structure and hope, that I'll be able to finish this project succesfully.

2. Less is more
I created way too many variations of some assets because I was not familiar with the tools in the engine.
You can do so much with RGB masks and a little shader magic inside of Unreal. For my next project, I want to embrace that and work smarter.

3. Feedback and Iterations
I had the luck of being accompanied by talented mentors and colleagues, who were always there to help me, roast me, and push my limits. Their feedback was crucial to achieving a high-quality outcome.
Although at some point I had so much feedback that I was not able to apply it directly, cause I had to move forward. That's why I did a first pass of everything and then decided which areas were more important than others. This enabled me to work my way down from high to low-priority.

4. Collaboration
As Ilias created the character for this project, it was a brilliant exercise in collaboration. 
I learned hands-on how important good communication and regular feedback is. There were some hurdles and challenges along the way but our daily sessions helped with that and ensured we stay on track and work together.

Conclusion

Participating in the Rookie Awards had been my goal for years but I never felt quite ready. Thanks to the amazing education at Pixl Visn Media Arts Academy I learned so much in the last month and I can't wait to enter the industry

Lastly, I owe a big THANK YOU to all my awesome mentors:

Émilie Beauchamp
Patrick Ziegler
Renato Gregorio Scicchitano
Tom Herzig
Fabrizio Meli


Comments (12)