How to Design a Vibrant Ladybug Material Using Substance 3D
Romain Lemaire spoke about the creation process behind the LadyBug material, explaining how he started the project, how he created the shape of the insect, and discussing how he used Substance 3D SDF to make the material.
Introduction
Hi! My name is Romain Lemaire. I'm a Senior Material Artist in the gaming industry. I'm still a Freelancer, as I was before. Still, I also had the opportunity to work for 3 years at Arrowhead Game Studios on Helldivers 2, as well as spending some time on Predecessor at Omeda Studios. So, let's say I'm a bit more experienced than last time.
LadyBug Project
Basically, the ladybug material was on my to-do list since the inception of the color project I started in 2021, which focused on a set of materials for each color I selected. Since then, the project has been on hiatus for a long time and has evolved, mostly through changes to some materials and the overall scope.
The objective of that project was mostly to focus on working with color in Substance 3D, which was something I was struggling with before. My experience with Helldivers 2 helped me quite a bit on that side. But I still want to finish the project, or at least complete the green and red sides!
And the new Substance 3D Designer version, especially the new Signed Distance Field pipeline, seems like a great opportunity to finally start working on those ladybugs!
So the principal objective of this material was to experiment more with the SDF pipeline. Of course, the first step was to create a decent SDF model of a ladybug.
Substance 3D Workflow
When I started to get something that vaguely looked like an insect, I moved on to the first step of every material I worked on: what I call a proof of concept, a finished graph with extremely basic shapes, color, placement, etc.
The point is to see if my idea will work and also to experiment with every kind of detail I'm looking for, the base shape itself, but also the placement, composition, and overall look of the material. Since this material was a portfolio piece, I worked in Marmoset Toolbag, but even in a production environment, I do the same thing with an in-engine contextual scene.
That step normally takes me between 1 and 4 hours, depending on the type of material. It's an important step because it gives me a decent visual representation of the final material, which allows me to first make sure that I'll get a result close to what I envision, but also lets me focus only on the details that matter, avoiding spending hours polishing something that will barely be visible in the final result.
Once this is done, I can focus back on the material itself, trying to improve it globally and polish every part further. The point is not to focus on one step exclusively, but to gradually improve the quality across the entire material.
Each time I reach a visual "milestone," I polish a bit of everything else, trying to avoid over-polishing one part to the detriment of the rest. It helps me stay focused and, since it is a portfolio piece, gives me the best result for the time invested.
As for the material itself, it can be split into multiple parts, like the SDF, the shape scattering, the color, or the droplet. First, let's look at the final SDF graph for the ladybug:
A bit intimidating, but honestly, it is easier than it looks. A lot of the nodes are simply duplicates of other sections, mostly because of a limitation of the SDF system; you can't create a shape and reuse it elsewhere in the graph. For example, if I create a leg, I need to duplicate the graph to create a second one instead of simply reusing the output with another transform node.
It makes the graph far more complex than it should be, but for now, it's something you have to keep in mind when working with SDFs. The first thing I worked on was the body parts, which, on a ladybug, are split into three segments:
- The underlying body:
- The pronotum:
- And the head:
As you can see, parts of their graphs look extremely familiar each time, simply because of what I mentioned before: I can't duplicate a shape and reuse it. After that, I focused on the wings, probably the trickiest part of the graph, because of the bevels I wanted to achieve on some sides. This forced me to add small cutting shapes whenever I needed to create more complex forms.
The last, and probably most intimidating, part of the graph is actually the easiest one: the legs. They are just three spheres, squashed and placed next to each other to fake something more complex, since I already knew I wouldn't need more detail than that, since I could just make a quick export and see directly using my proof of concept scene from earlier.
I simply repeated the process four times, duplicating the entire leg graph each time, changing a few values to place them correctly, and finally using symmetry to complete the result.
All that was left was assigning color information for later use, masking the wings, and adding some position and size controls. The SDF system has a maximum bounding frame that I didn't really have in mind when creating the ladybug, so I had to adjust its size at the end.
Once that was done, the next step was placing the insects. The setup is simple. I used the Shape Splatter V2 node so I could use the SDF function we just looked at, but more importantly, take advantage of the new distribution system and the powerful Poisson Disc distribution, which populates the canvas with shapes while preventing overlaps, a dream come true for any Substance 3D user!
I used a random mask on the first Shape Splatter to create holes on the first layer repartition, then masked those holes and the spaces between them. This allowed me to use a secondary Shape Splatter V2 and the extremely useful Slope Rotation feature, creating the impression that the second layer of ladybugs overlaps the first one.
Once the layering was done, I started working on the color setup. The first thing I needed to determine was how I would approach it.
The base idea was simple: use the Shape Splatter Mapper, since it works natively with the output from the Shape Splatter V2, and then create a top-down version of the ladybug color texture, which would be easier to author. However, a few problems quickly appeared during the first attempt.
There are three modes for projecting a texture using the Shape Splatter Mapper:
- The tri-planar version, as its name implies, projects a texture along each axis. It's a very good way to texture an asset with high-frequency details, but it makes creating precise textures much harder, especially on rounded shapes like this.
- The second option, "From Splatter UVs," uses UVs generated natively by the SDF system. Unfortunately, those UVs were completely broken and would have required far too much work to fix them, if it were even possible.
So I used the third option, creating my own projection function, which is actually much easier than it sounds. I knew I wanted to create my Color maps from a top-down view of the insects, so all I had to do was get the position of the shape, extract its X and Y axes, and use them as UVs to sample my color textures. For anyone familiar with the Pixel Processor node, this is fairly trivial.
There was one small problem, though. Mapping a single texture provided no variation in the ladybug colors. I wanted at least four variations, meaning four samplers, and I also wanted those variations to be randomized across all the ladybugs.
I used the Shape ID from each shape, along with a modulo operation to essentially select every fourth shape, isolate each variation, and then use those isolated IDs to lerp between the four samplers.
With that in place, all I needed to do was create the four planar textures. It's a fairly basic setup, so I won't break down the entire process. Just know that I used a Shape Splatter with a single SDF shape as the base:
With the color setup completed, all that remained was the water. First, the droplets, another simple setup, basically two Shape Splatter V2 nodes used to scatter sphere shapes.
One generates the larger droplets, while the second creates the multitude of smaller ones. Combining those two layers and adding them on top of the existing Height map, along with high glossiness values, did the trick.
A small detail that I think is worth explaining is how I used the new density parameters of the shape splatter to add some variation in the amount of droplets, making the result more organic and closer to the ref.
All that remained was creating the watery background and adding ripples to make it look as if the ladybugs were interacting with the water's surface.
As well as some water tension around a few insects.
And with that, the material was done. It only needed a good render setup inside Marmoset Toolbag.
Conclusion
The final material took about a week, working 1 to 3 hours per day, so essentially a small personal project. The main challenge was definitely the SDF side of things, as it is still extremely new. While I understand how it works, I don't yet have the same instincts and habits that I have with the rest of Substance 3D Designer.
As for my advice on creating appealing materials, start by gathering the references you need and studying them carefully to understand all their subtleties. Many of the appealing details in my material come directly from the references: the droplets, the slight transparency of the wings, the saturated red tones, and so on.
A great way to improve is to train your eye by replicating references as closely as possible. I think it's one of the best exercises for learning how to add convincing detail to your materials. And with that, I think the breakdown is complete.
Thanks to the 80 Level team for hosting this breakdown!