logo80lv
Articlesclick_arrow
Research
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_login
Log in
0
Save
Copy Link
Share

Creating a Bowl of Daoxiao Noodles with Substance 3D

Chao Chang joined us to talk about the creation of a bowl of Chinese knife-cut noodles, explaining the use of the Principled BSDF shader to make it look like meatballs, beef chunks, and dried tofu have absorbed the broth.

Introduction

Hello everyone, I'm Chao Chang, a Material Artist based in Shanghai, currently working full-time at a game company. I majored in Digital Media Art with a focus on Game Art during university. After graduating in 2020, I entered the gaming industry, where I worked as a 3D Model Artist for two years before transitioning to my current role as a Material Artist. I am now involved in the development of a multi-platform open-world game.

I was first introduced to Substance 3D Designer when my university professor showed me a rain droplet material he had created using the software. In my university curriculum, the workflow I learned involved starting with a 3D model, sculpting it in ZBrush, then proceeding through retopology, baking, and finally, hand-painting textures.

When I first witnessed how a node-based approach could directly generate material textures, producing high-quality results that were also highly adjustable, my mind was blown. I only had one thought: "This is so cool, I want to master this."

From that point on, I began seeking out online tutorials, studying node combinations in my spare time, and learning bit by bit. Although the process was often tedious, I persevered. Completing each small practice exercise gave me a gradual sense of accomplishment that kept me motivated.

The motivation behind this piece came from my desire to explore a subject outside my usual scope of work. Since I primarily create environment materials professionally, I wanted to challenge myself with something different. Around that time, while I was watching my weight, a friend from my hometown in Shanxi sent me photos of local cuisine. That sparked an idea: since I couldn't eat it, why not create it instead?

The first step was, of course, gathering references. Fortunately, it’s relatively easy to find close-up photos of food online. I even came across instructional videos on making Shanxi knife-cut noodles, from which I captured several key steps in the noodle-making process as visual references.

Daoxiao Noodles Ingredients

My overall idea was first to create a complete Height Map that included all the noodles and side dishes. I would then color them step by step using their respective masks, followed by making the corresponding Roughness Map. For the Normal Map, I directly extracted it from the height information using nodes.

I then began the production process. Before starting, I remembered that Daniel Thiger had a noodle tutorial, but it had been so long since I last watched it that I could no longer remember the details clearly. So, I watched it again to absorb the techniques for making noodles and made appropriate modifications based on his approach.

To retain the characteristic of the noodles being shaved strip by strip from the dough with a blade, I changed their shape to be flatter and kept the raised marks on their surface. I then separated the noodles into bottom, middle, and top layers to imitate the effect of the layers pressing against each other.

I extracted the basic shape of the noodles using a combination of Perlin Noise → Directional Blur → Quantize Grayscale → Edge Detect. I then applied some basic Warp adjustments to this foundation. Finally, I duplicated several node groups, introduced variations to each, and layered them one by one.

After making the noodles, I decided to add some additional elements. I considered marinated eggs, fried meatballs, and dried tofu to be essential components. The egg is essentially a basic oval shape, with one end slightly larger than the other. In the reference images, you can see that its highlight areas that aren't smooth reflections.

