Normal Tools is a collection of MEL-scripts that speed up the process of manipulating polygon vertex normals. These tools are designed for low polygon work.

01 Installation

Normal Tools Menu

You should see Normal Tools menu appear in the main menu bar. This gives you access to all features included in the script.

02 Documentation

Normal Tools UI

migNormalToolsUI()

Normal Tools UI layout
fig.01 - Normal Tools UI layout

Normal Tools UI is a floating window carrying every command you'd use in tweaking normals. By binding migNormalToolsUI(); command to a hotkey you can toggle this toolbox on and off.

  • Type-in Dialog - See Type-in Dialog
  • Normal Display
    • Vertex - toggles vertex normal visibility on selected objects
    • Face - toggles face normal visibility on selected objects
    • Grow - increases normal display size by a factor of 1.5
    • Shrink - decreases normal display size by a factor of 0.666
  • Maya's default - See Maya documentation
  • Fillet - See Fillet
  • Select Vertices
    • Locked - Selects all locked vertices on a poly object
    • Unlocked - Selects all unlocked vertices on a poly object
    • Convert to VtxFaces - Converts current selection to vertex-faces
  • Other

Maya's default tool section doesn't include the Set Normal -command, because this is being replaced by Type-in Dialog. Also, the Soften Harden command is replaced by the Fillet and Maya's Average tools, which gives far more greater control over how to smooth polygon edges.

Type-in dialog

migNormalToolsTypeIn()

Type-in dialog layout
fig.02 - Type-in dialog layout

Planarize command
fig.03 - Planarize

Type-in dialog is a UI for setting vertex normals by value. It allows copying and pasting normals and a quick way to orient the normals along the major axis. By binding migNormalToolsTypeIn(); command to a hotkey you can toggle this toolbox on and off.

  • Specify Plane Normal
    • Three fields correspond to X, Y and Z components of the normal vector that you can specify by typing in the values
    • X - sets the three fields to correspond X axis (1,0,0)
    • Y - sets the three fields to correspond Y axis (0,1,0)
    • Z - sets the three fields to correspond Z axis (0,0,1)
  • Get Normal From...
    • Selected Vertex - gets the normal components from a selected vertex
    • Selected Face - gets the normal components from a selected face
  • Planarize
    • This command projects each vertex-face to a plane defined by the specified normal.
    • fig. 03 - The red vertex normals are projected to a plane defined by the face normal yelding the projected orange vectors which are then normalized creating the final normal vector
  • Set to Normal
    • Every selected vertex (or vertex-face) is assigned the specified normal

Fillet

migNormalFillet([0|1]) - 0:filletInside 1:filletOutside

Before fillet
fig.04 - Before fillet
Faceted look

Fillet inside
fig.05 - Fillet inside

Fillet outside
fig.06 - Fillet outside

The Fillet command is a way to smooth polygon edges utilizing a different approach compared to Average and Soften Harden tools.

The command works on a polygonal face selection (yellow face in fig.04), but affects only the selection border vertices. The border vertices are smoothened through moving either the vertex-face normals that are included in the face selection or the vertex-face normals that are not included. This depends on the type of the command in question: Fillet inside [migNormalFillet(0)] or Fillet outside [migNormalFillet(1)].

  • Fillet inside - red arrows in fig.04
    • This affects only the border vertex-faces that belong to the selected faces. ie. only the selected faces' shading is being affected. Conceptually the Fillet inside command will conform the curvature of the selected faces to the curvature surrounding the selection
  • Fillet outside - blue arrows in fig.04
    • Same as the Fillet inside command except this will not affect the shading of selected faces, but the faces immediately next to the selected faces

Fig.05 and fig.06 show the resulting normals and a profile of the object demonstrating how the smoothened object will render to look like as though it was geometrically built like the curves indicate.

  • Fillet example - pictures 1-3
    • 1. Wireframe of the object
    • 2. Cylinder walls are smoothened by using the Average command
    • 3. The "transition" faces are then applied an inside fillet. This keeps the cylinder walls intact, but the transition is smoothened forming a continuous shading.

Fillet example

Bulge

migNormalBulge()

Bulged and pinched faces
fig.08 - Bulged and pinched faces

Bulge is a command you can use to create the effect that faces were to bulge outwards or pinch inwards. This is achieved through spreading the normals outwards or pulling them towards the center of the face. See fig.08.

  • Amount
    • 0.0 - no effect
    • positive - bulging the face out with 1.0 as the maximum value
    • negative - pinching the face in with -1.0 as the maximum value

Bulge faces dialog layout
fig.07 - Bulge dialog layout

Randomize

migNormalRandomize()

Randomized normals
fig.10 - Randomized vertex-face normals on a sphere

Randomize works on vertex or vertex-face selection. When applied on a vertex-face selection the result is faceted as seen in fig.10.

  • Amount
    • 0.0 has no effect while 1.0 is the maximum randomization value

Randomize normals dialog layout
fig.09 - Randomize dialog layout