How to Get Normal Data in Blender Geometry Nodes

Retrieving and manipulating normal data in Blender Geometry Nodes is essential for controlling scattering, custom shading, and deformation effects. This guide explains how to access the built-in normal vector attribute using the Normal node, capture original normals before geometry modification, and sample normal data from secondary objects or specific mesh domains.

Accessing Default Surface Normals

The quickest way to get normal data in a Geometry Node tree is by using the Normal node.

  1. Press Shift + A in the Geometry Node editor.
  2. Go to Input > Sample > Normal (or search for "Normal").
  3. Connect the Vector output of the Normal node directly to any node input requiring directional data, such as the Rotation socket of an Instance on Points node.

The Normal node automatically reads the context of the geometry evaluation (Vertex, Face, or Corner domain) and outputs a normalized 3D vector representing the surface direction.

Capturing Normals Before Geometry Changes

If you deform, extrude, or apply instances to a mesh, the surface normals will update dynamically. To preserve the original normal data before modifying the geometry:

  1. Insert a Capture Attribute node between your input geometry and the node that modifies it.
  2. Change the data type on the Capture Attribute node to Vector.
  3. Plug the Normal node into the Value socket of the Capture Attribute node.
  4. Use the resulting Attribute output downstream to reference the original, unmodified normal vectors.

Sampling Normals from External Objects

To retrieve normal data from a different mesh object within the same node tree:

  1. Add an Object Info node and select the target object.
  2. Add a Sample Nearest Surface node. Set its data type to Vector.
  3. Connect the Geometry output of the Object Info node to the Geometry input of the Sample Nearest Surface node.
  4. Plug a Normal node into the Value socket of the Sample Nearest Surface node.
  5. Provide a Sample Position (usually the current position using the Position node) to evaluate the closest surface normal on the target mesh.

Storing Normals for the Shader Editor

To pass custom or modified normal data from Geometry Nodes into a material shader:

  1. Add a Store Named Attribute node near the end of your Geometry Node setup.
  2. Set the data type to Vector and the domain to Point or Face.
  3. Type a descriptive name in the Name field (e.g., custom_normals).
  4. Plug your desired vector or Normal node into the Value socket.
  5. In the Shader Editor, add an Attribute node and type the exact name (custom_normals) into the Name field to use the vector output in your material setup.