Some textured patterns and small cracks appear when it is cracked and subjected to force. Adding these elements completed one marinated egg. (As for why I didn't make a halved egg, which might seem more expressive, it was simply because it's not a common practice in how I'm used to eating noodles, not because I was cutting corners.)

Next came making the fried meatballs. Before I started, I recalled the meat cluster tutorial by Ezequiel Delaney that I had seen not long ago. Although I couldn't remember all the details, I knew it contained the inspiration I needed.

So I found it and reviewed the earlier part about making the meatballs. While I couldn't use it exactly as-is, the methodology and workflow were excellent references that I could adapt and adjust based on my own requirements.

I began by creating the basic shape, then built up the texture in two layers, progressing from larger to smaller granules, to gradually add variation to the meatballs. Finally, when integrating them with the noodles, I adjusted the levels overall to ensure they would sit perfectly on top of the noodles.

The next food item I wanted to add was dried tofu. It is made by solidifying and pressing soy milk into shape, so its basic form is quite regular. To achieve better height representation during creation, I used the Height Extrude node to simulate its transformation from a flat rectangle into a three-dimensional form.

The variation in brightness at both ends also nicely mimics the effect of it being half-submerged in the noodles, partially resting on top and partially buried beneath. Finally, I added some fine surface textures formed during the mold-pressing process. With that, it was basically complete.

Next, let's add some meat chunks to the noodles. I chose to create beef chunks, as muscle fibers are easier to represent (though real braised meat may not look exactly like this). I started with a Cube 3D to establish a solid base shape, applied some distortion for variation, and then overlaid a Cell Map to simulate the muscle fiber texture.

Finally, I used Shape Splatter to distribute the meat chunks among the noodles. (A mask was applied to define the distribution area and prevent excessive overlapping with previously placed elements like the egg and meatballs.)

For distribution, use several Shape Splatter nodes, adding the meat chunks incrementally. This step-by-step approach provides much better control over the final placement.

Making the Soup

The noodle part is over now. So, it's time to start the soup-making part. My initial idea was to use a Water Level node, but I quickly realized this wasn't the best approach. I decided to create a separate soup material and composite it during the rendering stage later.

The concept was quite simple: a flat plane of translucent liquid, topped with a layer of fine fat, and garnished with a few cilantro leaves and some chopped scallions.

To achieve a more realistic fat effect, I made specific adjustments to the fat layer in the Color, Roughness, Specular, and Translucency channels, rather than strictly following the standard PBR workflow.

Rendering

With all the Texture Maps ready, it was time to move into the rendering phase. Following my team lead's suggestion, I used Cycles in Blender for the final presentation. This was my first time rendering with Blender, so I initially found it a bit challenging and had to look up some beginner tutorials to grasp the basics.

Fortunately, there are plenty of tutorial videos available nowadays. Once I understood the fundamentals of material shading, I was able to start connecting simple nodes and adjusting the results.

I kept the scene very simple, using only a few basic models: a table, a bowl, and two high-poly circular planes. I planned to create the noodle model directly using height displacement (keeping the X and Y axes uniform, with only slight variations along the Z-axis).

The lower circular plane was assigned the noodle material, while the other was given the soup material. Then, in the shader, I connected the Height Map to the displacement input, allowing the plane to deform based on the height information.

Now, let's formally enter the shader interface. I imported all the required Texture Maps and several masks (the masks are imported here so that I can directly adjust elements like Color and Roughness for simple components within the shader, eliminating the need to switch back and forth between software, for instance, the masks for the meatballs and cilantro leaves).

(The red box contains the base Texture Maps, while the yellow box contains adjustments to these maps, such as Color and Contrast. Though it might look messy, the underlying logic is quite straightforward.)

I used the Principled BSDF shader, into which most of the Texture Maps can be directly connected. For this material work, after connecting the basic Color, Normal, Roughness, and Height Displacement, it's essential to try enabling Subsurface scattering.

This will significantly enhance the overall effect of the material, particularly making the meatballs, beef chunks, and dried tofu appear more integrated, as if they have absorbed the broth.

When creating the shader for the soup broth, the process was mostly similar to that of the noodles. I connected the base textures to the Principled BSDF shader and enabled Subsurface scattering.

On top of this, I additionally used a Translucent BSDF shader and blended the two using a Mix Shader node. I'm not entirely sure if this approach is physically correct, but in the render preview, it appeared to produce a more visually convincing result, so I went with it.

For the lighting setup, I didn't do anything particularly special. I just set up an HDRI environment texture and a single point light. Finally, I experimented with different color management settings in the render properties and selected what looked best visually. That basically covers all the steps I took in Blender.

Now I'd like to share an approach I spent considerable time thinking about and testing during production, but ultimately didn't use in the final work. Shanxi knife-cut noodles differ from regular noodles, they're individually shaved from a dough block with a special blade, resulting in a flat, ribbon-like shape rather than a round one. This creates complex natural twisting and stacking, which was the first major challenge I encountered early in the creation process.

Through discussions with colleagues, I learned that the Spline tool could potentially mimic this effect. However, during actual implementation, I realized that while this method might work well for creating a few individual noodles, it became problematic when dealing with larger quantities or tiling patterns.

The complex intersections and difficult-to-control height variations would complicate my subsequent workflow, requiring extensive use of SVG masks to correct issues, making further adjustments quite inconvenient.

Additionally, during my testing phase, I found that too much variation actually made the noodles appear overly chaotic, and the rendered results weren't visually appealing. That said, I still believe this is a valuable approach worth sharing, even though it didn't make it into the final rendered piece.

Conclusion

In conclusion, what appears to be a simple bowl of noodles often turns out quite different from your initial expectations once you actually start creating it. Only through hands-on production do you discover the real challenges that need solving, countless unexpected details requiring iterative debugging and testing. Even during the final rendering phase, you'll frequently find yourself returning to the project file to readjust.

When learning from tutorials, there's no need to pressure yourself into memorizing every single detail. Just make a mental note of what makes each technique exceptional. That impression alone may later help you overcome similar challenges. Then, based on your actual needs, you can adapt those methods appropriately and incorporate them into your own work.

For beginners, my advice is to watch plenty of tutorials, but more importantly, actually try doing the work yourself afterwards. Set some achievable goals for yourself, the sense of accomplishment you'll get from completing them will keep you motivated. Then, review your work to identify areas for improvement before moving on to the next challenge.

Chao Chang, Material Artist

Interview conducted by Emma Collins

Ready to grow your game’s revenue?
Talk to us

Comments

0

arrow
Leave Comment
Ready to grow your game’s revenue?
Talk to us

You might also like

We need your consent

We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more