Vertex normal editor blender 2.8

I’m about to make the change from Maya to Blender 2.8, but right now there is only one thing ( okay, two, UV-Editor needs more tools, but it is doable ) and that is full control of normals. I work in the game industry and we need to tweak the normals all the time, force them in a certain direction. I want to be able to select a face, copy its normal and force another face normals to the same. Sometimes I want to average out some faces and etc.

In Maya there is an old but truly amazing tool, MigNormalTools, and it gives me all the control I need. So right now I am stuck between Maya and Blender 2.8, but damn I want to swap software…

Anyone that knows any addons, or if there is some dev working on this?

3 Likes

Forcing normals:

There was a google summer of code in 2017 about developing tools for normals editing.
Actually, they are available in 2.8.
You have to enable autosmooth option into Normals panel of Mesh properties.
Then, you will have access to all these tools to edit custom normals that are grouped under Mesh menu > Normals.
There are also 2 modifiers to change normals in object mode : Normal Edit and Weighted Normal.

Hi Jernst, welcome to Blender!

In Blender 2.8 a lot is already possible with inbuilt tools and our so-called custom normals or vertex-per-face normals. You have to activate them in properties, object data tab: turn on auto smooth (read the tooltip).

You can visualize them in the overlay dropdown in the top-right of the 3d view. At the end of the dropdown, under normals, click on the middle one. In the standard theme they are pinkish.

Then switch to face select mode (top left in 3d view) and check the functions in the mesh menu under normals, like: Set From Faces, Rotate Normal, Point normals to target, and so on. Note any hints appearing in the top of the 3D view for options of activated functions.

I just checked those out myself for the first time, so I can’t tell you exactly what they all do, but it looks promising.

Another thing is of course if you can transfer those edited custom normals into other applications like game engines, but that depends on the exporter you are using. I have found that at least the inbuilt obj exporter keeps custom normals intact.

The Blender 2.8 I’m using right now is from yesterday, 2019-02-04.

Tell me if you need any screenshots, and good luck!

Edit: hehe, too wordy as I always am, zeauro told the same far shorter! :slight_smile:

Hi, nice! It looks like there is a lot of the tools and functions I need, but there is something odd, for example, here I want to set the normals accordingly to the face, but then it takes the normals from the top as well. Is there some way to only select the normals on the face? Without splitting the mesh.

If You set edge as sharp (edge>Mark Sharp) you will split vertex normals without splitting geometry (smoothing group alike)

I will try this out :slight_smile:

Mmh, does not seem to work entirely?

They fixed it with “Weighted normals” modifier in 2.8
Check in"keep sharp" and 100% Weight. It would respect edges marked as sharp properly.

These features are new. They may be buggy or unsatisfying.
You may post bugreport on bugtracker if you don’t succeed to obtain what you want.

To me it looks correct the first time (the gif without the sharp edges) : you select one face and the custom normals of the selected vertices all get the direction of the normal of the selected face.

Or maybe I misunderstood? What exactly are you wanting to do?

I cant figure it out, because I need to have full control of the faces and their normal. This face to this -> face.

In this simple beveled cube I have copied the slopes and made both faces have the same angle, but then i need to have the side still pointing the same direction as the face, and there is my problem. I want to be able to set connected vertices to the same angle as the face, and do not move the others…

Okey, If i marked the whole cubes edges to sharp and then used Average normals and not set to face, it worked! Interesting, It feels a bit clunky atm. But I have to do some more investigations in this!

Paste operator have no option to keep split normals.
It should rewrite only what is related to selected face.
IMO, that is a lack that should be considered as a bug.

2 Likes

I see, I misunderstood indeed, thanks for the explanation.

I also couldn’t get it to work without marking edges which should be sharp as sharp, but maybe that’s what we are supposed to do in this case when we want to keep custom normals split.

Edit: I found a thread at the dev forum and some docs with a section about custom normals, might be interesting.

Another useful tip: hitting n when rotating geometry will rotate normals instead.

1 Like

I agree. I would expect it to at least respect edges marked as sharp, like the avarage operator seems to do.

Edit: actually, it does already. You have to target specific split normals of a vertex that belongs to a specific face, as described in the docs under “Custom Normal Tools Usage”. Great, so the functionality seems to be there, only the interface is a bit clunky still.

Nice find! Will look into this later! But ye, it is a bit clunky if you need to use it every day.

Hey, there, sorry to necro. I stumbled across this when experimenting with moduler skeletal mesh setups.

I.e. I tried to split a horse in half and it resulted with a shading seam (which was expected).

Then I researched how I could overcome this issue and found many very unpleasant workarounds as well as these rather new normal tools.

Basically I want to average the normals along the seam, very similarly to what the migNormal tool in the original question does. Is something like this possible?

If not, where can I file a feature request :'D
Optimally, I would only want to trigger the existing average logic but for vertices that are not connected to each other.

After a LOT of trying, I finally managed to at least get the copy pasting to work, but it is kind of useless in this situation. I only managed by selecting a face, copying normal vectors, then selecting the vertices I want to paste them to. It doesn’t seem like I can paste the normal information of one vertex to another vertex directly (which would be an immense upgrade). This renders the copy pasting method completely irrelevant for my task as I cant create a face that defines my normal for each vertex, it just doesn’t scale.

Thanks for reading, hopefully someone has advice!

EDIT:
The following screenshot shows where the normals seperate on a disconnected edge of a sphere.
I’d like to somehow get them back together so they are as if the edge is not disconnected. I managed this (at least for spheres) by duplicating the seam vertices to another object and then using a Normal Edit modifier set to directional to kind of copy the normal information over, but this destroyed the complex mesh of my horse.

EDIT2:
With a DataTransfer modifier, I managed to at least copy the normals to the seperate pieces as long as I have a fully assembled mesh with the correct normal vectors. I reckon this is the best solution to this as of now, but a similar tool to the one described in the original post would be great.

Yes this is the workflow I’m using for such cases. Basically having a reference mesh where the vertices are not split and you use the data transfer modifier, to bring these vertex normals over to your split mesh.

It does the job just fine. But I agree, it could be more convenient.

1 Like