Customizing Normals tutorial series

Originally posted on my blog here.

Its time for a new series on Customizing Normals in Blender 3.1. I’ll be showing a variety of methods to fix dirty shading and also stylize it however you want by controlling the shading shapes. We’ll be learning a Normal transfer based workflow that uses Geometry Nodes and also Shader Nodes. We’ll model the shapes we want separately, then steal their Normals and put them onto our main mesh.

My first attempt to clean up toon shading worked, but lacked good options for adding details or controlling shapes due to limits of Eevee/Cycles nodes. So I dug into how those nodes worked and created custom versions that didn’t have these limitations. But this did not solve the artistic challenge of creating the right shapes for stylized shading in the first place. To solve that, I ended up using Geometry Nodes to transfer and edit vertex Normals on a mesh level before bringing them into the Shader.

I’ve spent a long time experimenting and tinkering. This will be a video series about it all. We’ll be learning a Normal Transfer based workflow where we model the shapes we want, transfer them to our main mesh and combine them together, then bake them to textures. We’ll start with simple options using the Data Transfer Modifier, then get into Geometry and Shader Nodes.

Here’s a huge Twitter thread of experiments that this series is based on:
https://twitter.com/AversionReality/status/1443680353747537921

I’ll add entries for each video to this post as I create them.

1: Series Overview + The Problems

This first video previews a wide variety of tools and setups we’ll be learning about, and goes into detail on what exactly the problems are, why we have them, and how they can be solved.

More GIFs:



8 Likes

Customizing Normals - 2: Basic Normal Transfer Options and Issues

An introduction to basic Normal Transfer setups using the Data Transfer modifier. We get to know how it works and what it can and can’t do, and we also pick up a lot of general information about how meshes and Normals work. Later we’ll build off this foundation to create more powerful Data Transfer and Geometry Node setups.

4 Likes

Customizing Normals - 3:Advanced Normal Transfer Setups and Limitations

A deeper look into advanced Normal Transfer setups using the Data Transfer Modifier in Blender 3.1. In the previous video we identified several problems. Now we’ll see how to solve many of them by using multiple Data Transfers and multiple Source and Destination meshes. We’ll also learn more about options for adding details. There are many limitations, and many things that nearly work. Understanding them prepares us to later solve them in Geometry Nodes.

4 Likes

Customizing Normals - 4: Getting Normals from Geometry Nodes

GeoNodes don’t currently support the Custom Normals we are used to. We can use the Attribute system to get Normals from our mesh and pipe them into our Material, but we need the correct setup or they won’t work right. And if we want things like Sharp or angle based edge splitting, we need to create them ourselves.

4 Likes

Hey !

I didn’t watch the tutorials yet , but that’s on my todo list, thanks a lot for making these it’s quite interesting !
You’re doing great artwork also !
Thanks a lot for taking time to make these tutorials !

2 Likes

Thank you! I hope you enjoy, and let me know if you’ve got any questions :slight_smile:

Awesome ! I started to watch the first one , but I think it’s a bit too early in the morning, I need more coffee :smiley:
But I liked it very much so far, it’s very cool to share the process on how you get to that result and worked around math and code.
It’s great to share not only the solution but how it works ! I’m sure I’ll learn a lot of stuff watching these. Too bad I’m not in NPR/Shading work right now, because this look like the perfect resource to learn and experiment !
Once again , great work ! I hope it will get the attention it deserves !

1 Like

Thank you for making this.

1 Like

5: Transferring Normals in Geometry Nodes

Transferring is common and easy in GeoNodes, but there are many details specific to Normals to keep track of. We’ll create the GeoNodes equivalent of Nearest Face Interpolated and Projected from the Data Transfer Modifier, as well as several other features.

3 Likes

6: Fixing Transfer Distortion with Position Transfer

To get clean transfers, we need to close up gaps between or align our meshes. In this video, we apply what we’ve been learning about transferring data with Geometry Nodes to transfer Position of one mesh to another. This is similar to earlier videos where we solved the ‘Air Gap’ issue with Shrinkwrap.

7: Building the Normals Canvas with Position Transfer

If we want a good user experience while building up our Normals, then we need a good workspace. We’ve spent a lot of time learning how to manipulate our meshes into the right positions for transfers, and now we want to stick all that stuff in some handy node groups and never have to think about it again!

3 Likes

8: Combining Normals with Surface Gradients

So far in this series we’ve explored how to work with Normals in Geometry Nodes, and how to transfer them between meshes. Now we will get into our options to stack, layer, or otherwise combine multiple Normals together into a new shape. In this video we’ll mostly talk about Surface Gradients as a prelude to Tangent Normal Mapping, which will come next.

9: How Tangent Normal Mapping works

Normal mapping is one of the most powerful tools we have for achieving high quality custom normals. But it is difficult to use because it requires complete understanding to get it to do what we want. And it is hard to find a good explanation in terms artists will understand. So I shall attempt to make the explanation I wish I’d had when I was learning it!

3 Likes

What would be the actual usage for this ? It’s really cool btw, I don’t do much 2D in blender but someone might find this extremely useful

The main thing I’m using it for is getting clean toon shading on stylized character faces. So its a situation where you need the mesh to shade as if it were a different shape than it is, and that shape isn’t necessarily something that can be easily created with a single other mesh, and you need the toon shading to be perfectly clean.

Other uses would be situations where you want to add detail based on some vector defined in geometry nodes for convenience.

3 Likes