Difference between revisions of "VertexNormal"
m (→Normal Mapping) |
m (→Editing Normals) |
||
Line 59: | Line 59: | ||
Go into Face sub-object level, make a face selection and run the script. Every time a normal is modified by the script, it is made Explicit to retain the modifications. At the end the script will switch back to the base Editable Poly modifier and re-enter Face sub-object level (even if other modifiers are present in the stack). If you want to revert back to the original default normals, add an Edit Normals Modifier and reset the normals. | Go into Face sub-object level, make a face selection and run the script. Every time a normal is modified by the script, it is made Explicit to retain the modifications. At the end the script will switch back to the base Editable Poly modifier and re-enter Face sub-object level (even if other modifiers are present in the stack). If you want to revert back to the original default normals, add an Edit Normals Modifier and reset the normals. | ||
− | See the Polycount forum thread [http:// | + | See the Polycount forum thread [http://polycount.com/discussion/75753 Editing vertex normals in Max, got scripts?]. |
==== Slide Normal Thief MAXScript ==== | ==== Slide Normal Thief MAXScript ==== | ||
Line 118: | Line 118: | ||
* [https://skinprops.com/addnormals.php Add Normals plugin] explicitly creates the Normals Tag for each vertex, allowing the export (but not editing) of explicit normals. | * [https://skinprops.com/addnormals.php Add Normals plugin] explicitly creates the Normals Tag for each vertex, allowing the export (but not editing) of explicit normals. | ||
− | * [http:// | + | * [http://polycount.com/discussion/60571 Cinema 4d tips and tricks thread] from the Polycount Forums. |
* [http://www.okino.com/conv/imp_c4d_selective.htm CINEMA 4D Import Conversion System by Okino Computer Graphics] has in-depth information about vertex normal support in Cinema 4D | * [http://www.okino.com/conv/imp_c4d_selective.htm CINEMA 4D Import Conversion System by Okino Computer Graphics] has in-depth information about vertex normal support in Cinema 4D | ||
Line 130: | Line 130: | ||
|[[image:maya_transferattributes.jpg]] | |[[image:maya_transferattributes.jpg]] | ||
|- | |- | ||
− | |"Transfer Attributes" in Maya can be used to copy vertex normals from a dome to a tree.<br/>Select the dome, then the tree, then choose Mesh > Transfer Attributes, and enable only Vertex Normals.<br/>Image by [http:// | + | |"Transfer Attributes" in Maya can be used to copy vertex normals from a dome to a tree.<br/>Select the dome, then the tree, then choose Mesh > Transfer Attributes, and enable only Vertex Normals.<br/>Image by [http://polycount.com/profile/callebo 'callebo']. |
|} | |} | ||
Line 143: | Line 143: | ||
==== FaceNRMtoVert ==== | ==== FaceNRMtoVert ==== | ||
− | [http:// | + | [http://polycount.com/profile/passerby "passerby"] wrote a melscript that does a similar function as the [[#SetNormals_MAXScript|GetVertNormalsFromFace]] maxscript. |
Line 169: | Line 169: | ||
− | For more info see the Polycount forum thread [http:// | + | For more info see the Polycount forum thread [http://polycount.com/discussion/comment/1584696/#Comment_1584696 GetVertNormalsFromFace script for maya]. |
=== Modo === | === Modo === |
Revision as of 06:14, 3 November 2015
Vertex normals are invisible lines pointing out of a 3D model's surface, at each vertex. The game compares these normals against a light's direction. If the light is directly facing a normal, the surface is brightest there. When a normal is facing away from a light, the surface doesn't get lit by it.
Game artists can manually alter the vertex normals to change the way an in-game mesh is lit, how it renders a reflection, how the fresnel falloff looks, etc. Any lighting effect that uses vertex normals can be tweaked by changing the model's vertex normals.
Some game engines do not import edited vertex normals. Check your engine's documentation, or try a quick test.
Contents
What Is a Vertex Normal?
FrostSoft: WHAT ARE VERTEX NORMALS (VNT documentation)
Model Seams
Game models are often cut apart into different segments, for example to allow a player to customize their character by swapping out different clothing models.
When a contiguous mesh is cut apart, the vertex normals along the edge usually change. Vertex normals are usually calculated automatically by the modeling software, to average out the local surface curvature. However this causes a shading seam along the cut, because the two models now have different vertex normals along their shared edge.
To help hide this artifact, the seams between the pieces are usually cut along natural seams, like the belt line, shoulders, neck, wrists. This doesn't hide all of the seams though.
Bent vertex normals can be used to hide these seams completely, by manually averaging the two models' edges together.
Smoother Shading
Shading can be improved by editing the vertex normals so flat surfaces have perpendicular normals. The vertex normals are then forced to blend across smaller bevel faces, instead of across the larger faces.
- A short explanation about custom vertex normals (tutorial) Polycount Forum thread
- Face weighted normals Polycount Forum thread
- Superspecular soft edges tutorial chapter 1 Polycount Forum thread
Normal Mapping
Vertex normals have a strong influence on tangent-space Normal maps. Some game engines require a bit more geometry near areas that have a lot of change in angle (hard corners, etc.) otherwise the vertex normals fight with the normal map and create shading errors. Careful Topology can minimize or avoid these errors altogether.
Editing Normals
3ds Max
Vertex normals can be manually bent in 3ds Max by using the Edit Normals modifier. See the 3ds Max 2011 online help.
Vertex normals can also be modified by using Smoothing Groups, as long as the normals have not been edited by the Edit Normals modifier beforehand. See the Smoothing Groups Tutorial by Ben "poopinmymouth" Mathis.
3ds Max Restrictions
Edited vertex normals are somewhat fragile in 3ds Max, they can be lost easily:
- If you take an Editable Mesh model, activate Attach, and try to attach an Editable Poly to it, the vertex normals of the Poly model will be reset. However using Attach in an Editable Poly model will work fine.
- If you Attach multiple meshes together, make sure each has at least one edited normal. Meshes without edited normals will have their vertex normals jumbled.
- If you Attach models that have been rotated, make sure to use Reset Xforms on them first. Attaching a rotated model to another will skew all its edited normals.
- If you use Detach to make a new object, the detached object's vertex normals will be reset.
- If you use Detach to create a new element in the same object, the detached element's vertex normals will be reset.
AverageNormal MAXScript
File:AverageNormal.mcr.zip by Mathieu 'zOffTy' Jacquin is a 3ds Max MAXScript tool that averages all the vertex normals for the selected faces, so they all point the same direction.
GetVertNormalsFromFace MAXScript
File:GetVertNormalsFromFace 0 2.ms.zip by Enrico 'SyncViewS' Gullotti is a 3ds Max MAXScript tool that aligns all the vertex normals for the selected faces so they point perpendicular to their polygons. In other words, the same direction as the face normal would be facing. This is similar to the mig Normal Tools option "Fillet Outside".
Once installed the script will be under the category Normal Tools, named Get Vert Normals from Faces. It works on Editable Poly objects only, and that must be the active modifier in the modifier stack. If an Edit Normals Modifier is not present, the script will add one right above Editable Poly. It should not mess with Smoothing Groups at all.
Go into Face sub-object level, make a face selection and run the script. Every time a normal is modified by the script, it is made Explicit to retain the modifications. At the end the script will switch back to the base Editable Poly modifier and re-enter Face sub-object level (even if other modifiers are present in the stack). If you want to revert back to the original default normals, add an Edit Normals Modifier and reset the normals.
See the Polycount forum thread Editing vertex normals in Max, got scripts?.
Slide Normal Thief MAXScript
SlideNormalThief by the studio Slide London is a 3ds Max MAXScript tool that projects vertex normals from one model to another, automating what would otherwise be a tedious manual process.
Interface for the SlideNormalThief MAXScript. Script by Slide London. |
The script is based on a much-slower script called NormalThief.ms written by Mauricio B. Gehling.
The Reference Object is the model you wish to copy vertex normals from, and the Target Object is the model that will get its normals bent to match. The two models should be superimposed on one another, the normals on the Target will be bent to match the nearest normals on the Reference. This is similar to the way NormalMap projection works, the copying is based off location in 3D space. The vertex counts of the two models don't need to match, but both models need to have an Edit Normals modifier applied.
Vertex Normals Stitcher
This script averages vertex normals at the borders (Open Edges). It allows you to smooth surfaces after separating their vertices/edges/faces. For example after detaching faces or splitting edges. It still keeps hard edges if the object has multiple smoothing groups.
Exporting Edited Normals
Edited vertex normals can be exported from 3ds Max with some file formats:
File Format | Supports Edited Normals? |
3DS | no |
ASE | yes |
CGF (CryEngine) | ? |
Collada | no |
FBX | yes |
OBJ | yes |
PSK (Unreal Engine) | no |
WRL (VRML) | no |
Cinema 4D
- FrostSoft: VERTEX NORMAL TOOL PLUGIN allows the editing of vertex normals in Cinema 4D.
- Add Normals plugin explicitly creates the Normals Tag for each vertex, allowing the export (but not editing) of explicit normals.
- Cinema 4d tips and tricks thread from the Polycount Forums.
- CINEMA 4D Import Conversion System by Okino Computer Graphics has in-depth information about vertex normal support in Cinema 4D
Maya
Vertex normals can be adjusted in Maya by using the Normals tools in the Polygons menu (Maya 2011 online help).
Vertex normals can also be baked from one model to another by using Transfer Attributes.
"Transfer Attributes" in Maya can be used to copy vertex normals from a dome to a tree. Select the dome, then the tree, then choose Mesh > Transfer Attributes, and enable only Vertex Normals. Image by 'callebo'. |
mig Normal Tools
The mig Normal Tools is a collection of MEL scripts for editing vertex normals in Maya.
Interface for the mig Normals Tools MEL scripts. Scripts by Mika Göös. |
FaceNRMtoVert
"passerby" wrote a melscript that does a similar function as the GetVertNormalsFromFace maxscript.
#!highlight csharp global proc FaceNRMtoVert() { string $Fs[] = `filterExpand -sm 34`; select -cl; for ($F in $Fs) { select -r $F; string $normals[] = `polyInfo -faceNormals`; string $buffer[]; tokenize $normals[0] $buffer; float $plane[3]; $plane[0] = $buffer[2]; $plane[1] = $buffer[3]; $plane[2] = $buffer[4]; PolySelectConvert 3; polyNormalPerVertex -xyz $plane[0] $plane[1] $plane[2]; } }
For more info see the Polycount forum thread GetVertNormalsFromFace script for maya.
Modo
Baking normals in modo, using the pipelineIO plugin. Image by Ariel Chai. |