Emilia Krutilina showed us the workflow behind the Cinnamon Rolls procedural material, discussing setting up the nodes in Substance 3D Designer and rendering in Marmoset Toolbag.
Introduction
Hi everyone! My name is Emilia Krutilina, and I’m a 3D Environment and Material Artist. It’s been about three years since I started learning 3D, and during that time I’ve focused mainly on realistic environments, with a particular love for working with natural surfaces and architectural elements.
About two months ago, I decided to dive deeper into Substance 3D Designer, although I had already used it before for my personal projects. This time, I wanted to push my skills further, so I started creating some unusual materials. The first one was my previous project, Chocolate Candies. Then, I decided to continue and create another sweet material, so I chose to make cinnamon rolls this time.
Shaping the Surface
As always, I start by creating the Height Map. To get the base shape of the roll, I used a paraboloid shape and then applied a Swirl node to create the twisted form. Next, I added some irregularities to make the roll look more realistic. To make the other rolls different, I duplicated this node graph four more times and adjusted some parameters. As a result, I ended up with five different base shapes.
The next step was to combine all of these into a tileable texture, which I did using the Tile Sampler.
Then I started adding details and imperfections. Most often, I use Slope Blur Grayscale and Multi-Directional Warp nodes, as well as add some noise through a Blend node.
After that, I began creating the filling. For this pattern, I used Clouds 2 and Gaussian Spots 2, applying Multi-Directional Warp to them.
To get the filling mask, I applied Histogram Scan combined with Blur HQ to the Height Map. Afterwards, I was able to create a mask of the inner part of the rolls where the filling should be placed, so I could use it in a Blend node with the Add (Linear Dodge) mode.
The most challenging part of this project for me was creating the cream. I tried several approaches and finally settled on this one. For the base, I used the Fur 2 node, then applied Non-Uniform Blur Grayscale, Directional Blur, and Histogram Scan to create the cream’s directional lines. Next, I applied Multi-Directional Warp using a Clouds 2 texture to add more variation. After that, I applied blur and duplicated the texture twice, rotating one of them by 45 degrees. Finally, I used Height Blend with these two textures.
After getting the new texture with varied directions, I use Histogram Range to adjust the height, and then apply a Blend with Clouds 3 set to Overlay to add more detail. After some adjustments, I apply a Swirl to this texture. Since the result isn’t tileable, I use the Make it Tile Photo Grayscale node to fix that. Once I’m happy with the tiling, I apply another Blend with Clouds 3, this time using the Subtract mode.
When it came to blending the cream with the rolls, I first tried a regular Height Blend, but I wasn’t satisfied with the result, because the cream looked too evenly spread. So, I decided to create a custom mask to use in the Height Blend. Here’s how I did it:
1) I used a Height Blend between the rolls and the cream, placing the cream high enough to cover the space between the buns.
2) I took the mask from that Height Blend and applied a Blur to it.
3) I used Histogram Select and Histogram Scan on the height texture of the rolls to get a silhouette, then refined it with Histogram Range.
4) I blended the blurred Height Blend mask with the silhouette mask using Add Linear Dodge.
5) Finally, I blended the resulting texture with one of the initial cream variations using Add Linear Dodge again.
The resulting mask can now be used in the final Height Blend between the cream and the rolls.
My next step was to create the nuts that would be placed on top. I started by using the Spline (Poly Quadratic) node to create the shape. Then, with the Spline Fill, I generated a mask. I added a Bevel to soften the edges, followed by a Slope Blur with Perlin Noise. I used a Curve node to create height gradients so the nut wouldn't look flat. Finally, I added a Non-Uniform Blur and used a Blend with Clouds 2 for additional detail.
To add some variation, I duplicated these nodes twice, so in the end I had three different nut variations. I slightly adjusted some of the values to make them look different from each other. After that, I used a Tile Sampler and tweaked the parameters to make the nuts appear scattered in a more natural, uneven way.
When it came to placing the nuts on top, I ran into issues with blending the nuts and the cream. At first, I used an Add (Linear Dodge) blend mode. But the nuts didn’t look naturally placed at the intersections between the rolls and the cream. The seams were clearly visible, which made the result look unrealistic.
After spending a lot of time trying to figure this out, I eventually found a solution. I created a separate Normal Map for the nuts and another one for the buns with cream, then used a Normal Blend to combine them. This blended Normal Map became my final normal. To get the Height Map, I applied a Normal to Height node to the result and used that as the final height.
Base Color & Roughness
For the base color, I usually employ the same techniques across all my projects. I convert height maps into gradient maps, blend them together, and use previously created masks to control the blending. I also add extra grunge and noise maps, such as Clouds 2, BnW Spots, and Moisture Noise, to achieve color variation.
For roughness, I typically use existing height maps, adjusting them using Histogram Range to achieve the desired tone. Additionally, I take grayscales from the base color and blend them using the masks I created earlier.
Rendering
For rendering, I used Marmoset Toolbag because it’s a quick and easy way to showcase materials. I like to present materials not only on a plane or cylinder but also in a small scene, because it helps show their realism and makes them feel like part of something complete. So, I created a scene and modeled additional props such as a baking dish, plate, fabric napkin, and spatula. I also added elements like a table and a wall.
My standard lighting setup includes a Sky light for natural lighting and two or three additional lights. I intentionally make one of the spotlights cooler to create an interesting temperature contrast in the scene.
Overall, this project took me about five days from start to finish. During that time, I created the base material, refined the texture details, and set up the final render using my standard lighting setup.
Conclusion
For those who are starting to learn Substance 3D Designer, I’d recommend watching as many tutorials as you can. It’s best to start with tutorials that explain basic nodes, then move on to more advanced content covering the creation of complex materials. This will help you get familiar with useful nodes and understand how to achieve different effects. When I was studying, I found YouTube videos, as well as tutorials on FlippedNormals and ArtStation Learning, incredibly helpful. The most valuable resources for me were the tutorials by Javier Perez and Daniel Thiger, which I found especially helpful and inspiring.
But remember: don’t just watch. The real progress comes when you apply these lessons in practice and keep experimenting in the Designer regularly.
Thank you for reading my article. I hope you like it and found something useful. Thanks to 80 Level for giving me the opportunity to share my project. If you’d like to see more of my work, you can check out my ArtStation and other socials. And feel free to reach out if you have any questions or just want to connect.