# Reference/Release Notes/3.1/Nodes Physics

< Reference | Release Notes | 3.1

# Geometry Nodes

Geometry nodes has been extended with large performance improvements, more possibilities with many new mesh nodes, and various other utilities and features.

In **bold** you can find the names of 19 newly added nodes.

### Performance Improvements

- The
*Set Position*node has been optimized for meshes, with up to a 4x improvement for a simple field (602ecbdf9a). - The evaluation system used for fields has been improved in many ways
- In large fields with many nested values, memory usage can be reduced by up to 100x, which can also improve performance by 3-4x (1686979747).
- Improvements to multi-threading with medium loads (around 10,000 elements) can improve field evaluation performance by up to 10x (658fd8df0b).
- Memory use and performance have been improved, especially when few elements are processed by many nodes, up to a 20% improvement in some cases (92237f11eb).
- Processing single values with field nodes is more efficient now, which can make a 2-3x difference in very extreme situations (47276b8470).

- The
*Realize Instances*node is now multi-threaded, which can give at least a 4x improvement in some common cases (f5ce243a56). - Mesh vertex and face normals have been refactored, improving access speed in geometry nodes by up to 40% (cfa53e0fbe).
- Other areas like normal calculation, primitive nodes, and more complex files also have significant improvements.

- Domain interpolation now only calculates necessary values, for some interpolations to faces and face corners (796e9d442c).
- When selections are used, the improvements can be significant; a 6x improvement was measured using the position attribute to a single face.

- Displaying large node trees with many nodes in the node editor can be almost twice as fast (0129178376).
- The
*Set Spline Type*node is now multi-threaded, making it faster when there are many splines (d2f4fb68f5). - The
*Cube*mesh primitive node can be about 75% faster at high resolutions (aa6c922d99). - The
*Grid*mesh primitive is now multi-threaded, with a 2.5x performance improvement observed on a 4096x4096 vertex grid (cb96435047). - The internals of the
*Bounding Box*node have been multi-threaded for meshes and point clouds, with observed 4.4x and 5x performance improvements (6a71b2af66, 6d7dbdbb44). - The overhead for multi-threading a series of nodes has been lowered, for a few percent improvement in some cases (e206a0ae96).

### General

- The result of a field at a certain index can be calculated with the
**Field at Index**node (b88a37a490). - The new
**Accumulate Field**node is useful as a building block for more complex setups, building sums of values inside multiple groups (a836ded990). - It's no longer necessary to add a
`#frame`

driver to get the scene's current animation time, the**Scene Time**node does that instead (bd3bd776c8). - The
*Compare Floats*node has been upgraded to a generalized**Compare**node (1757840843).- The new node can compare most data types, not just floats, even strings.
- Special modes are included for 3D Vectors, to compare directions dot products, lengths, and more.

- Close points on meshes and point clouds can be merged with the
**Merge by Distance**node (ec1b0c2014, 0ec94d5359). - The
*Map Range*node now has a vector data type option (5b61737a8f). - The
*Boolean Math*node has been expanded with more operations (14f6afb090).

### Attributes

- The
**Domain Size**node gives the size of any attribute domain, like the number of vertices in a mesh (35124acd19). - The
*Attribute Statistic*node now has a selection input (1a833dbdb9). - To make naming more intuitive, the
*Transfer Attribute*node geometry input has been renamed from "Target" to "Source" (6a16a9e661). - An new operator on meshes allows converting generic attributes to UV layers or vertex groups, or other generic data types (f6888b530a).
- The operator also makes it possible to change the domain of an attribute on original geometry.
*The operator only works on original geometry, so the geometry nodes modifier must be applied*

### Instances

- Instances now support dynamic attributes (97533eede4, 15ecd47b96, ba8dd0f24f).
- Attributes are propagated in the
*Realize instances*node, including special handling for the`id`

attribute (f5ce243a56). - Instances attributes are propagated in the
*Instance on Points*and*Instances to Points*nodes (221b7b27fc, 386b112f76). *Geometry Nodes instance attributes are not usable in shader nodes in 3.1.*

