Anastasia Shedu prepared an extensive breakdown of her stylized project Toro & Spirits: modeling, unwrapping, and animation in Blender, texturing and painting in 3D Coat and Photoshop, and rendering in Marmoset Toolbag.
In case you missed it
You might find these articles interesting
Hello, my name is Anastasia Shedu and I’m a 3D artist specializing in stylized art. It took me a while to discover my passion, so my 3D journey started quite recently.
As a creative child, I always knew I wanted to connect my life with art, and my strong drawing skills and love for games prompted me the path of a 2D artist. I enrolled at the University of Film and Television in Moscow, where I studied computer graphics, 2D animation, and fine arts.
After graduation, I started working as a concept artist, but soon I realized this wasn’t really my thing. My first problem was that I tried to do what I didn’t genuinely like. Under the impression that only artists who paint in the style of realism and use the photobashing technique find work, I tried to force myself to paint in the same way, but this style was never close to me. Another problem was the fear of making mistakes and being not good enough.
That all changed with the release of Spyro, a remaster of my favorite childhood game. I just fell in love with its visual style and decided to embrace my passion for stylized art. And in the summer of 2019, still impressed by the game, I decided to become a 3D artist, just so I could create similar worlds someday.
I had some experience with 3ds Max, which I was studying for concept art, so I already knew something about 3D. I was even more excited when I found many talented and successful stylized 3D artists on Twitter. I took all my passion and inspiration and started learning game art on my own, finding helpful tutorials online. However, I cannot call myself fully self-taught, as my 2D experience and education in fine arts gave a huge boost to my work, especially in the hand-painted style.
To my surprise, I also found that all the fears and doubts that haunted me as a 2D artist were gone. And some of my personality traits felt more suited to the role of a 3D artist. So my main conclusion is, no matter how simple and obvious it may seem, – do what you really love.
And now, I would like to walk you through the process of creating my latest work, “Toro & Spirits”. I hope you find it useful and thanks for reading!
Toro & Spirits: Reference and Planning
Although I can draw, I use concepts from other artists for my work. It’s better to entrust the design to professionals who have been doing this for a long time and are really good at it and focus on the 3D aspects.
When it comes to picking a concept, I try to keep in mind what I would like to learn and what techniques I would like to try while working on it. For example, in my previous work based on Haejoo's concept, I studied a hand-painting style where all lighting is drawn directly on the diffuse. Now I wanted to practice a different approach, where the diffuse represents the neutral color of the props, and the lighting is set by the actual lamps in the renderer. The advantage of the second approach is that the same assets can be placed in completely different lighting scenarios, while the first one can look really painterly with more nuanced lighting.
As a result, while browsing ArtStation, I came across an amazing concept by Ruslana Gus. It perfectly suited the topic of my research – I needed to figure out the local color of props based on the night lighting of the illustration and then I had to recreate this lighting in the renderer. Moreover, the concept had the cutest ghosts that just had to be animated, so learning the basics of 3D animation was another challenge.
After asking permission to use the concept, I mapped out a plan – modeling and unwrapping main assets, texturing, drawing and modeling plants, animation, and rendering. In this article, I will describe everything in order, but in fact, I sometimes jumped from one stage to another, either for a good reason or simply because I wanted to postpone some things and do something else sooner. It’s also very important to ask for feedback at all stages because after working on the same project for some time, it gets difficult to trust your judgment and see mistakes and areas for improvement.
Another factor that influenced my workflow was the use of Marmoset Toolbag as the renderer for this scene. This required some planning regarding the number of lights, some shaders, and the output file format.
I created a reference board in PureRef where I put photos of plants and stone shrines. I’ve also included examples of hand-painted artwork in the same technique and a couple of screenshots from League of Legends for inspiration.
For modeling, I use Blender. Version 2.8 with an updated interface came out just when I switched to 3D, and I decided to give it a try. I fell in love! From the UI to the hotkey-based workflow, working in Blender feels really artistic and fun to me.
The first thing I do is divide the workspace into 3 windows: one for modeling, one with reference, and one with a static view. This way I can always see how close my model is to the original concept. By holding down the Shift key, these windows can be detached to a second screen. It’s also a good idea to set up simple lighting and adjust the Focal Length to better read the shapes.
The rocks were made from subdivided cubes. Some of them were instanced to save texture space. If the shape was too complex, I used the Decimate modifier, thus lowering polycount.
The candles were made from cylinders with basic extruding. I decided to make the cap separately so I could add more details without worrying about how to fit it all into the geometry of the candle. I modeled the most prominent shapes, leaving small details for the texturing.
The ghosts were originally a simple cube that I subdivided and extruded. After that, there was only animation left, since I knew I didn’t need to texture them, but only set up their shader in the Marmoset Toolbag.
I modeled all the vegetation at a later stage when the main assets were ready. When it comes to plants, it’s much easier for me to draw the texture first and then create the geometry.
When modeling, I try to keep in mind the following rules that apply to low poly game assets:
- Add geometry where it affects the silhouette. When it comes to hand-painting, the texture is enough for some details.
- Delete geometry where it is irrelevant. For example, remove polygons that are not visible and minimize geometry where it does not affect the silhouette or supports the seam. Quad modeling is helpful in the modeling process, but in the final stage, we need to reduce as many vertices as possible.
- Triangulate the mesh before texturing or baking if it's gonna end up in a game engine. Do manual triangulation in places where quad might go the wrong way. When triangulating quads aim for the shortest edge possible.
- Plan ahead for assets that can be duplicated or use symmetry.
- No need to model everything in one piece. Split the asset into parts if necessary.
- Don’t leave ngons.
- Avoid too long and thin triangles.
- Check the direction of the normals.
- Apply scale.
- Make sure the origin is in the correct location.
- Check the geometry for non-manifold elements.
One thing that was really helpful to me is to study models on Sketchfab and ArtStation. It’s incredible how much you can learn simply by observing and analyzing artwork.
I could also suggest a tutorial that was really helpful to me, “Hand-Painted Weapon in Blender” made by XRG81.
It’s a pretty simple scene and Blender does an excellent job in unwrapping these kinds of assets, however, I was lucky to win RizomUV, so I used it instead for practice. To integrate it with Blender, I bought a Blender - RizomUV Bridge that sends my mesh to RizomUV and back with one click. However, if I do unwrap in Blender, add-ons like UVPackmaster 2 and TexTools always help me out.
When unwrapping, I try to keep in mind the following rules:
- Keep rotation and location of the UV islands logical, so it would be easy to work with them.
- When possible, straighten edges and keep them horizontal or vertical.
- Minimize distortion.
- Make as few UV islands as possible.
- Make padding.
- Make sure texel density is consistent and correct. RizomUV has special tools for measuring it, while in Blender I use Texel Density Checker.
The smoke unwrapping required a bit of work. I knew I wanted to animate the smoke in Marmoset Toolbag using the Offset Texture animation, so I made sure the smoke texture stretches from one edge of the texture space to the other. In addition, the UV island of the smoke is rectangular, and the geometry of the smoke itself tapers towards the end. Thus, I managed to create the illusion that the smoke is narrowing and dissolving.
When I was done with unwrapping, I exported the model in .fbx format for further texturing in 3D Coat.
For texturing, I use 3D Coat. Its UI in the texture painting workspace was designed to resemble Photoshop, so it’s quite easy to navigate. But when it comes to complex manipulations, It’s always possible to send texture to Photoshop (or a similar application) by pressing Ctrl + P.
When working with hand-painted scenes, it’s best to turn off all lights, which can be done by pressing 2 on a keyboard. As for the brushes, I’ve noticed that a simple round brush is all I need most of the time. I also use the Shift key to smooth out the texture.
To create transparency for the moss, I turned off Layer 0 and adjusted the base layer with an eraser. Then I started painting textures on another layer, which was clipped to the base one. When done, I added some color variation using a brush in a Color mode. I applied the same approach to the grass.
When painting rocks, I always checked how the texture works throughout the scene since some of them are duplicated.
For the sand, I used Photoshop’s Drop Shadow layer style combined with a spray brush to quickly get a pebble.
For the flowers, I drew a few templates and then just duplicated them all over the scene.
When it comes to hand-painted assets (and 3D in general), fundamentals are just as important as they are in 2D. Therefore, the study of light, color, shape, anatomy, and composition is essential. Always go from large shapes to medium and only then to detail, and this is true for both modeling and texturing.
If something doesn’t work, you can take a screenshot of your work and paint over it. This is a very useful technique as it allows you to work quickly through many iterations to figure out which one works best. This technique helped me realize that I needed to add flowers to the scene and that my textures were dull and needed more contrast.
When finished with the textures, I saved them in .tga format. This format, if saved in a 32-bit resolution with Alpha Channels checked, stores transparency in the alpha channel.
After I finished the basic textures and got the idea of the style and color composition of my work, I moved on to Photoshop and started painting plants in the Targa file, where I left some space beforehand.
First, I drew the silhouettes of each plant, and then, with locked transparency, I drew their details. After that, I selected the entire layer by clicking the layer icon while holding down the Ctrl key, went to the channels panel, and filled the alpha channel with white by pressing the Alt + Del combination. This way I copied the silhouette of the flowers and used it to create a transparency map.
In addition to the shape variations, I made several variations in color. Also, I created some gradients for the so-called lazy unwrapping. I used it for the stems. If you want to know more about this method, I can recommend the “Texturing with Lazy Unwrapping” tutorial made by MinionsArt:
When I was done with the textures, I started modeling the plants in Blender. First I had to cut them out. To do this, I made a separate plane with the texture of the plants and cut everything out with the Knife tool. Next, I assembled several variations of grass, clover, and bellflower. After that, all I had to do was just duplicate the needed plant and position it in the scene, using the Simple Deform modifier if I wanted it to bend.
I also made additional pieces of moss and placed them on the edges of the altar to create an illusion of fluffiness.
To connect the rocks and the ground more, I cut out the pieces of grass from the ground texture and used them for the grass that goes over the rocks.
When I finished painting and modeling the grass, I moved on to adjusting the normals. When it comes to lighting vegetation in renderers like Marmoset, properly set normals can really improve the end result. Here are the workflows I’ve found so far when it comes to rendering plants in Marmoset or Sketchfab:
- Leave as is.
- Set normals direction up.
- Borrow the direction of the normals from the object with which they should blend.
- Choose option 2 or 3 and also duplicate the geometry and flip the normals.
- Choose option 2 or 3 and also adjust the plant material so that it has translucency and transparency.
For this scene, I mostly used option 5 and a bit of 4. The disadvantage of option number five is that the further the grass is from the light source, the darker the backside. As for the fourth option, both sides look exactly the same, but it doubles the plant’s polycount and complicates the animation process.
If you would like to learn about normals and how to use them in Blender, and more, I can suggest Lukas Stratmann’s YouTube channel where I found this information.
After finishing the plants, I moved on to animation. This was my first experience with 3D animation, before that, I did 2D animation in After Effects and briefly worked as an assistant animator, where I drew in-between frames for a traditional hand-drawn cartoon.
First of all, I visited YouTube in search of animation lessons for Blender. Here are the tutorials that helped me:
Smoke and candle lights also use the wave modifier.
Animating the plants was a bit more challenging than I expected. I followed the tutorial I mentioned above, but due to the fact that I first put all the plants in their places and then animated them, the process took longer, since I had to set everything up individually.
After finishing the animation, I exported the scene in alembic format. This format allows you to convert any animation to a frame-by-frame sequence, so any program can open and play it. Don’t forget to activate Autosmooth on all objects and Face Sets when exporting.
For rendering, I used Marmoset Toolbag. The first thing I do is set up basic materials. I loaded the albedo maps, made them fully rough, and turned on transparency - Dither for moss, Add for smoke and candle glow (with the Include Diffuse checked), and Cutout for ground and vegetation.
I turned off Cull Back Faces on vegetation (except for some grass that uses doubled geometry), moss, glow and smoke so that Marmoset would render the backside. I also turned off Cast Shadows for the moss so that it blends better with objects and itself.
Next, I started adjusting the light. To begin with, I found a more suited HDRI for this scene on HDRI Haven. However, I toned it down considering it’s a night scene. Then I set up moonlight by setting up a Directional lamp. It is the only one in the scene that casts shadows. In addition to basic settings like Brightness, Distance, and Attenuation Curve, I increased the Width a little to make the shadows softer.
Candles also use Subsurface Scattering diffusion with a combination of Scatter, Translucency, and Fuzz. I also added a map to the roughness channel to make the tops of the candles shiny, like melted wax.
Candle fire and glow together use Unlit diffusion and Heat in the emissive setting.
In the render settings, I have enabled Ambient Occlusion. In the camera, I set up Sharpen, Bloom, Vignette, and Grain. And then I got to rendering screenshots and video.
When uploading the video to platforms such as ArtStation or Twitter, I noticed that my gamma was shifted and the video came out much darker than what I see in the video player on Windows. So far I have found a solution to this problem by raising the brightness and slightly adjusting the curves before rendering the video.
And finally, having rendered all the beauty shots, I exported the scene to Marmoset Viewer. And here it is important to note that Marmoset Viewer currently doesn’t support all the functions that Marmoset Render has. In particular, if the animation is not based on rigging, then it will not be played in the viewer. And since only two ghosts used rigging, I decided not to include animation at all. Another problem was that Marmoset Viewer doesn’t support custom shaders, so I was unable to reproduce the look of ghosts exactly as they were in the render. I also slightly reconfigured the material of the candles. I highly recommend checking out the list of all supported features on the Marmoset website.
And that was it! It was really fun to work on this scene and I learned so much in the process. Once again, I express my gratitude to Ruslana Gus for the amazing concept!
I wanted to say thank you to 80 Level for giving me an opportunity to share my experience and all of you who read it. I hope it was helpful and if you have any questions about it I would be happy to help!
You can reach out to me or see more of my artwork at: