This is an extension of 131404a1bd. The inferencing time is now down
to 4-5ms from 24ms originally.
Further improvements are likely possible. Especially, caching the results
can be very beneficial, but cache invalidation may not be entirely trivial.
This was found to be a bottleneck in the file from #144756 which has 235
group inputs and 174 group input nodes, which leads to 40,890 sockets.
Most of those are never used, so it's wasteful to add them to the map
of input values.
The inferencing time improved from 24ms to 16ms. Can likely still be
improved more, but that's a good improvement for such a small change
already.
The Curve, Curve::strinfo & EditFont::textbufinfo are now read-only
during evaluation. CharTrans is now used to store some evaluation
options such as wrap/overflow/smallcaps.
Since it's no longer possible to inspect evaluation flags from operators
without evaluating the curve, line beginning/end functionality has been
moved from the operator into vfont_to_curve.
This patch generalizes node tree subtypes to be usable for node trees
other than Geometry Nodes. In particular, this:
- Renames SpaceNode.geometry_nodes_type to node_tree_sub_type, which now
store a tree type-specific enum.
- Renames SpaceNode.geometry_nodes_tool_tree to selected_node_group,
which now stores any context-less tree of any type.
This breaks the python API due to renaming.
Pull Request: https://projects.blender.org/blender/blender/pulls/144544
This patch introduces a new Jitter option for the Sun Beams mode of the
Glare node. If non-zero, is uses an approximation that is faster to
compute but makes the result more noisy.
Internally, this is computed by reducing the number of samples used to
integrate the results and introducing a random offset during
integration.
Pull Request: https://projects.blender.org/blender/blender/pulls/141789
This patch unifies the Gamma node across editors:
- Compositor now uses the Shader Gamma node implementation.
- Geometry Nodes also uses the node as a new addition.
- UI-wise in the Compositor, only socket labels change to "Color".
Forward compatibility is broken for the compositor, and the python API
changed, since the node's ID name is now ShaderNodeGamma as opposed to
CompositorNodeGamma.
Pull Request: https://projects.blender.org/blender/blender/pulls/142414
The semantics of checking "has_value()" (etc.) are much better than
checking for an empty span when dealing with the result of an attribute
lookup. This mainly affects the Bezier curve handle position attributes
currently. Plenty of places assume those attributes exist now. In a
couple places the code is a bit safer now, otherwise it's just a bit
more obvious.
Pull Request: https://projects.blender.org/blender/blender/pulls/144506
The compositor crashes when attempting to read an EXR layer called Alpha
from a multi-layer EXR file. This is because Blender exposes an extra
output in the Image node called Alpha, which is not a real pass, but is
derived from the combined pass. So, this special case conflicts with an
actual pass called Alpha.
To fix this, we only consider the special case if the pass name is the
combined pass.
Pull Request: https://projects.blender.org/blender/blender/pulls/144498
Previously, we always just used `int` when dealing with menu values on the C++
side. It's currently the only type where we have the same base type (`int`) for
two different socket types (integer and menu sockets). This has some downsides:
* It requires special cases in some places.
* There is no function from static base type to socket type (which is useful for
some utilities like `SocketValueVariant`).
* It implicitly allows operations on menu values that shouldn't be allowed such
as arithmetic operations and conversions to and from other types.
This patch adds a new `MenuValue` type that is used for menu sockets in Geometry
Nodes and the (CPU) Compositor, clarifying the distinction between integer and
menu values.
Pull Request: https://projects.blender.org/blender/blender/pulls/144476
This follows the other CMake "modernization" commits, this time for
`bf_intern_openvdb` and the OpenVDB dependency itself.
The difference with this one is that `intern/openvdb` becomes an
"optional" dependency itself. This is because downstream consumers often
want to include this dependency rather than openvdb directly, so this
target must also be optional. Optional, in this case, means the target
always exists but may be entirely empty.
Summary
- If you are using BKE APIs to access openvdb features, then use the
`bf::blenkernel` target
- If you are only using `intern/openvdb` APIs then use the
`bf::intern::optional::openvdb` target (rare)
- For all other cases, use the `bf::dependencies::optional::openvdb`
target (rare)
context: https://devtalk.blender.org/t/cmake-cleanup/30260
Pull Request: https://projects.blender.org/blender/blender/pulls/137071
This type was the same for every socket type supported by Geometry Nodes.
It's always `SocketValueVariant` now. Therefore, it was unnecessary to s
tore an explicit pointer to it.
Pull Request: https://projects.blender.org/blender/blender/pulls/144458
This patch extends the support for menu sockets in the compositor to
also include pixel nodes. Menu sockets are not yet used in any node, so
this has no apparent effect.
Pull Request: https://projects.blender.org/blender/blender/pulls/144436
This simplifies the bake API used by Geometry Nodes by using `SocketValueVariant`
instead of raw pointers. This is possible now, because all socket types use
`SocketValueVariant` under the hood.
Pull Request: https://projects.blender.org/blender/blender/pulls/144410
Now that every socket type uses `SocketValueVariant` since #144355, the
parameter access code can be simplified a bit.
This also adds a new `GeoNodesMultiInput<T>` type that's used to access the list
of inputs value multi-input sockets.
Pull Request: https://projects.blender.org/blender/blender/pulls/144409
The File Output node does now allow empty names for its sockets, so
doing things like flat RGBA pass in an unnamed layer is impossible,
which was possible before the recent redesign of the node. To allow
this, socket items accessors now have an option to allow empty names.
Implementation wise, the non-default variant of BLI_uniquename_cb was
used to make the empty name replacement optional. Incidentally, the new
function is more CPP friendly, so the MAX_NAME length limitation was
lifted.
Pull Request: https://projects.blender.org/blender/blender/pulls/144334
This is similar to #144199. It needs a few more changes because more places
handle geometries in a special way compared to data-block sockets.
It might be that there are more usages of `GeometrySet` as value for geometry
sockets instead of `SocketValueVariant`. Unfortunately, there isn't really an
automated way to find these. So far I found all the places that needed fixing
through tests.
This is the last socket type that did not use `SocketValueVariant` yet. So
afterwards, it's likely possible to simplify a bunch of code to use
`SocketValueVariant` instead of `void *`.
Pull Request: https://projects.blender.org/blender/blender/pulls/144355
The fix is to detect when the compute context is recursive and to stop the
search early in that case. Currently, this does not generate a warning. There
will be a warning when trying to evaluate the recursive closure though.
Pull Request: https://projects.blender.org/blender/blender/pulls/144330
Use `SocketValueVariant` for all the data-block types as well. Before it was
used for e.g. float, integer and menu sockets.
The only remaining type afterwards is the geometry socket which will be moved
separately.
Using `SocketValueVariant` for all socket types will simplify code later on and
also removes the need for dealing with raw memory in more cases.
Pull Request: https://projects.blender.org/blender/blender/pulls/144199
I'm not sure why the edge domain was handled differently than the other
domains with regards to attributes on unexpected domains. Now use a
simpler more consistent solution that removes invalid selection
attributes before they're used at all.
This patch redesigns the File Output node to provide better UX and UI.
This is mainly achieved by allowing the user to create inputs by
dragging into an Extend socket and adjust existing inputs using the
familiar UI list design available in Blender. Additionally, various UI
changes were done:
- The Use Node Format option was renamed to Override Node Format for
clarity.
- Socket types are now fixed and do not change as new links are made,
allowing users to specify the exact output type and employ implicit
conversion if needed.
- The distinction between images and Multi-Layer EXR was made clearer.
- Final output paths are drawn in the UI to remove guess work.
- The Base Path was split into a Directory and a File Name.
- Panels were added to group options, include a panel for the node
format, items, and item formats.
Pull Request: https://projects.blender.org/blender/blender/pulls/141091
This patch improves warnings displayed when the user attempts to use
passes in render engines other than EEVEE with the viewport compositor.
Previously, an error icon was always displayed if the viewport
compositor was in use as well as a viewport overlay text. This error
existed even when the render engine was set to EEVEE and even if the
passes are not actually used, which was always confusing for users.
This patch improves this by only displaying the error when a pass is
actually used and when a non-EEVEE render engine is used.
This is implemented internally as an extra info callback for the node.
And the compositor_unsupported_message member hack was removed.
Pull Request: https://projects.blender.org/blender/blender/pulls/144005
The Keying node asserts if its input is single value or not connected.
This is due to a typo when getting the input, where the output was used
instead.
The morphology operations in the Keying node in the compositor can no
longer do erosion by using negative Feather and Dilate inputs. Clamping
to positive values was accidentally done when porting options to inputs,
so this patch fixes this by removing the clamping.
Output nodes typically don't have a preview (see also ed13dad0). Also,
it is not clear what should be shown as a preview, especially when the
file output node can have an arbitrary number of inputs of different
types.
This commit removes the preview for the File Output node.
Pull Request: https://projects.blender.org/blender/blender/pulls/144029