- Attributes are propagated in the
- Real geometry can be converted to an instance with the
**Geometry to Instance**node (565b33c0ad). - Instances can be removed directly in the
*Delete Geometry*node (a94d80716e).

### Meshes

- The
**Dual Mesh**node transforms a mesh's faces into vertices and vertices into faces (d54a08c8af). - The
**Extrude Mesh**node makes it possible to extrude vertices, edges, and faces (95981c9876). - Various nodes have been added to give basic access to mesh topology information.
**Vertex Neighbors**gives access to the number of vertices and faces connected to each vertex (2814740f5b).**Face Neighbors**gives access to each face's vertex count and the number of faces connected by an edge (2814740f5b).**Edge Vertices**gives access to edge vertex indices and their positions (2814740f5b).**Edge Neighbors**tells how many faces use each edge (c4cee2e221).

- More new nodes give useful data derived from meshes.
- The
**Face Area**node provides access to the surface area of each of a mesh's faces (2814740f5b). - The
**Mesh Island**node outputs a separate index for each piece of connected vertices in a mesh (069d63561a, 4251455dcd).- There is also an "Island Count" output for the total number of islands in the mesh (87c5423c5e).

- The
**Edge Angle**node gives the angle between the normals of two manifold faces (b7ad58b945).- The node can output the signed angle, to tell when an edge is convex or concave (4d5c08b938).

- The
- The
**Flip Faces**node reverses the normals of selected faces by reversing the winding order of their vertices and edges (c39d514a4e). - The
**Scale Elements**node changes the size of selected groups of faces or edges (d034b85f33). - The
*Triangulate*node now has a selection input to limit the operation to only some faces (abf30007ab).

### Curves

- The
*String to Curves*node has two new outputs (0e86c60c28):- "Line" contains the index of the line in the text layout for every character instance.
- "Pivot Point" gives a position relative to the bounding box of each character.

- The
*Resample Curve*node now has a selection input for only affecting certain splines (a7672caeb2). - The
*Curve Parameter*node is renamed to*Spline Parameter*and now has a length output in addition to "Factor" (0c6b815855). - The
*Set Handle Position*node has a new "Offset" input like the*Set Position*node (3fe735d371). - The number of control points in a spline is now included in the
*Spline Length*node (88e9e97ee9). - The
*Set Spline Type*node has a better conversion from NURBS to Bézier splines (a84621347d). - The
*Curve Handle Positions*node now has a toggle to output the position relative to the corresponding control point (38c7378949).

### Primitives

- A new
**Arc**curve primitive is similar to the*Curve Circle*primitive, but can create an incomplete circle (cc1a48e395). - The
*Cone*and*Cylinder*mesh primitives now have selection outputs for the top, side, and bottom sections (431524aebc). - The
*Star*curve primitive node has a selection output for the outer points (3fe735d371).

### Spreadsheet Editor

- Volume grids are now listed in the spreadsheet, including the grid name, data type, and class (ccead2ed9c).

# Node Editor

The nodes editor has a new context-aware search menu when dragging links, and significant performance improvements for large node trees, with fewer unnecessary updates than before.

- When dragging a node link over empty space, a new search menu allows quickly connecting a node with a compatible socket (11be151d58).
- The execution time for nodes can be displayed above nodes (Geometry nodes only) (e4986f92f3).
- Performance for large node trees has been improved, and unnecessary updates have been removed.
- Editing a node tree causes fewer unnecessary updates than before (7e712b2d6a).
- Inserting reroutes and changing nodes that aren't connected to the output don't trigger updates.
*Some unnecessary updates still happen when a driver is used.*

- Displaying large node trees with many nodes in the node editor can be almost twice as fast (0129178376).
- Editing and undo with large node trees should be generally faster (dbbf0e7f66, bdbd0cffda).

- Editing a node tree causes fewer unnecessary updates than before (7e712b2d6a).
- Node selection inside Frame nodes has been fixed/improved (1995aae6e3).