Commit Graph

5919 Commits

Author SHA1 Message Date
Jesse Yurkovich
0240a1f32f Cleanup: CMake: Modernize bf_intern_openvdb dependencies
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
2025-08-12 21:26:38 +02:00
Jacques Lucke
cea51d82be Refactor: Geometry Nodes: remove bNodeSocketType::geometry_nodes_cpp_type
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
2025-08-12 20:09:52 +02:00
Mohamed Hassan
ce7759bae6 Compositor: Removing Sun Beams node
This patch removes the Sun Beams node since it is now part of the
Glare node. It is versioned using a Glare node of Sun Beams type.

Pull Request: https://projects.blender.org/blender/blender/pulls/144110
2025-08-12 19:53:54 +02:00
Jacques Lucke
69cf5e1ad7 Refactor: Geometry Nodes: use SocketValueVariant to get value from socket
This moves us closer to removing `geometry_nodes_cpp_type` which is
always `SocketValueVariant` now.

Pull Request: https://projects.blender.org/blender/blender/pulls/144445
2025-08-12 19:11:05 +02:00
Habib Gahbiche
d485c2a6d0 Fix: Compositor: Wrong tooltip for Crop Node 2025-08-12 15:36:50 +01:00
Jacques Lucke
951d2d2b3a Refactor: Geometry Nodes: use SocketValueVariant instead of raw pointers
Refactor to get us closer to being able to remove `bNodeSocketType::geometry_nodes_cpp_type`
which is always `SocketValueVariant` now.

Pull Request: https://projects.blender.org/blender/blender/pulls/144419
2025-08-12 16:03:09 +02:00
Omar Emara
d2d77a38a1 Compositor: Allow menu sockets for pixel nodes
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
2025-08-12 15:36:48 +02:00
Jacques Lucke
fbd29acaa2 Cleanup: Geometry Nodes: avoid unnecessary void pointer
All socket types use `SocketValueVariant` now, so using `void *` is not necessary anymore.

Pull Request: https://projects.blender.org/blender/blender/pulls/144415
2025-08-12 09:12:08 +02:00
Omar Emara
8d1e26865d Compositor: Support strings sockets
This patch adds support for String sockets in the compositor. The
sockets are not yet used anywhere, but are added to aid development.

Pull Request: https://projects.blender.org/blender/blender/pulls/144327
2025-08-12 08:54:13 +02:00
Jacques Lucke
fa7b8b8532 Cleanup: GeometryNodes: avoid unnecessary void pointer
Pull Request: https://projects.blender.org/blender/blender/pulls/144412
2025-08-12 08:19:40 +02:00
Jacques Lucke
7c5f7434f2 Refactor: Geometry Nodes: use SocketValueVariant in bake api
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
2025-08-12 07:59:18 +02:00
Jacques Lucke
d9410660ca Refactor: Geometry Nodes: simplify parameter access
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
2025-08-12 07:45:03 +02:00
Campbell Barton
5a22993253 Cleanup: remove redundant parenthesis 2025-08-12 13:32:01 +10:00
Campbell Barton
1dd1073166 Cleanup: sort CMake file lists 2025-08-12 10:24:31 +10:00
Hans Goudey
429dc0920c Fix #144362: Match string node crash after recent change
Caused by 76a861ab41
That commit used the wrong order internally for the "Operation" input.
2025-08-11 11:37:13 -04:00
Omar Emara
f1fb7171f1 Cleanup: Remove unused type handing in File Output node
The File Output node handles types that are not supported by the node,
so it is essentially dead code that can be removed.

Pull Request: https://projects.blender.org/blender/blender/pulls/144367
2025-08-11 17:34:27 +02:00
Omar Emara
c7b77b2b9f Compositor: Allow empty names in File Output node
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
2025-08-11 16:49:24 +02:00
Jacques Lucke
38f5e1f763 Refactor: Geometry Nodes: use SocketValueVariant for geometry sockets
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
2025-08-11 15:18:08 +02:00
Clément Foucault
7a97105b28 GPU: Remove wrapper type for gpu::StorageBuf
This is the first step into merging DRW_gpu_wrapper.hh into
the GPU module.

This is very similar to #119825.

Pull Request: https://projects.blender.org/blender/blender/pulls/144329
2025-08-11 10:35:53 +02:00
Jacques Lucke
eb73729e67 Fix #144314: crash when syncing sockets with recursive closures
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
2025-08-11 10:03:21 +02:00
Jacques Lucke
f6ee7e13b2 Fix: Geometry Nodes: wrong data-block default values
This was missing from #144199.
2025-08-11 09:49:10 +02:00
Clément Foucault
9fbf7e9ec2 GPU: Remove wrapper type for gpu::UniformBuf
This is the first step into merging `DRW_gpu_wrapper.hh` into
the GPU module.

