3d artist Karl Åbom talked about the way he produced an incredible 3d diorama with Marmoset Toolbag 3.
3d artist Karl Åbom talked about the way he produced an incredible 3d diorama with Marmoset Toolbag 3.
My name is Karl Åbom and I am currently a student at FutureGames 3D-graphics program, a vocational higher education based in Stockholm. An interest in both computer games and art got me started in learning more about realtime 3D-graphics, which is what drove me to apply to FutureGames in 2016.
I first started working on the Project when Artstation began their Ancient Civilizations challenge in March of 2017. I had been looking to challenge myself with a large-scale project that would allow me to further my knowledge within environment art production: The Ancient Civilizations challenge was ideal in this regard. I settled on a concept drawn by Evelyn Soa – It had a lot of fun details that begged to be looked at more closely, so I decided to use Marmoset Toolbag to make the scene a diorama that people could explore as they wanted.
When first starting out I went over the concept art and tried to isolate the key elements in the scene so that I could start planning out how I was going to approach them individually. I then did a simple blockout of the whole scene in Maya using simple primitives to represent different elements and brought these into Marmoset Toolbag so I could get a sense of the scale and if individual elements would read well. At this stage I iterated positioning of the meshes to experiment with the silhouette. When I had an interesting layout for my scene, I began to model proper meshes and replace the blockouts as I went along. Generally, I start off with the big models in the scene and work my way down since the big models have the most impact on the viewer and will usually take the most time to complete.
My typical approach to environment art production mainly involves Maya and Zbrush, and finding as many references I need. PureRef is a great software for reference images, so I usually have that up on my second monitor while working. First I determine if the asset I am making should be made in Zbrush or Maya. Generally, I lean toward Maya for hard surface objects and Zbrush for anything more organic, but a lot of assets I make usually go through both at some point.
Since the scope of the scene was so huge, I tried to keep my files organized early on. Keeping your folder structure logical and making sure that file names are easy to identify all goes a long way when tackling a big project. Marmoset Toolbag has a folder system that was tremendously useful since it allowed me to move entire clusters of meshes, toggle visibility or scale and rotate everything inside the folders at the same time.
Rocks are a very nice prop for environmental work since they often can be liberally scaled and rotated as needed, making them very useful in set dressing, so the rocks and cliffs were one of the first props I completed.
The rocks and cliffs were made in Zbrush. I started off with a dynameshed cube that I liberally cut with the ClipCurve brush to create a faceted look. I then used the Crumple brush at a large brush size and dragged the cursor up and down to create chunky edges, periodically smoothing out any artefacts with the SmoothValleys brush to maintain the overall shape. When I was happy with my shapes, I exported them as my highpolys and then created basic lowpolys by zremeshing them and cleaning up the topology in Maya. Since my scene had to be less than 25 MB in size to meet the challenge requirements, I decided to save on space by having all rocks share the same UV map that I then textured using Substance Painter.
I don’t generally create characters, but since the island in the concept is populated and that extra element of life makes for an interesting addition in the viewer I decided to add people to the island. In order to save some time I generated a base mesh using MakeHuman, playing with the different settings until I got something I liked. For the clothes, I looked at references of traditional clothing worn in Pacific Asia and used this as inspiration in sewing my own clothes inside of Marvelous Designer. After completing baking and texturing, I used HumanIK in Maya to create a simple rig to pose the characters as needed.
Since I knew that the fish and seagulls wouldn’t be very close to the camera in my presentation shots, I didn’t want to spend much time on making them: I was more concerned with the getting a silhouette that would read well at a distance than I was with getting a high-detail mesh. To accomplish this, I went online and found a picture of a fish and a seagull seen from the side. I brought these into Photoshop and cleaned them up so that I had a crisp cutout that I could use as a texture. I imported the cutout into Maya and then used Create Polygon tool to carve out a silhouette and then planar mapped the UVs to create my fish. I didn’t want the mesh to be completely flat, so I added an edge across the middle of the mesh and dragged it out to create some thickness. Finally, I mirrored the entire thing and merged the two halves together. Using a bend deformer, I could quickly create some different poses for the fish.
The seagulls were created using the same technique. The only difference here was that I made the wings separately so that I could pose them in different angles.
Before getting started with my texturing, I gather reference materials to get a feel for what I am trying to create. For example, even if you think you can perfectly visualize what a Tortoise looks like without the aid of a google search, you will often find that your mind has a tendency of leaving gaps in your imagination. You know it has a brown-ish shell, right? Or maybe it was more of a yellow hue? What are the scale colors like, are they frayed toward their edges? Is the color of the shell uniform throughout or does it have some variety? Having references that answers these questions will benefit you in the long run as it keeps you from doing guesswork that might otherwise end up being detrimental to your project, or even force you to go back and re-do work.
Generally I texture pieces individually, but the Tortoise had so many different elements that I wanted to organically gel together so I decided to texture them all as one piece to make it easier to create natural transitions between different components. To accomplish this, after I completed my high-poly sculpt of the tortoise in Zbrush, I assigned each of its subtools to a different polygroup and then exported the whole shell along with its grass, land, and rocks subtools as an FBX, making sure that I toggled the “Export polygroups as Mats” option in the FBXExportImport menu.
After making a low poly, I imported it into Substance Painter and baked my maps. Here is where the different Polygroups I made in Zbrush really pay off as they create an ID mask that I can now use to mask out my different subtools in separate folders.
My usual texturing workflow often starts off with creating a basic fill layer that approximates what I want my final texture to look like, and then start building from there. For example, in the case of the grass I start with a simple green color with some mid-level roughness. I then begin introducing some variety in it by creating a fill layer with a much darker green on top of my base layer. I use a black mask on this new layer and then assign a mask editor to it, and now, using the information in my baked maps, I start to “break up” the mask to create variety in the texture itself. When I am happy with how my generated mask looks, I create a paint layer on top of it and then use my brush to add some variety to the mask by adding and erasing at key points. I think it is a good practice to do custom painting on top of your procedural masks as this introduces an additional element of variety to your texture that helps mitigate the “built-by-an-algorithm” look.
Finally, I do some tweaks with my fill layer until I get something I like. This could be literally anything, but usually I gravitate towards changing the blend mode of the layer, messing about with the opacity level, adding histogram or level nodes, going back to my mask editor to do some tweaking, or sometimes changing the fill layer parameters all together. There is a bit of back-and-forth to this process, but that’s fine: Just see to it that you look at your material references often to make sure you’re headed in the right direction. I usually don’t use the smart masks and smart materials that Substance provides as they don’t always give you what you want – Building your own masks and materials gives you a lot better control and crucially, a better understanding of how they work. Make sure to save stuff you like to your shelf for later projects: Having your own library of materials is a huge time saver.
When I have more complex materials to create I either head into Substance Designer or Bitmap2Material. While Substance Designer allows you a great deal of control, Bitmap2Material is great for just getting a quick base material, which can really help you speed up your workflow. For example, when I was texturing the trees, I used Bitmap2Material to generate my bark textures and then iterated on these inside of Substance Painter. I didn’t find any pictures that I liked for my leaf cards, so I went to a forest close to my house and photographed some branches,
then cleaned these pictures up in Photoshop and masked out the leaves for my cards. I created additional variety on these inside of Marmoset Toolbag by changing the color in the material settings to create darker and lighter variations of the same texture.
The flag was generated in Marvelous Designer by pinning it along its edges and simulating wind until I got a shape I liked. After baking it out, I created some wear in Substance painter by adding opacity to the edges to make it look a bit frayed.
The water in the concept had a really nice feel to it, so I started working on the water in my scene early on so that I could get the feel of it right from the start. The ocean itself is made up of two parts: The top surface is made up of displaced polygons from a height map that I made in B2M from a regular ocean texture, and the bottom bowl is created by extruding the outer edges of the surface downwards and merging them in the middle.
Inside of Marmoset I assigned the top surface with a material that used the Albedo and Normal map that I had generated alongside my heightmap earlier in B2M. I played around with specular and gloss to make the water get a vibrant, sparkling feel to it without drowning out the details of my albedo.
I wanted the bowl part to be more transparent to better match the concept, so I used a separate material for it. This material used the same normal map that I had for the ocean top, but I didn’t use any Albedo texture, instead opting to set the Albedo color to turquoise. After setting the transparency option to Refraction and toggling Use Microsurface, I could use my gloss value to blur objects inside of the bowl.
After wrapping up the main body of water, I started to add splashes and waves to really help sell the feeling of life in the scene.
The water splashes were made using the same techniques as the fish and birds: I simply downloaded an image of a crashing wave, masked it out and made a bent strip of polygons that I placed by hand in the scene. I also created some water droplets by blending different cloud noises in Substance Designer and adding this as an alpha map on a simple plane texture. By adjusting the amount of sampling in Marmosets capture settings I got the droplets in my final renders to stand out better.
To create the waterfall, I first made a bent polygon strip with a generic tiling water texture on it. To create some variety in the mesh I painted a custom Opacity map inside of photoshop using some noisy brushes to make it feel more organic. Setting the material to Microfiber diffusion and then cranking up the Fresnel value really helped it look more vibrant.
The splashes underneath the tortoise and the boats were generated by displacing a mesh inside of Maya with a noisy height map and then assigning them the same material as the waterfall sans the opacity map.
By scaling and rotating these different water props, I found I could create a ton of different effects to help give the impression of movement in the scene simply by adding them together. I made sure to look over every element that touched the water surface and added water props as needed to help give the impression that objects in the scene were reacting to the ocean.
Since this is an outdoor scene, the only natural source of light that would be available is the sun itself: As such, most of the light in the scene is made from a bright, warmly tinted directional light that I tilted slightly to emulate sunlight. In keeping with the vibrant look of the concept, I wanted to have warm colors and colder shadows. Therefore, I added two lights to the skybox, one of them a warm light with a reddish hue and the other a colder light with a bluish hue and made them face each other on opposite sides. In conjunction with my main directional light, I could rotate these skylights around the scene, distributing additional light or creating shade as needed for my shots. Lighting a scene is useful for both setting the mood and drawing attention to key parts of a scene, so a big challenge here was balancing the directional light with the supporting point lights. Logically, the sun should be only source of light in a scene like this, so I had to keep the light feeling uniform in spite of the fact that I was using additional point lights to draw attention to key assets. Tweaking the brightness and distance of the supporting point lights so that they wouldn’t overpower the directional light was key in achieving this.
When presenting my shots, I usually take my pictures into Photoshop to highlight areas that I want to pop more, but the Artstation challenge was clear on the shots having to be straight from the engine. Therefore, I ended up using a trick where I added a point light with a low intensity and range to areas that I wanted to draw attention to. For example, the face of the Tortoise has a point light right in front of its nostrils – It helps the face pop out more, and by changing the length and width settings on the light itself, it gives a nice specular highlight in its eyeballs.
For my final rendering, I turn on global illumination and start working on post processing. I use the post processing to give the scenes mood its final push. Keeping with the style of the vibrant concept I used a fairy high exposure, upped the contrast and gave it a bit of bloom to make my water seem more energetic. I also added some very slight grain and a vignette to help draw the viewer in.
In closing, big thanks to 80 Level for reaching out to me and letting me talk about the production of my scene! Working on this and getting to share the production process has been a great experience, and I hope that you will find it useful. Good luck!