Senior Environment Artist Ben Wilson shared the process of creating his outstanding Samorost & Machinarium fanart diorama made with Modo, SD, UE4 and more.
Senior Environment Artist Ben Wilson shared the process of creating his outstanding Samorost & Machinarium fanart diorama made with Modo, ZBrush, Substance Painter & Designer, UE4.
I really enjoy doing small focused dioramas and after playing Amanita Design‘s games, I wanted to do something to celebrate them. At the time, I did have some particular goals in mind for the next project, namely to learn Modo, so building a fan art piece based on Samorost and Machinarium seemed a good fit. It would have a nice mix of simple organic and hard surface modeling, as well as the opportunity to dive into the rigging tools. Typically, I focus on the technical side of environment art, especially at work, so I saw this as a chance to just enjoy the games and make some interesting art instead.
As with most people, I spent some time collating reference, building mood boards and blocking out to try and establish what a diorama like this would look like.
From this, I did a second pass on the block out, this time with the aim of identifying what assets I actually need. The process typically involved building a first pass of the high poly, generating a quick low poly with auto unwrapped UVs and doing a normal bake.
Here you can see the progress of this:
Initial High Poly
The organic pieces were sculpted in ZBrush and are nothing more than the move, clay and trim smooth border brushes followed by a decimate for the low poly. The hard surface assets, on the other hand, were modeled in Modo.
Although these initial high polys are not necessarily intended to be final, I did try to be efficient and clean so that I could minimize the work needed later. The characters, for example, didn’t end up changing all that much from this first pass. I didn’t even build a low poly for them at this point either and just put the high polys directly in-game instead.
After this second pass on the block out, I started going back through the assets, creating proper sculpts, textures and low poly geometry for them. I think it’s important to not be afraid of redoing work at this stage. I had already learned a lot by this point and it was time to spend the effort on getting it right.
For example, it took me a few attempts to get the flora parts right. My first pass sculpt just wasn’t looking good and I eventually realized I needed to push the sculpt more and take it in a different direction.
The same happened to the terrain. After finishing the high poly, I realized I prefer the softer and more rounded forms and ended up scrapping the initial sculpt entirely and redoing it. I had already created some terrain textures by this point and discovered using alphas from those height maps was very helpful.
I also reworked the underside by adding some twisted roots. It was something I had not originally planned to do and it only came to me after getting feedback. The main forms were started in Modo and had UVs set up, which let me use the noise maker with custom alphas to sculpt the detail quickly. I used more terrain height map alphas from above as well as a Redwood bark height map I had created for a previous project.
Finally, the smaller roots were created using a ZBrush plugin called ZTree before being decimated and cleaned up in Modo.
However, even with this amount of geometry and a baked normal map, the terrain looked too low res, so I ended up splitting it into 4 separate parts with 4 separate 2k bakes:
- Left side
- Right side
I aimed to create the textures at roughly 1024 px per meter since I wanted to have an option to take close up shots. This meant most assets wouldn’t be fit into a single texture, so almost everything is using a blending material set up of some kind. The exception to this are the characters and helicopter, which were just baked onto a single 2k and 4k respectively.
The house uses a tileable material with an additional color overlay map. The asset itself has 3 UV channels:
- UV0 is used for the normal bake and color overlay
- UV1 is for lightmaps
- UV2 is for the tileable material, with the UVs scaled to be 1024 px per meter assuming a 2k texture
In Unreal, the color overlay map is then blended on top, along with an AO, curvature and roughness map saved in another texture.
The other assets used a similar setup, but instead of a color overlay, it was a 3 material blend. Again, using 3 UV sets for bakes, lightmaps, and tileables respectively. The materials were blended with masks and authored using Substance Painter‘s material blending shader before being packed into one texture along with an AO and curvature map. Those masks then define how the materials blends. Below you can see two masks on the red and green channels being used to lerp between the different tileable base color maps, with some curvature being blended on top at the end. This set up is repeated for the rest of the channels and as with the previous material, blends a baked normal map at the end.
The terrain was almost the same as this, but instead of using painted masks exported from Painter, it used vertex colors painted directly in the editor. Using heightmaps from each material, the HeightLerp function handles the transition between the different layers.
When texturing, I like to collate my reference and take the parts I like from each image. Especially for a scene like this where the materials are a little unknown and off-worldly. I used a mix of scanned materials and hand-authored stuff with Substance Designer being the main tool of choice. The materials created in Substance Designer where those which needed to be very specific or I thought would be fun to make (this is personal work after all!). For example, the bark is very difficult to get right in Designer, so I found this one from Substance Source which was fantastic as it is.
The terrain on the other hand, is very distinctive and needed something more precisely authored.
While these terrain materials were created in Designer, I still made use of scan data where possible. With some things, you just can’t beat reality and the leaf atlas textures from Megascans are wonderful. While it is possible to create good leaf generators, they take a ton of time to get right and would just leave me with an expensive node in the graph for something that doesn’t need to be procedural at all. Instead, these scanned leaves were extracted into their own small texture sets and then scattered with the Substance tools. Best of both worlds.
I think it’s important to make this distinction and use each tool according to its strength. Megascans also offers fantastic grass assets which are almost plug-and-play. I didn’t make any alterations to the grass assets in fact and was able to populate the scene within minutes.
A conscious effort was made to tie all the materials together in the hope they all feel like they are from the same world. For example, this coral material is blended across all the floral elements:
And if you look really closely, you will even see that the house material has little shells in it, which is the same one you see outside.
The characters were textured in Substance Painter instead and also made use of Substance Source. I found these 3 particular metals I liked and ended up using all 3 as a base.
From this base, some color variation was added along with a layer of rust and grease. This was saved as a smart material and applied to both Machinarium characters and the helicopter. Each asset also had some hand painted details and normal detail applied.
I wanted a warmer tone for Berta but didn’t want to change metal type so instead, added a simple HSL to shift the color hues into that warmer red.
To pose Josef and Berta in the scene. I set up some simple rigs. They are not very advanced but it was important for them to be flexible to make the posing easier. For this reason, I didn’t use a joint based IK system and instead used spline effectors.
On the other hand, the main Samorost character was blocked out in his posed position, then brought into ZBrush to just smooth out the silhouette. Since the Gnome uses an unlit shader and only solid colors, I just used ZBrush’s Zmapper to generate a clean low poly and did a very quick UV unwrap. His textures therefore are very simple:
My girlfriend Giorgia helped out with the anteaters, authoring the mesh and rigging them up for me, so all I needed to do was to texture and pose them into place. For their textures, I used the gradient filter which meant I only needed to paint a black and white mask to produce all their color information.
Lighting and Composition
I don’t think I could understate how important getting feedback is. I kept a running notepad for all the feedback I received, which helped me identify common issues and to make sure nothing was forgotten.
The lighting was definitely the biggest challenge for me as I would say it’s my weakest area. I went through quite a few iterations as I worked on the scene and lost count of the times I deleted the lights and redid them entirely!
I was very keen on having the mushrooms play a strong part in the lighting but I consistently received feedback that it was taking too much attention away from the main story. Eventually, I toned the mushrooms down to be much more subtle and less distracting. Although upset at that time, I am very glad I listened to everyone!
Another great bit of advice I was given on lighting this scene, was to impose an artificial restriction on myself. I was to limit myself to only 4 main key lights which proved to be very helpful. It forced me to really think about the priority of the scene and what I wanted to show. This was definitely the interaction between the host of characters.
In the end, I settled on having:
- A strong warm light coming out of the house to draw focus and set the mood for the scene. The character was all cozy and happy at home before being rudely interrupted.
- A strong key light to illuminate the area around the Gnome. The light inside the house was also reduced to make this place the highest contrast in the scene. This light also has warmer tones to help the story and divide the image a little.
- The helicopter brightly lit, also with a high contrast light to draw attention. I actually cheated a little bit here and used a number of dynamic lights but conceptually in my mind, this functions as one light, i.e. illuminate the helicopter.
- A colder rim light on the far right to pull out shapes and help divide the image.
After that, I used a sky light to help lift the whole scene and make sure everything was readable, bright and close to the actual game. Then a few dynamic lights to add some rim lighting on various assets.
As it was a 3D scene, I spent a lot of time on the particular placement of things. The floral parts the back are positioned to hopefully provide a strong overal shape but keep a main line of motion.
The spacing is also important, which allows for objects to silhouette against the background and provide some nice parallax when orbiting the scene.
I also tried to build in secondary lines to drive the viewer back into the focal point:
And as a final note, I wanted the Ant eaters to be a small and subtle read that you will only notice after some time in the image. For this, I turned down their emissive intensity but positioned them in between the background coral to read the silhouettes and hopefully not lose them entirely.
If you enjoyed this breakdown, make sure to check another Ben’s interview Discovering the Curve Node in Substance Designer.