Normal Tool

This project was suggested to me because Mig Normal Tools have been discontinued for a while now and I was told it would be nice to have a more convenient and faster way of editing vertex normals on a mesh in Maya. The interface was created using QT Designer and is linked with Maya using PySide2.

 
A cube which has had its normals fixed by the Normal Editor Tool Normal Editor Tool interface

A cube which has had its normals fixed by the Normal Editor Tool Normal Editor Tool interface

 

The basic idea behind this tool is for a fast and easy way to adjust your normals, either based on largest surface area connected to a vertex or changing the vertices to have the same normals as the selected face.

Fixing a vertex normal by measuring the area of its connected faces

Fixing a vertex normal by measuring the area of its connected faces

Fixing all vertices which belongs to the selected face by measuring the area of all of their respective connected faces

Fixing all vertices which belongs to the selected face by measuring the area of all of their respective connected faces

Setting the vertices of the selected face to have the same normals as the face

Setting the vertices of the selected face to have the same normals as the face

Final thoughts and lessons learned

This project has given me further insight in how PyMel works. While I do enjoy making tools with it, I've started to notice limitations in computational speed. Especially with this tool, making these measurements, while not being particularly complex, does not scale well with meshes of higher polygon count.

I will be looking into translating this tool into the OpenMaya API to see if I can gain some more speed there. On my workstation, through some tests I ran, it would seem that each operation to measure and change a vertex normal totals out at around 5 milliseconds. Which means that a mesh of around 30,000 vertices would take almost two and a half minutes to fix. 

In my own opinion I think this is way too slow and I am very eager to see if I can optimize this further, either by changing to a different API than PyMel or possibly looking at my measuring algorithm. I suspect I will be needing a combination of both.

Nevertheless, very excited about developing and researching this tool further while at the same being a great opportunity to learn more about Python and optimizing a workflow. 

Research and development of this project was conducted at The Game Assembly as part of an Advanced Technical Specialization course.

Last updated: 31st May - 2018