Reference/Release Notes/3.0/Nodes Physics

Geometry Nodes

In Blender 3.0, geometry nodes has been extended with a re-imagined method for designing node groups, a new attribute system, many new nodes for interaction with curves, text data, instances, and much more.

Bold words are the names of one of about 100 new nodes.

Fields

Geometry nodes makes use of a new concept for passing around data and functions. Operations can be built from basic nodes and simply connected together, removing the need for named attributes as a way to store intermediate data, and removing the need for special "Attribute" nodes for simple operations.

With fields it's much easier to build node groups for higher level concepts that work together better than before.

Nodes can be separated into two different categories-- data flow nodes that usually pass around geometries, or "field" nodes, that build operations to be used by the data flow nodes.

  • Dashed lines are used to represent the flow of functions while data-flow node links look the same as before (ff7e67afd5).
  • The Set Position node simply sets a geometry's position attribute to its input ((bf47fb40fd).
  • The Position node outputs the position of the geometry it is evaluated for ((bf47fb40fd).
    • Other built-in attributes can be accessed and set by specific nodes (c1b4abf527).
  • Most nodes have been updated to make use of new concepts like selections and field inputs:
    • The Geometry Proximity node replaces the attribute proximity node (9f0a3a99ab).
  • The Align Euler to Vector and Rotate Euler node are now function nodes that can affect any rotation (79425ed326, c5c94e3eae).
  • The Edge Split node now has a selection input, allowing any edges to be selected procedurally (366cea95c5).
  • The ability to work on data without attributes means texture nodes can be ported from the shader editor:

Improved Attribute Workflow

The attribute workflow in geometry nodes has been completely redesigned. While the old system relied on addressing attributes by name, attribute data can now be passed around with node links just like data in the node tree. (bf47fb40fd).

  • As an example, the Random Value node replaces the existing Attribute Randomize node, and can simply be connected to any value to randomize it.
  • The Attribute Capture node stores data from its input on a geometry so it is carried forward to other nodes, allowing the use of the same data in a different context (bf47fb40fd).
    • For example, this node makes it possible to use data only available on curves, like the output of the Curve Parameter node, after converting a curve to a mesh.
  • The modifier interface can now interact directly with named attributes
    • A new attribute/value toggle on exposed inputs allows quick switching between attribute and single value inputs (8e21d528ca, 797064544e).
    • Named attributes can be created by connecting them to the group output node and choosing a name in the modifier (3d2ce25afd).
    • Attribute search is supported in the modifier (1d96a48267).
  • A new Attribute Transfer node can copy attribute values between geometries with various methods (a022cffb72).
    • The node includes an "Index" method to retrieve a value from the target geometry at a certain index (76f386a37a).
  • The Attributes Panel in the property editor shows all generic attributes available on a mesh (6ce4d39e6b).
  • Vertex group names are now stored on meshes rather than objects, which makes working with them in geometry nodes more predictable (3b6ee8cee7).
  • The Attribute Statistic node outputs values like average, min, and max for an attribute (05f3f11d55).
  • There is now a special domain interpolation method for selections (boolean attributes) to make the conversions work like they do in edit mode (5841f8656d).
  • The id attribute is now built-in, but optional, instead of just a reserved name (40c3b8836b).

Instances

The way geometry nodes works with instances has been improved, to make it more intuitive and faster.

  • Geometry can now be instanced directly, without a separate object (5a9a16334c).
  • When the same geometry is instanced many times, nodes can often only do the calculation once on the original geometry, rather than realizing instances and doing it many times (44e4f077a9).
    • This can result in a large performance improvement in many cases. For example, each "A" character created by the String to Curves node in a long paragraph of text only has to be filled a single time by the Curve Fill node.
  • Mesh modifiers after geometry nodes no longer implicitly realize instances or convert point clouds to meshes (219058c213).
  • Instances are now exposed properly to nodes, and aren't converted to real geometry implicitly.
  • The Realize Instances node can explicitly convert instances into real geometry (7da9da2b27).
  • Because instances each have their own transformation, there are special nodes for transforming instances.
    • The Rotate Instances node rotates instances in their local space or global space (78445ebd5f).
    • The Scale Instances node scales an instance from a center point, in local or global space (6c11b320c4).
    • The Translate Instances node moves instances along the three axes, also relative to their current transform, or globally. (9d49fc2ba0).
  • The Instances to Points node converts the origins of a geometry's instances into a point cloud (3af597d16b).
  • A selection boolean input is added to to Instance on Points (d0a4a41b5d).
  • The Object Info node can now optionally output an instance instead of real geometry (19bab2a536).
  • The instances in the output of the collection info node are sorted alphabetically (5f59bf0044).

Performance

  • Geometry nodes has a new, faster evaluation system (b084b57fbf).
    • Multiple branches of the node tree are now executed in parallel where possible.
    • Lazy evaluation is supported, so where possible, only the inputs and outputs that are required are computed.
      • For example, the Separate Geometry node is twice as fast if only one output is used and the Switch node only computes the input that is passed through.
  • All field evaluation is parallelized, so computations for many geometry elements will always be multi-threaded (e6ca054590).
  • The Instance on Points node now executes faster, especially when multiple CPU threads are available (518c5ce4cd, 617954c143).
  • Transforming meshes with the Transform node is now much faster in some situations (17b09b509c).

Curve Nodes

Curve data is now supported in the node tree (8216b759e9, 7c1bb239be).

  • The Curve to Mesh node extrudes a profile curve along another curve (8216b759e9).
    • A "Fill Caps" option allows generating an N-gon at the ends of the profile, producing a manifold mesh (bc2f4dd8b4).
    • Custom attributes are automatically transferred from the curve to the mesh output (f81bacd6f0).
  • The Resample Curve node distributes evenly spaced segments along a curve (3185084efb, d475f99460).
  • The Fill Curve node creates a filled 2D mesh from an input curve (a71d2b2601, 6d162d35e2)
  • The Subdivide Curve node adds new control points between existing control points (ed4222258e).
  • The Sample Curve node outputs values from the curve at a given factor or length along it (17021adcea).
  • The Trim Curve node makes a curve shorter by discarding sections at the start and end (e7a800c52f).
  • The Fillet Curve node rounds corners of a curve with Bezier or Poly control points (0d350e0193).
  • The Mesh to Curve node creates curve poly splines from mesh edges (11e32332dd, 17b8da7196).
  • The Endpoint Selection node outputs a selection for a number of points at the start and end of each spline (1f51037676).
  • The Curve to Points node creates a point cloud with data necessary for instancing along the curve (fcbb20286a, 334a8d9b3e).
  • There are field inputs specifically for curve data:
    • The Curve Parameter node outputs how far along the spline each point is as a 0-1 factor (4d881d9dad).
    • The Curve Tangent node outputs the direction of the curve at each control point (4d51af68ad).
    • The Normal node outputs curve normals at each control point (05ce5276db).
    • The Handle Type Selection outputs which handles have a certain type (1f8485ae82).
  • The Set Handle Type node changes the left or right handles of Bezier control points (0e8d1c6bcf).
  • The Curve Length node outputs the total length of all splines in the curve (ddd4b2b785).
  • The Reverse Curve node reverses the order of all of a curve's control points (4a540b9b48).
  • The type (Bezier, Poly, or NURBS) of each spline can be changed with the Set Spline Type node (0f45576590).
  • Curves fully support the existing attribute system.
    • Splines have resolution and cyclic builtin attributes.
    • Control points have position, radius, tilt, handle_left and handle_right built-in attributes (1892b131ed, 81f552e9ad).
    • Attributes with any name or data type can be created or removed on splines or control points (627f357127).
    • Attributes can be interpolated between the two curve domains (c97b6215a3).
  • Curve primitive nodes have been added for parametric addition of curve data directly.
  • The geometry nodes modifier is now supported on curve (and text) object types (b9febb54a4).
    • Curve data from curve objects without a geometry nodes modifier will also display in the spreadsheet.

General

  • Raycast node projects lines to a mesh, returning information about the hit location to attributes (4b673ebb99, 0a6cf3ed0c).
  • Delete Geometry node removes parts of geometry, depending on the domain of the selection attribute (464797078d, e5a1cadb2f)
  • Switch node can efficiently select between two inputs of any type (799f532f46, 653bbaa246).
  • Convex Hull node outputs a convex mesh containing all of the input points (df2a19eac7).
  • Separate Components node splits a geometry set into an output for each data type (ed4b2ba75a).
  • RGB Curves and Vector Curves nodes from shader nodes are supported in geometry node trees (8cd506639a).
  • Float to integer conversion can be done more explicitly with the Float to Integer node (fd0370acc2).
  • Intermediate geometry data can be viewed in the spreadsheet with the Viewer node (9009ac2c3d).
    • This also replaces the screen icon in the header of every node.
  • Some mesh primitive nodes have been improved:
    • The Cube node has been updated to allow a separate size and vertex count in each dimension (b44406f963).
    • The Cone and Cylinder nodes have been updated with options for the amount of side and fill segments (54927caf4f).
  • The Index node outputs the index of each element when evaluating a field (bf47fb40fd).
  • The Normal node outputs mesh normals, normalized on every domain, including faces and vertices (bf47fb40fd).
  • Mesh to Points and Points to Vertices nodes allow converting directly between point clouds and mesh elements (262b211856).
  • The old Point Separate node was updated to become more general as the Separate Geometry node (9c00486451).
  • There are more basic input nodes
    • A new Color input node is an easier way to directly input a color (f7ef68514b).
    • There are now Boolean and Integer input nodes (781289e31f).

Materials

  • An object's material slots can change during evaluation of geometry nodes (1a81d268a1).
  • Joining geometries from other objects will now properly add their materials to the modifier object (5e6f3b8564).
  • The Set Material node sets the material for a selection of faces (f41a753e75, 09f14b38f2).
  • The Replace Material node replaces an existing material on a geometry with another (c154b078b5).
  • The Material Selection node creates a boolean mask of the parts of a geometry with a certain material (08b0de45f3, 09f14b38f2).
  • The Material Input node allows using the same material in multiple places (3e3ecc329c).
  • The built-in material_index attribute on meshes can be accessed with the Material Index input node (24cc552cf4).

Text Nodes

  • The String to Curves node generates curve instances for a text paragraph, like the text object type but procedural (be16794ba1).
    • Because the node creates curve instances, performance can be much better than the existing text object.
  • String manipulation nodes allow creating text for the string to curve node procedurally (29e3545194).
    • String Length Outputs length of a string
    • Slice String Outputs part of a string
    • Value to String Converts a value to a string
    • Join Strings Concatenates multiple strings with a delimiter
    • Replace String A node-based find and replace operation (a83b405a45)
  • The Special Characters node can be used to build a paragraph with multiple lines (5c0017e85a).

Volumes

  • The geometry nodes modifier is now supported on volume objects (8c0f7d1772).

User Interface

Node Editor

  • The node editor now has an "Overlays" popover, with options for displaying wire colors and annotations (9b1b4b9e32).
  • The editor's view now pans automatically when links or nodes are dragged to the edges (a1cc7042a7, 19da434e9c).
  • Node editor UI style changes
    • There were many changes to the style of nodes themselves, to increase clarity and make them look nicer (4db4a97355).
    • The background grid is now displayed with dots instead of lines (e463d2c16f).
    • The breadcrumbs to show the path of the node tree are now drawn differently, on the top left (3371a4c472).
  • On node frames, the label text is only displayed when there is a label set (8f04ddbbc6).
  • Node links between different types with no possible implicit conversion now turn red to indicate the error (Geometry Nodes) (65244ac1c3).
  • Socket labels on nodes like "Object Info" are hidden to give more space to data-block names (ec98bb318b).
  • Node links with sockets outside the view are dimmed, to remove visual noise from long links (c27ef1e9e8).
  • Parent node trees are no longer displayed behind a green background when editing a nested node group (919e513fa8).
  • Wire colors overlay to match the socket's color they are connected to. (9b1b4b9e32).

Spreadsheet Editor

  • The spreadsheet now has a region on the left to quickly switch between geometry components or domains (ae085e301c).
  • Row filters were added to a right property region, to allow removing rows from the view (f9aea19d98).

Modifier

  • Node warnings are also displayed in the modifier, so they don't get lost in the node tree (49e68f15f2).