This is very similar to #119825.

Pull Request: https://projects.blender.org/blender/blender/pulls/144328
2025-08-11 09:46:45 +02:00
Clément Foucault
1388a70914 GPU: Remove wrapper type for gpu::Shader
This is the first step into merging DRW_gpu_wrapper.hh into
the GPU module.

This is very similar to #119825.

Pull Request: https://projects.blender.org/blender/blender/pulls/144229
2025-08-11 09:34:28 +02:00
Jacques Lucke
b37fa3f7db Cleanup: remove duplicate assignment 2025-08-11 08:57:56 +02:00
Jacques Lucke
c8507ed375 Refactor: Geometry Nodes: use SocketValueVariant for data-block types
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
2025-08-11 08:53:47 +02:00
Jacques Lucke
496eb15f21 Fix: Geometry Nodes: fix using constexpr if
MSVC needs the `else` to avoid compiling the rest of the function if it can't be reached.

This is merged from #143171.
2025-08-11 07:42:58 +02:00
Hans Goudey
e0170883d4 Fix #144126: Set Selection node can still fail with incorrect domain
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.
2025-08-10 09:11:36 -04:00
Jacques Lucke
24c4e0a3f7 Geometry Nodes: move bundle and closure nodes out of experimental
This moves the bundles and closures features out of experimental,
making them an official part of Blender 5.0.

Also see #134029.

Pull Request: https://projects.blender.org/blender/blender/pulls/143750
2025-08-08 13:48:02 +02:00
Hans Goudey
5deb4b66ed Cleanup: Avoid copying strings in compositor file output node
StringRef or StringRefNull should be used unless the string actually
needs to be copied.

Pull Request: https://projects.blender.org/blender/blender/pulls/144156
2025-08-08 13:36:41 +02:00
Campbell Barton
53cae68ee8 Cleanup: hyphenate the term data-blocks in strings/doc-strings 2025-08-08 08:47:13 +10:00
Campbell Barton
cccc2c77c5 Cleanup: consistent for C-style comment blocks 2025-08-08 07:37:33 +10:00
Omar Emara
68dc278fe5 Compositor: Redesign File Output node
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
2025-08-07 14:46:34 +02:00
Omar Emara
d84d779661 Compositor: Improve unsupported passes warning
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
2025-08-07 12:18:06 +02:00
Omar Emara
74e23b1c36 Fix: Assert in Keying node with no input
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.
2025-08-07 12:14:36 +03:00
Omar Emara
28e59d3e36 Fix #144070: Keying morphology can not do erosion
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.
2025-08-07 11:56:10 +03:00
Campbell Barton
558d1c4774 Cleanup: use the suffix "_maxncpy" instead of "_len" for string sizes
The term "_len" is too easily confused with the strlen(),
excluding the nil byte.
2025-08-07 06:18:21 +10:00
Jacques Lucke
d1d07876c6 Fix: Geometry Nodes: wrong structure types in a couple of nodes
This mainly changes field sockets to dynamic and vice versa in a few cases.
2025-08-06 21:37:44 +02:00
Habib Gahbiche
0b77aec780 Compositor: remove preview for File Output node
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
2025-08-06 17:15:23 +02:00
Omar Emara
c3688f7bb7 Fix #136939: Translation is ignored in some nodes
The compositor ignores translation in certain nodes like Corner Pin.
Users find this unexpected as adjusting the translation of the input has
no effect on the output. The only alternative logical thing to do if
translation exists is to clip the image, which this patch do.

This affects the following nodes:

- File Output.
- Map UV (Image input).
- Corner Pin.
- Plane Track Deform.
- Bokeh Blur (Bokeh Kernel input).

Pull Request: https://projects.blender.org/blender/blender/pulls/144049
2025-08-06 13:46:34 +02:00
Omar Emara
77bb71d8da Fix: Wrong structure type for Transform node output
The output of the Transform node in the compositor has a single value
structure type, while it should be dynamic.
2025-08-06 12:33:44 +03:00
Omar Emara
32acd9dfa5 Fix #143925: File Output writes single values for Multi-Layer EXR
The File Output node writes single value images for Multi-Layer EXR,
while it should skip such cases.

