Node Expressions

by Balding Wizard in Surfacing


Update 17-Oct-2021

Includes the latest 2.00 alpha version currently under development, providing compatibility with Blender 2.92+/3.00 features and support for expressions in Compositor and Geometry Nodes node trees.

Update 25-Mar-2022

Uploaded a patched version (MathsExpressionBlender28.2.00b-pre-alpha_2022-03-25_3.1+.zip) for compatibility with Blender versions 3.1 and 3.2 in Shader and Compositor node editors. I've been working on getting this also included in Geometry Nodes but there have been significant changes to the Geometry Node Editor that are causing some problems/crashes - so I've temporarily disabled the support for Geometry Nodes for now.


Does this work with Eevee/Cycles/Blender Internal

Yes - the add-on works with Eevee, Cycles and Blender Internal

How about for Compositor/Geometry Node node trees?

The latest version (2.00 alpha - currently under development) provides support for mathematical and vector expressions in the Compositor and Geometry Nodes node trees.

Why two download files?

There are a number of incompatible differences between Blender 2.8 and earlier versions. The add-on is provided in two versions - one for Blender 2.8 and one for Blender versions 2.7x - simply choose the version appropriate to your version of Blender.

Is there a limit to how complicated an expression I can enter?

Effectively, no - only the natural limits of the Blender node editor. For a complicated example of what can be achieved, see the Fish Scale example in the documentation section.

Is there anywhere I can go for more information?

Yes - see https://baldingwizard.wixsite.com/blog/node-expressions for more information and tutorials.

What changes have been applied at each 'version'

The add-on is always evolving and being improved and each change is flagged with a "version number", visible in the filename of the installation file and add-on properties page in the Blender Preferences Add-ons page. The major differences and improvements are listed here :

2.00 alpha 17/10/2021
Make compatible with Blender versions 2.92+ and 3.00 and added support for Compositor and Geometry Node trees. Note that this version is still being developed and is an 'alpha' version, subject to change and still being improved.

1.33 27/08/2020
Make compatible with Blender version 2.83 (in particular, the new '4D' capabilities of the texture nodes (Noise, Musgrave, etc.)).

1.32 29/5/2020
Make compatible with Blender version 2.82 (some of the new Maths nodes functionality had broken the building of the expression).

1.31 19/10/2019

Add info popup for contact/feedback/acknowledgement.

1.30 04/10/2019
Drastically improve performance when adding a new node, implement 'image(...)' for Image Texture node, implement 'mix(fac, c1, c2)', improve changing types of output sockets (eg, when changing from 'Output' to 'Output[]'), improve options in some presets (eg, Hexagons).

1.29 13/09/2019

Implement 'include "TEXT:....' functionality to allow text to be imported from separate text blocks. This allows, for example, functions to be defined in a separate block and then used in your expression as a library.

1.28 04/09/2019
Implement 'inputs(...)' and 'outputs(...)' which specify which variables should be visible outside of the new group node - provided as an alternative to having to prefix 'internal' variables with '_'. Implement point(...) for Point Density function. Implement constants as "pi" and "e" quoted strings.

1.27 24/07/2019

Minor fixes to 'mix4' and 'hexagon' presets. Revamp processing of 'hidden' variables to avoid causing conflicts while simultaneously previewing/rendering - as part of this the node tree now contains labelled Reroute nodes for intermediate sub-expressions. Enhance node layout to improve with variable sized nodes. Amended documentation to fix typos in 'Special Variable' sections. Disable nodes for all materials while updating group to avoid conflicts with previewing/rendering to improve stability. Significant performance increase for laying out the nodes of very large node groups.

1.26 08/07/2019
Improved handling of small groups and value nodes.

1.25 06/07/2019
Added extended modes to 'voronoi' function (crackle, closest1, closest2, etc.) for Blender 2.8. Improve placing of newly added node by allowing it to be placed with the mouse.

1.24 08/06/2019
Improved 'undo' support and added 'colorramp(...)' function. Fix problem with negative 'default' values.

1.23 31/05/2019
Added 'musgrave(...)' and 'voronoi(...)' functions and sub-functions and allow sub-groups to be defined and used (see new Mandelbulb preset). Also added new presets for Normal Distribution, Blend and Spirals (2d and 3d).

1.22 18/05/2019
Tidy up opening of documentation window and grouping (group nodes now named based on sub-expression) and optimise tree by merging Value nodes into connected sockets.

1.21 16/05/2019
Optimise generated groups, fix bug in grouping

1.20 15/05/2019
Create a separate group per sub-expression to improve readability and efficiency.

1.19 30/04/2019
Added vmult and vdiv functions and refine selection of active node tree

1.18 26/04/2019
Added additional functions (noise, clamp/clip, vadd, vsub, vdot, vcross, vnorm, fract, ceil, floor)

1.17 23/04/2019
Fix bug in expressions for negative values (eg, "x/-y"), support 'special' input variables ('Input.XXX', etc.), fix bug in using Shift+A shortcut

1.16 23/04/2019
Add checking to presets build and fix problems with operator precedence

1.15 19/04/2019
Allow presets to include "options" where the user can decide which features to enable/disable

1.14 08/04/2019
Allow 'presets' to be imported directly into a text block for viewing/editing

1.13 06/04/2019
Implement 'presets'

1.12 06/04/2019
Refine checks to enable operators only if valid node tree

1.11 05/04/2019
Implement vector combine and split functionality

1.10 29/03/2019
Bug fixes, optimize generated node tree, allow expression to be sourced from text block

How do I work with Vectors

You can specify that an input is specifically a *vector* by adding a suffix of '[]'. For example, to set an output as a vector you could use 'MyVector[] = combine(x,y,z)'. You use the same method to indicate that an input is a vector (eg, 'DotProduct = vdot(InputVector[], Input.Normal)') or you can reference a specific 'channel' of a vector using '[x]', '[y]', '[z]' (although you can also use '[r]', '[g]', '[b]' or '[0]', '[1]', '[2]' for convenience).

Choose a product version:

Sales 500+
Customer Ratings 9
Average Rating
Dev Fund Contributor
Published about 5 years ago
Blender Version 2.7x, 2.77, 2.78, 2.79, 2.8, 2.81, 2.82, 2.83, 2.9, 2.91, 2.92, 2.93, 3.0, 3.1
License Royalty Free
Have questions before purchasing?

Contact the Creator with your questions right now.

Login to Message