aVersionOfReality Profile picture
Developing stylized 3D rendering in Blender and making tutorials. Available for work. https://t.co/XJ2dNUpt2G

Aug 28, 2021, 16 tweets

Experimenting with different ways to fake, generate, and influence normals. This UV based method works, but would take ages to get clean by hand. Need a way to generate this gradient cleanly and with some controls that aren't so fiddly.

#b3d #blender3d #bnpr

Figured out a way to use Object Coords instead of UVs. Now the cheeks work well, but I killed the forehead curvature. Only Y is being changed right now. X and Z are just sphere coords. They'll need some shaping too. #b3d #blender3d #bnpr

If you really want to understand your Normals, look at them with steps. The shapes you see are the shapes of toon shading you'll get from light in that area. If you rotate a sun lamp on just 1 axis, as the terminator hits that area, it'll look like that. #b3d #bnpr #Blender3d

A bunch more tinkering later, I now understand a lot more about how different gradients combined into XYZ to create curvature, and what things should go in each channel. Main remaining issue is some depth stuff on nose and eyes, but I think I can fix it. #b3d #BNPR

Got the X and Y shading shapes being controlled with RGB curves to make adjusting them a bit more intuitive. Now just need to define the nose, and I can make the tutorial video. (Some GIF artifacts when showing the Normals. They are super clean.)

#b3d #blender3d #bnpr @kolupsy

Here comes the generated nose normals! (Not working in Z yet) #b3d #bnpr #Blender3D

Nose has Z! It isn't 100% positioned right (you can see shadow wrap over the tip a bit from side view) but its good enough to move on for now! #b3d #bnpr

Since the Normals are made from object textures, they don't respond to deforms to the mesh at all. Sometimes this is good. For large deforms, use a Driver to control a parameter that alters the textures to correspond to the new shape.
This is a big limitation.
#b3d #bnpr

Baking the Object based faked normals to a Tangent map works fine (regular baking issues aside). It also removes the need to Matrix Multiply the Empty Object, which I'm still working on. (Shown here without subsurf and regular normals on back of the head and ears.)

#b3d #bnpr

This is the last major issue that needs solving now. If anybody has any idea how Loc/Rot/Scale relates to the various Matrix values, or how to take a Matrix and multiply a Vector by it in nodes more cleanly than this, let me know #b3d #bnpr

blender.stackexchange.com/questions/2359…

Alright, I've finalized the setup (for now) and I'm working on the proper tutorial video. I've also put together some convenient node groups, so it should be easy for anyone to do a basic setup on their own model.

Here's a few quick clips:

#b3d #bnpr #Blender3D

This shows just how big of a difference the generated Normals make compared to the mesh's real Normals. The mesh still does matter a little bit, as the depth does still influence the shading since we're using distance to determine the new Normals. But its small.

#b3d #bnpr

While the mesh still matters for position reasons, the topology doesn't matter at all now 😆
#b3d #bnpr

This is the secret sauce of the setup. Basically, take a look at your mesh's Normals (which are horrible and wiggly), then make a clean version based on Object Coords. Clean Normals = Clean Shading.
(And yes, I'm gonna give you all the nodes, so give me a follow :P)

#b3d #bnpr

Hey that's working pretty well with the hair and accessories on too. It is missing a bunch of face details like lip curve and brow ridge still, but those will come later.
#b3d #bnpr

Okay, tutorial video covering all this is up!

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling