This adds a new simple node which retrieves the X, Y or Z component of a vector
by index. This is simpler and more efficient than using workarounds like using a
Separate XYZ with an Index Switch node.
The original motivation for this node came from #149091 where we wanted to
support this using expressions (`vector[i]`).
Co-authored-by: Tibo Stans <stanstibo@gmail.com>
This patch adds support for Bundles in the compositor. This is mostly a
direct port of the Geometry Nodes code, except the compositor uses the
BundleItemInternalValueMixin mechanism for storing results in bundles.
The Result free function now resets the single value just like CPU/GPU
buffers since bundles are stored in the single value needs to be freed.
The Join Bundle and Get Nested Bundle Paths are not yet implemented
because they require lists.
Pull Request: https://projects.blender.org/blender/blender/pulls/162333
Shader Nodes
- Split Bundle and Closure nodes in their own subsections.
Geometry Nodes
- Reorder certain nodes.
- e.g. `Bone Info`, `Is Edge Smooth`, `Gamma`, `Implicit Conversion`
- Create subsection for tool-specific `Geometry > Read` nodes.
- e.g. `Active Element`, `Selection`
- Create subsection for switch nodes.
- Split the Bundle menu into multiple subsections.
Compositor
- Reorder `Mask to SDF` & `Implicit Conversion`
- Create subsection for switch nodes.
- Make order of `Utilities` submenus consistent with Geometry Nodes.
Pull Request: https://projects.blender.org/blender/blender/pulls/154596
This patch implements the Matrix SVD for the compositor, which mostly
involves doing a GPU implementation for the node. The implementation
tries to match Eigen::JacobiSVD as much as possible for consistency
between CPU and GPU.
Pull Request: https://projects.blender.org/blender/blender/pulls/159891
This patch adds `Set String Case` to the Compositor Add/Swap menus.
When it was made, compositor functionality was already supported, but it
wasn't exposed in the menus.
No changes to the node's functionality have been made.
Pull Request: https://projects.blender.org/blender/blender/pulls/160940
This path adds support for the Compare node from Geometry Nodes to the
compositor.
The node currently ignores alpha during color comparisons, and we might
want to change this to be more useful in the compositor in the future if
agreed by the Geometry Nodes module.
Pull Request: https://projects.blender.org/blender/blender/pulls/159653
This patch replaces the Switch node in the compositor with the Switch
node from Geometry Nodes. The node gained a new type input. The old node
was marked deprecated and will be removed in a future version.
Pull Request: https://projects.blender.org/blender/blender/pulls/158744
Add a Reverse String node, which reverses the given input string.
This could be done previously with a repeat zone, but a built-in
node is much more performant, for this somewhat common operation.
Pull Request: https://projects.blender.org/blender/blender/pulls/158387
This patch adds support for Rotation sockets as well as existing nodes
from Geometry Nodes. This includes the Rotate Vector, Invert Rotation,
Rotation to Euler, Euler to Rotation, Rotate Rotation, Rotation to Axis
Angle, Axis Angle to Rotation, Mix Rotation, Rotation to Quaternion,
Quaternion to Rotation, Align Rotation to Vector, and Axes to Rotation
nodes.
Pull Request: https://projects.blender.org/blender/blender/pulls/154845
This patch exposes string nodes from Geometry nodes to the compositor.
This includes the Input String, Format String, Match String, Replace
String, Slice String, Trim String, Find In String, String Length, String
To Value, Value To String, and the Input Special Characters nodes.
Pull Request: https://projects.blender.org/blender/blender/pulls/153201
This patch ports the Object Info node from Geometry Nodes to the
compositor. Only the relevant inputs/outputs/options are available for
the compositor. The rotation output is not enabled for now, but will be
once !154845 lands.
Pull Request: https://projects.blender.org/blender/blender/pulls/156428
Follow-up to c01b317f14
Initialize new math node with reasonable defaults depending on the
operation.
## Defaults:
### 1st and 2nd input defaults to 1:
- Multiply
- Multiply Add
- Power
- Truncated modulo
- Floored modulo
- Modulo
- Artan2
### 1st and 2nd input defaults to 0:
- Add
### 1st input defaults to 1, 2nd to 0:
- Subtract (`1 - x` are more common for subtraction)
### 2nd input set to 1, 3rd input defaults to 0:
- Multiply Add
Pull Request: https://projects.blender.org/blender/blender/pulls/155879
This patch adds a new Blank Image node. The node simply returns an image
with the given size and constant color. The primary use cases are
procedural generations, convolution and bokeh kernel generation, and
image concatenations.
Pull Request: https://projects.blender.org/blender/blender/pulls/155466
This patch ports the matrix math nodes that exist in Geometry Nodes to
the compositor. This is still missing the nodes that has rotation
sockets because they still do not exist in the compositor. The matrix
SVD node is not yet implemented either.
Pull Request: https://projects.blender.org/blender/blender/pulls/155630
This patch makes the Active Camera and Camera Info nodes from Geometry
nodes available in the compositor. This also exposed the object socket
as the first user for it.
Pull Request: https://projects.blender.org/blender/blender/pulls/155616
Input "Constant" nodes for missing socket data types:
- `Font` ID data blocks
- `Menu` enum values
The Font input node is initialized with the default font, just like font
input sockets generally are.
Co-authored-by: Sergey Sharybin <sergey@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/154318
- In the context of nodes, a constant value. This is a menu that
existed already in Geometry Nodes, and was added recently in
compositing.
- In the context of the Generated F-curve modifier, a constant value
as a basis for a polynomial expression.
Reported by Satoshi Yamasaki in #43295.
Simple generic type conversion nodes that implicitly convert the input
to a specific data type.
These nodes are conceptually similar to _Reroute_ nodes, except with a
fixed, selectable data type. They can be useful for forcing a node
socket to be converted to a given data type, instead of just relying on
the source and target types. This will be needed for improving the
_ungroup_ operator, which can then preserve the behavior of the
original node group interface sockets (#151432).
Pull Request: https://projects.blender.org/blender/blender/pulls/154497
This patch adds a new Mask To SDF node. The node takes in a mask and
performs an euclidean distance transform to compute the distance to the
nearest mask boundary pixel. The distance is negative inside the mask.
The node also returns the integer coordinates of the nearest mask
boundary pixels.
Pull Request: https://projects.blender.org/blender/blender/pulls/140213
This patch adds a new Sequencer Strip Info node to the compositor. The
node returns information about the strip that the compositor modifier is
applied on, like the Start and End frames as well as its transform. This
node is only supported in the context of the sequencer and will return
default values otherwise.
Pull Request: https://projects.blender.org/blender/blender/pulls/147855
The Radial Tilling node crashes in the compositor in GPU mode. This is
because the compositor does not yet support 2D vectors in shader code
generation, but properly supports and expects them in the interface,
which the Radial Tilling node declares. This results in a bad shader
which crashes Blender.
To properly fix this, we need to:
- Support 2D vectors in compositor GPU material shader code generation.
- Support 2D vectors in shader node GPU stack construction.
- Adjust the interface of radial tilling to actually use 2D vectors.
This seems risky for 5.0, so this patch temporarily drops support for
the node in the compositor in 5.0. Then once 2D vectors are supported,
it can be enabled again.
Pull Request: https://projects.blender.org/blender/blender/pulls/147627
- Add the missing `Vector Math` node to the Compositor add menu.
- Adjust the position of the `Separate XYZ` node in Geometry Nodes.
- Adjust the position of the `Vector Math` node in Shader Nodes.
Pull Request: https://projects.blender.org/blender/blender/pulls/147435
The general idea is to order all menus as:
```
Common categories
(e.g. Input/output)
---
Specific categories
---
Assets
--
Common categories
(e.g. Group/Layout)
```
## Changes:
### Compositor
- Removed Color/Mix submenu
- Moved Vector to Utilities
- New Category: "Creative". This is where most new assets will fit in.
- Moved to Creative:
- Kuwahara
- Pixelate
- Posterize
### Geo Nodes
- Moved 'Vector' to 'Utilities'
- Moved 'Attribute' before 'Geometry'
- Moved 'Material' to 'Geometry'
- Moved 'Color' to top level, grouped with Utilities
### Shader
- Moved 'Vector' to 'Utilities'
- Deleted 'Converter'
- New 'Displacement' menu
- Grouped 'Color' with Utilities (remains top level)
Ref: https://devtalk.blender.org/t/2025-09-05-design-session-node-groups-different-editors/42244
Pull Request: https://projects.blender.org/blender/blender/pulls/146806
Currently, only the visibility of input sockets can be changed dynamically based
on other menu inputs. However, under some circumstances, it can also be useful
to hide certain outputs. For example, the built-in Curve Arc primitive node does
that.
This patch adds support for automatic detection of unused outputs. How to detect
unused outputs is less straight forward compared to inputs. This patch uses the
rule that an output is unused if it always outputs a "fallback value" (typically
0) irrespective of the currently used inputs. If the output is independent of
all inputs, it stays visible though.
There is a new small utility node called "Enable Output". It replaces a value
with it's fallback value unless it is disabled. This simplifies setting up
unused outputs. In theory, a normal switch node can also be used, but that is
less usable and the user will have to hardcode the fallback value for each type
which is not something that is explicitly exposed yet.
Supporting dynamic output visibility is also a prerequisite for exposing some
menu node options as sockets (e.g. in the Arc node).
Pull Request: https://projects.blender.org/blender/blender/pulls/140856
This patch adds a new Compositor modifier that applies a compositing
node group on a sequencer strip. This patch also introduces the concept
of a compositor node tree space subtype, where we now have a Scene and a
Sequencer subtypes. Practically, this just means that node like the
Render Layers node will not be available in the node editor in the
Sequencer subtype.
Future improvements includes:
- The compositor context is recreated on every modifier application,
while it should ideally be persistent somehow to make use of the
compositor static cache. This might require work from the compositor
side by moving the static cache outside of the context and make it
thread safe if needed. See `Render.compositor` for an example on
persistent context.
- GPU execution is not supported. This just needs a GPU context to be
bound before execution, but the tricky part is getting a GPU context.
See `render::Compositor::execute` for an example on bounding a GPU
context and why it is less straight forward.
- Node inputs are not exposed on the sequencer modifier interface. An
approach similar to Geometry Nodes modifier could be used, look at
`update_input_properties_from_node_tree` for reference, but notice
that Geometry Nodes naturally exempt the main Geometry socket because
Geometry inputs can't be exposed, but for the compositor, we will have
to exempt the main Color and Mask sockets manually. !145971
Co-authored-by: Aras Pranckevicius <aras@nesnausk.org>
Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/139634
Implement a native method to swap between different node and zone types.
This implementation repurposes the existing menu definitions as base
classes, from which both an "Add" and a "Swap" version would be generated
from. This allows both menus to have the same layout, but use their own
operators for handling the different node/zone types.
In this PR, support for all node editors has been implemented.
Invoking the menu is currently bound to `Shift + S`, same as the old
implementation in Node Wrangler. Since "Swap" is implemented as a
regular menu, features that menus already have such as type-to-search
and adding to Quick Favorites don't require any extra caveats to
consider.
Resolves#133452
Pull Request: https://projects.blender.org/blender/blender/pulls/143997