Kassondra Krahn talked about her beautiful cel-shaded Teapot House made with 3ds Max, Substance Painter, and Marmoset Toolbag.
I’m so happy to talk to 80 Lvl again! It has been a rewarding experience working as an Environment Artists at Next Level Games in Vancouver for a few years. I’ve also been adding to my personal portfolio alongside that. To help with that I recently took a CGMA course online with Jeremy Huxley focused on nature and foliage, along with trying to learn more about Substance Painter & Designer workflows. I’d love to learn even more about these programs as they help so much to create amazing environments.
Looking at this concept I thought it would easily combine hard surface modeling with organic sculpting, and also work well with a more stylized and cartoonish style. Along with that, I thought adding a toon-shader to outline the piece would be nice with the style, which is something I have wanted to experiment with for a while. My final thought was that the concept would lend itself easily to the idea of a little diorama since it was so focused on the house itself and less on the ground plane around it. Generally, I really love CG dioramas because they feel self-contained and complete. They are also strategic for the artist since they usually look nice from almost every camera angle. It would be much more difficult to make this for an open world shot, as it can be tricky to fill up a scene naturally while maintaining a decent composition for different shots and perspectives. With a diorama, you can move the camera around the entire model and make it feel composed from all angles, and it makes the piece more interesting in my opinion.
I’ve never done cel-shading before but I’ve always loved the look of it and how graphic it can make a piece feel. Using a subtle outline really helps an environment feel finished and grounded in its space, plus I’ve never had the chance to properly use it so I was keen to try. To add the thick outline around the entire model all I had to do was duplicate the mesh, invert the normals and add a small push modifier in 3ds Max. Then in Marmoset, I added a simple black shader without any gloss/spec to give it a matte-outlined finish. This way, no matter which angle the camera turns to, there’s always a slight outline around the entire mesh moving along with the camera. At first, this was all I used in the scene, but it didn’t really feel graphic enough for the stylized look I wanted. I was trying to find a happy medium where the image could mimic a flat drawing or painting, and having an outline primarily on the exterior wasn’t really conveying this. After some trial and error, I decided to paint more simple and thin secondary outlines into the albedo maps themselves. This sort of “faked” more toon-shading where the main mesh’s outline didn’t show, and I really liked how this looked in combination with the larger outline.
The only area this thick outline became an issue was with the greenery in the scene. The foliage surrounding the house became far too busy with its more intricate geometry, and it became hard to tell visually what was going on. To adjust this I added the outlines exclusively to the albedo maps and emitted them from the inverted normal mesh completely. Finding this balance of outlines took a while to tune, and I had to mentally dial myself back a bit from adding them everywhere (and believe me I wanted to).
For all of this outline work, I really relied on the Borderlands art style as a guide. Those games feel really on point in terms of their graphics style, as it’s pretty stylized but still keeps a nice sense of realism in the texturing. I studied breakdowns of their assets to try to learn where and when to add the toon-shading, in addition to watching some super cool tutorials online on how to make pieces influenced by that style. Trying to create a graphic look on a 3D object is a lot harder than I expected, and having some reference material was really useful for this.
Basic outline applied to an untextured mesh:
Inverted mesh wit flipped normal and push modifier:
Slight outlines added to albedo texture:
For this piece, I found that modeling and lighting went by really quickly, but the base texturing is where I really had to iterate and change my initial workflow. I went back and forth on the graphic style quite a bit, and it took me a while to find the sweet spot for how to paint my materials. The modeling is stylized so when my textures looked too realistic (which is what I lean towards naturally) it didn’t really match up. I had to force myself to simplify my maps in Substance Painter and use broader, more generalized brush strokes to convey details. In the end, I found myself sort of half hand painting assets along with combining them with different generators in Substance Painter.
After a fair amount of testing between Substance Painter and Marmoset, I found my groove for texturing all the assets. To begin I would add a base color and apply to a fill layer (with color information only, no height, roughness or metallic at this point). This way I could slot in my main color palettes to match up with the concept art I was referencing. Masking out my different material IDs helped a lot with this stage, as it was really easy to isolate UV islands and apply the different fill layers to them. After that, I would add another fill layer with only roughness information so I could control a small amount of gloss detail on the mesh. This way when the camera swung around there would be some variation in gloss/spec on the geo and it wouldn’t read too flat. On top of these, I would apply the curvature map that I baked using a slightly lighter tone, which I would hand paint or erase into if it felt too heavy or procedural. Then came adding some complimentary colors into the texture, plus painting some lighting information like basic shadows or further highlights. Finally on top of everything I hand painted some thin black lines to add to my thicker mesh’s outline.
In the end, I found a pretty good representation of the style I was trying to achieve, and I learned a ton of new techniques just through trial and error and trying different things. I have a newfound appreciation for pure hand painting since finishing this project, and I now understand how time-consuming and detailed it can be.
Masking off different materials within a UV space in Substance Painter:
An early phase with just blocked in colors/ textures:
I usually start a piece by blocking in the entire model with simple forms to make sure I match the proportions from my reference. This way I don’t waste any time later trying to fix things that I’ve already taken the time to model/UV/texture/etc. After this, I throw it into Marmoset with some basic lighting to make sure it all feels alright, and adjust as need be. Once that’s done I break the model down into modular bits like wood planks, wood posts, stone bricks, roof shingles, door frames, repeatable props, etc. From there I can texture just a handful of assets and create my environment much quicker than sculpting and texturing every single piece of geo. The roof tiles are a great example of this since all I had to do was split a sliver off and texture two “rows”. When I had my final UVed low poly I simply used my original pivot point and rotated the duplicated geo in succession to fill out the rest of the roof. This was a huge time saver since sculpting the roof tiles one by one would be incredibly time-consuming. I used this technique with the wood planks for the stairs, the base rocks lining the building, as well as for the taller wooden gates.
Block in wireframe:
Sculpting sliver of roof and section of stone bricks to reuse throughout the scene:
For the foliage, I only made a few plants to fill out the entire scene. This consisted of a few clumps of grass, two ferns, and one small flower. Using a few variations of foliage you can get away with a lot of re-uses just by layering the different types of plants onto another so they flow into the scene. Foliage always makes an environment feel lusher and lived in, and can really help hide transitions between a piece of geometry (for example, a wood plank crashing straight in the ground plane can really easily be hidden by a clump of grass or fern). I think every environment artist is completely obsessed with adding foliage at the end – or maybe that’s just me!
I think what I iterated most on in the modeling phase was actually the ground pedestal. It’s funny since it sounds like the easiest part, but I went through three or four different versions of this. The house model was coming along nicely, but it always felt disconnected from the ground it was sitting on. Originally I had it on a disc, which felt very removed from how organic the piece was. Then I thought I’d try a sort of “floating island” approach, but I found this too visually busy and distracting, and it took away from the house model itself. I tried a few different shapes for this, including one very tall thin rock version, but I wasn’t really feeling good about any of them. Finally, I thought I’d try making a sort of faded out alpha that would subtly sit below the foliage that housed the teapot. This felt the most organic to me since it didn’t seem to take away from the model but instead transitioned into it and the greenery around it. It is ironic how many times I changed this ground model since it’s mostly covered by geometry anyways, but I’m glad I did since the pedestal is important to hold the piece together. Next time I think I’d try to block this in a little better at the beginning so I don’t waste as much time at the end trying to figure out something that matches stylistically.
Original disc base:
Blocking in more of a rock base:
Final wireframe shots:
Rendering & Lighting
I generally like to use Marmoset for rendering, because it is so quick and easy to throw your model in and constantly update it. I usually just use a simple 3-point lighting setup for my models with a few adjustments here and there. For my lighting, I used a detail/rim directional light behind with a blue-ish tone to highlight the silhouette, a main directional light in a warm color to emphasize the featured areas, and a secondary directional fill light opposite that to fill in the harsher dark shadows. Usually, I try to get this lighting as far along as possible at the beginning by using my blocked-in model, so that I only need to play with it a little bit as I update the geometry and textures. This tends to save me a lot of time and I don’t have to change things later apart from some color tinting and slight light angles. For rendering, I always enable Global Illumination, High-Res Shadows, and Ambient Occlusion in the Marmoset Rendering Panel, as well as add a bit of post-processing in Photoshop afterward to tweak the contrast and saturation. That’s really all there is for my rendering and lighting setup, but I am always keen to learn more about lighting in Marmoset and other game engines.
Rim/detail light only/Secondary bounce light to lighten dark shadows only
Directional light source enabled only/Render with all lights enabled:
Overall I learned a lot from this piece, probably more than any other piece I’ve made. I had a great concept to work from, and I hope I did it justice. Thanks to 80 LVL for reaching out and letting me chat about my workflow!
Kassondra Krahn, Environment Artists at Next Level Games
Interview conducted by Kirill Tokarev
If you found this article interesting, below we are listing a couple of related Unity Store Assets that may be useful for you: