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.
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.)
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.)
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
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.
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.
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)
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
Working on a video about displacing/bump/normal mapping Generated Normals. Will still be a few days because its really complicated >_<
If anyone can explain Surface Gradients in layman's terms, or knows how to do something like dFdx in Eevee nodes, it'll go faster 😬 #b3d#bnpr
Okay that ended up taking AGES to figure out. But I now have working (mostly) Normal and Bump map groups that can take any input Normals and tangents, which means they can work on Generated Normals, which means I can now move ahead with the project and next video... #b3d#bnpr
Eevee and Cycles not having access to dFdx/dFdy, or any option to run GLSL expressions, is a giant hassle. The good news is that, in the process of figuring all this out, I've learned a lot of GLSL and will be able to do this stuff properly in Malt soon. #b3d#bnpr