Pull Request: https://projects.blender.org/blender/blender/pulls/143990
2025-08-05 16:18:24 +02:00
Damien Picard
5998795aa6 UI: Replace contractions with long-form text
Avoid using contractions for can't, aren't, doesn't, and shouldn't.
Following the writing style guide in the Human Interface Guidelines.

Pull Request: https://projects.blender.org/blender/blender/pulls/143852
2025-08-05 11:16:22 +02:00
Benjamin Beilharz
570f44a059 Compositor: Extension modes for corner pin mode
This commit introduces the extension modes to the corner pin node and
further streamlines the node properties by wrapping all props in the node
storage. Therefore, the interpolation mode has been removed from the
custom properties of the node and moved into the node storage.

Right now, the extension modes only work for non-anisotropic filtering.

Pull Request: https://projects.blender.org/blender/blender/pulls/141570
2025-08-05 11:12:54 +02:00
Omar Emara
264a316984 Fix #141173: Inpaint node inconsistent on GPU
The Inpaint node produces inconsistent results across different GPUs,
where it produces different results on Intel Windows GPU platforms. This
is due to a mismatch between the precision declared for the shader and
that of the allocated textures. To fix this, we make sure the shader
uses the same precision as the allocates results.

Pull Request: https://projects.blender.org/blender/blender/pulls/143793
2025-08-05 09:45:34 +02:00
Tenkai Raiko
de9b24abad Fix: Map UV node does not work with single values
The Map UV node does not work when the UV input is a single value, where
it is expected that the output will also be single value. This was
simply not implemented for GPU, so this patch does that.

Pull Request: https://projects.blender.org/blender/blender/pulls/143096
2025-08-05 08:09:25 +02:00
Jacques Lucke
2c435ce8df Fix #141469: Geometry Nodes: use safer approach to modifying each instance geometry
Many nodes operate on all the instances that are passed into them. For example,
the Subdivision Surface node subdivides the mesh at the root but also instanced
meshes. This works well for most nodes, but there are a few nodes were the old
`modify_geometry_sets` function was not very well defined and it was tricky to
use correctly.

The fundamental problem was that the behavior is not obvious when a node creates
or modifies instances and how those are integrated with the already existing
instances.

This patch solves this with the following changes:
* Remove the old `GeometrySet::modify_geometry_sets` and related
  `*_during_modify` methods.
* Add a new `blender::geometry::foreach_real_geometry` function that is similar
  to the old `modify_geometry_sets` but has a more well-defined interface:
  * It never passes instances into the callback. So existing instances can't be
    modified with it.
  * The callback is allowed to create new instances. This will automatically be
    merged back with potentially already existing instances. The callback does
    not have to worry about accidentally invalidating existing instances like
    before.
* A few existing usages used `modify_geometry_sets` to actually modify existing
  instances (usually just removing attributes). Those can't use the new
  `foreach_real_geometry`, so they just get a custom simple recursive
  implementation instead of using a generic function.

Pull Request: https://projects.blender.org/blender/blender/pulls/143898
2025-08-05 06:25:20 +02:00
Jacques Lucke
8133f7aa13 Fix: crash due to wrong duplicate node name handling
Generally, node names are expected to be unique within a node tree. However,
`ntree_shader_copy_branch` currently does not enforce this for performance
reasons. This was broken by recent changes in 5b73f798d0 and 9fd877e174 which
allows for passing already unique names and identifiers to the node copy
function.

The main problem here was that the `use_unique` parameter of the `node_copy`
function was not well defined. Now, this function is completely removed in favor
of using `node_copy_with_mapping` directly. This also has a new
`allow_duplicate_names` parameter now which makes the expected behavior more
explicit.

Pull Request: https://projects.blender.org/blender/blender/pulls/143951
2025-08-04 19:57:43 +02:00
Jacques Lucke
72e810a45a Geometry Nodes: put closure sockets in panel
This moves the closure interface sockets into a separate panel so that they
can't be confused with the main closure input.

Pull Request: https://projects.blender.org/blender/blender/pulls/143821
2025-08-04 18:35:20 +02:00
Hans Goudey
74a2211f95 Geometry Nodes: Increase parallelism in Geometry Proximity node
The default grain size of 10000 for multi function execution was much
too large for the fairly expensive BVH traversal. In the file from
#143455, reducing te grain size to 512 increase the playback FPS from
8 to 20.
2025-08-03 11:18:59 -04:00
Hans Goudey
e59fb784ff Geometry Nodes: Use standard node width for face neighbors node 2025-08-03 10:03:30 -04:00