## Overview

Normal defines a set of 3D surface-normal vectors that apply either to a sibling Coordinate or CoordinateDouble node, or else to a parent ElevationGrid node. Normal values are perpendicular directions that are used per-polygon or per-vertex when computing lighting and shading.

The Normal node belongs to the **Rendering** component and requires at least level **2,** its default container field is *normal.* It is available since VRML 2.0 and from X3D version 3.0 or higher.

## Hierarchy

1
2
3
4

+ X3DNode
+ X3DGeometricPropertyNode
+ X3DNormalNode
+ Normal

## Fields

### SFNode [in, out] **metadata** NULL [X3DMetadataObject]

Information about this node can be contained in a MetadataBoolean, MetadataDouble, MetadataFloat, MetadataInteger, MetadataString or MetadataSet node.

#### Hint

### MFVec3f [in, out] **vector** [ ] [-1,1]

Set of unit-length normal vectors, corresponding to indexed polygons or vertices.

#### Warning

- Unit length means a magnitude of 1.0, so normal values of (0,0,0) are invalid.

## Advice

### Hints

- Normal values are typically only calculated or applied once, during initial loading of model geometry.
- Custom Normal values can produce special effects.
- If no child Normal node is provided, the X3D browser shall automatically generate normals, using creaseAngle to determine smoothed shading across shared vertices.
- Computation of normal values is performed quite quickly on modern 3D graphics hardware, often with no perceptible delay.
- Normal vectors perpendicular to 3D surface

### Warning

- Adding normal values to a model might significantly increase file size. Testing can help determine proper tradeoffs between file size, network transmission delays and initial rendering speed.