aVersionOfReality Profile picture
Aug 28, 2021 16 tweets 13 min read Read on X
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!

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with aVersionOfReality

aVersionOfReality Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @AversionReality

Sep 30, 2021
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 Image
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
Read 28 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(