Commit Graph

154716 Commits

Author SHA1 Message Date
Brady Johnston
56bb70fee8 Geometry Nodes: Advect Grid node
Given a grid of velocities, this node advects the values of the input
grid. Different options for integration scheme and clamping are
exposed. Currently their names are just as defined in OpenVDB.

Pull Request: https://projects.blender.org/blender/blender/pulls/147273
2025-10-07 16:19:19 +02:00
Lukas Tönne
abba67fd79 Fix #147283: Socket lookup by index fails when the node group is missing
The link-insert operator was doing index lookup for node socket declarations
based on the `bNodeSocket` index, which fails when the node group data block
is missing. The safe approach to this is to use the existing declarations and
look up the node socket from that.

Pull Request: https://projects.blender.org/blender/blender/pulls/147528
2025-10-07 16:18:34 +02:00
Bastien Montagne
a6cea64b3a Fix #147461: Implement packed data support for generic ID copy-paste.
Adding support for packed IDs in the PartialWriteContext was completely
missed in initial work...

This somewhat complexifies the handling of libraries in
PartialWriteContext, as packed IDs need to be handled in specific ways.

It also exposes `bke::library::ensure_archive_library` as a public function,
to avoid duplicating this complex logic of finding or creating a new
archive library for a given ID.

Finally, prevent attempts to copy a packed ID for now, as pasting them
is not supported (linking/appending these directly is not supported).

Pull Request: https://projects.blender.org/blender/blender/pulls/147468
2025-10-07 16:11:47 +02:00
Lukas Tönne
025c401dca Fix #144250: Crash when mantaflow solver does not converge and skips cleanup
Mantaflow likes to throw exceptions when things go wrong, which includes a
simple case of the solver not converging sufficiently. This should not be
catastrophic, but cleanup of buffers is omitted when such an exception occurs.
This then leads to yet another failure when the solver is stopped because of
incorrect buffer refcounts. That exception bubbles up through the python layer
and causes errors in the Blender integration wrapper that cause crashes.

Pull Request: https://projects.blender.org/blender/blender/pulls/147527
2025-10-07 15:49:07 +02:00
Jacques Lucke
5df3dd9768 Geometry Nodes: remove default geometry in bake node
This is sometimes annoying now, because sometimes one wants to bake stuff
without a geometry. Most notably, volume grids. It's still very easy to bake
geometries though. Link-drag-search from a geometry socket still adds the
geometry bake socket automatically.

Pull Request: https://projects.blender.org/blender/blender/pulls/147519
2025-10-07 15:35:59 +02:00
Miguel Pozo
610555dbe3 Fix #147340: EEVEE: Crash on failed world material compilation
- Check for failed World materials.
- Remove invalid links (unsure about this one).

(4.5 LTS backport candidate)

Pull Request: https://projects.blender.org/blender/blender/pulls/147445
2025-10-07 15:28:46 +02:00
Thomas Dinges
d71151df4c Fix license info for PThreads
Pull Request: https://projects.blender.org/blender/blender/pulls/147545
2025-10-07 15:23:34 +02:00
Cartesian Caramel
8f41d46d74 Constraint: Geometry Attribute
Add a new constraint called "Geometry Attribute", which directly
samples vector, quaternion, or 4x4 matrix attributes from geometry and
applies these to an object's or bone's transform.

This can be used to transfer data generated by geometry nodes to the
object or bone level. By default the constraint will sample a vector
on the vertex domain. The default attribute is `position` for
simplicity, but the attribute value does not have to have anything to
do with neither the transform of the geometry object nor the geometry
itself.

Pull Request: https://projects.blender.org/blender/blender/pulls/136477
2025-10-07 15:14:22 +02:00
Nick Alberelli
e2872c0bfe Core: de-duplicate bpy.context and context logging
Merges the existing `bpy.context` logging with the new `context` logging
added in [0]. In most cases `bpy.context` & `context` log the same thing.
Where the new `context` logging produces more accurate results.

Ref !146407

[0]: 439fe8a1a0
2025-10-07 23:45:16 +11:00
Iliya Katushenock
157e7e0351 Mesh: Propagate attributes in automatic edge calculation
Support propagation of attributes from the original mesh edges when
generating mesh edges. This implies both deduplication of original edges
and creation of new edges needed for faces. While original edges are not
propagated, attributes are still propagated if an edge was part of any
face. To make original edges distinct we simply choose the first one to
be a value source.

One important part of this patch is definition of invariant of the
mesh on input:
1. All edges must be valid (their vertices must be correct). The
   algorithm only deal with duplicate and implicit edges.
2. There is no way to provide info about corner edges attribute (whether
   it'svalid or not). If all input edges are valid and there are no new
   edges then we could skip re-generation of already valid corner edge
   indices. But for now we always do.

The new implementation depends on input mesh invariant so this drops an
old patch to fix hard crash related with duplicate edge vertices. New
code will crash independently to such patch. Hopefully there must be
no problems after #138633.

The changes don't affect performance much. If anything, in some cases
the edge calculation can become a few percent faster. See the PR for
more performance testing details.

Pull Request: https://projects.blender.org/blender/blender/pulls/132492
2025-10-07 14:36:15 +02:00
Habib Gahbiche
7e38ffe508 Assets: Compositor: Add tag color
Use colors for assets instead of the default one.

See PR for example images.

Pull Request: https://projects.blender.org/blender/blender/pulls/147458
2025-10-07 14:26:07 +02:00
Campbell Barton
3b980419dd Fix: out of bounds write when reading color
Resolve regression in [0] which wrote into the 4th index of a float[3].

[0]: b9e1e2a8ee
2025-10-07 23:11:18 +11:00
Aras Pranckevicius
8a74f7c0b0 VSE: Execute modifiers in strip-local space (#145688)
Currently when a strip has a transform that does not fill the whole
render area, first the image of the strip is transformed, and then
any modifiers are applied on that. This is mostly in the new
Compositor modifier, where procedural textures, gradients, image
coordinates "stick to the screen" instead of following the transformed
strip.

This changes the behavior so that first the modifiers are applied
to the strip image, and then the strip is transformed. This is
potentially a visually breaking change:
- This can alter visual look of existing strip, especially if they are
  scaled. Previous behavior was first scale filtering, then modifier;
  now it is first modifier, then scale filtering.
- Most obvious change is Compositor modifier (which is new in 5.0).
- Compositor modifier can actually expand the input image (e.g. Blur
  node with "expand bounds" option set), and that works.
- Note that Masks continue to be applied in global/screen space. There
  can be small look differences with rotated/scaled strips that use
  masks, due to Mask application now needing to do filtered mask image
  lookups.
- If anyone needs previous behavior (modifier is applied on the
  "whole screen"), they can put transformed strip into a meta strip,
  and apply the modifier on the meta strip itself.

Compositor modifier examples with images in the PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/146181
2025-10-07 13:51:41 +02:00
Nika Kutsniashvili
f145e1f7e2 Anim: Time jump operator
Adds a new operator that jumps time by a given number of frames or seconds, forward or backward.
Surprisingly, it was lacking in Blender, and prompted many users (including me) to create extensions.

This PR adds two properties: `time_jump_unit` for choosing whether to jump by frames or seconds
and `time_jump_delta` property that defines by how many frames or seconds the operator should jump,
as well as an actual operator that changes the current frame (`screen.time_jump`).

`time_jump_delta` is a float that gives users the ability to jump by half a second, for example, or by subframes.
Default is set to 1 second, which translates to as many frames jump as frame rate / frame base.
The operator is intentionally not bound by frame range, and can go in negative frames as well.
This is very important because it's extremely common to set frame range to the current workload,
but wish to see animation beyond that.

Operators are added in the new footer for animation editors alongside with pop-up menu where
properties can be changed.

Shortcuts are also added: Ctrl+Left/Right Arrow, which was surprisingly free in Blender.
Now timeline controls are:
- **Right Arrow**: Next Frame
- **Ctrl + Right Arrow**: Jump Forward (by default also Next Second)
- **Shift + Right Arrow**: Jump to End

Pull Request: https://projects.blender.org/blender/blender/pulls/140677
2025-10-07 13:43:20 +02:00
Campbell Barton
7c52aa1250 Fix #147530: Proportional factor from transform may exceed 1.0
The factor for transform data must be in the 0..1 range however
float imprecision could cause values above 1.0 to be set.

Resolve by clamping.
2025-10-07 22:40:34 +11:00
Christoph Lendenfeld
5eafc97198 Fix #146242: Crash when aligning bones of different armatures
When trying to align bones of 2 different armatures, with different mirror settings
it would crash.
The reason it crashed is that a pointer was not set to anything.
The whole function is not set up to do multi object editing and assumes that all bones gotten
from `selected_editable_bones` are part of the same armature. This is explained by the
comment above that explains that any unselected bones returned from this function are
assumed to be the mirrored bones.

Pull Request: https://projects.blender.org/blender/blender/pulls/147521
2025-10-07 13:39:09 +02:00
Pablo Vazquez
14cf38a49e UI: Remove Tutorials from Help menu
As mentioned in !146730, blender.org does not provide a list of
tutorials anymore, instead, the "Support" section has links to user
communities, enterprise support, and mentions tutorials as part of
a community activity.

Also add "Get Involved", which is a hub for inviting contributors in
all areas.

Pull Request: https://projects.blender.org/blender/blender/pulls/147414
2025-10-07 13:10:39 +02:00
Pablo Vazquez
b9e1e2a8ee UI: 3D Cursor style and contrast adjustments
Recent changes made the 3D Cursor hard to see in some situations,
according to user feedback.

Roll-back most changes to bring back the old style and improve
readability and contrast.

* Keep the same size as the old cursor.
* Keep the crosshair inside the circle.
* Use red-white for the circle as before.

See PR for details and screenshots.

Pull Request: https://projects.blender.org/blender/blender/pulls/147404
2025-10-07 12:56:37 +02:00
Bastien Montagne
854db34385 Fix (unreported) RNA_pointer_is_null returning true on no-ID pointers.
This behavior seems to have been there since initial implementation of
this function in aed1320b24, 8 years ago.

However, it is clearly wrong, and would return wrong positives in many
cases (the Main RNA pointer itself is generated with a nullptr ID by
`RNA_main_pointer_create`, and a _lot_ of code generates RNA pointers
without any ID owner, as shown by a search e.g. on
`RNA_pointer_create_discrete(nullptr`).

WARNING: While logically correct, there is no real way to tell if this
change is not going to break some weird corner case based on wrong
assumption. in addition to unittests, this has also been checked against
several production files.
2025-10-07 12:37:18 +02:00
Bastien Montagne
20a65fd7f4 Fix #147469: Hard Crash when Modifying Addon Keymaps.
Indirectly caused by ada45519a7, the actual issue has been there for
years in the PointerRNA diffing code, which was way too basic and unsafe
in non-liboverride case.

Also fixed a copy/paste assert mistake in related code (same thing was
checked twice, instead of also checking another condition).

Finally, make the more general `RNA_struct_equals` call handle properly
cases where one or both of the given PointerRNA operands are Null ones.
2025-10-07 12:37:18 +02:00
quackarooni
1a6d932fbd Fix: Nodes: Inaccurate placement of framed nodes in swap operators
The swap operators use `Node.location` for location calculations. This expresses
a node's location relative to their parent frames.

This can lead to inaccurate location calculations if nodes have different parent
frames. This was partly addressed by using the custom `temporary_unframe`
context manager. However, that method is sensitive to the order of steps
executed by the operator, making it easy to accidentally let a few location bugs
go through.

This patch fixes the issue by using `Node.location_absolute` which gives the
node's absolute location. This also gets rid of the need for
`temporary_unframe`, and makes the location calculations more straightforward.

Pull Request: https://projects.blender.org/blender/blender/pulls/147424
2025-10-07 12:33:30 +02:00
Jacques Lucke
b24cc091f0 Fix #147510: crash showing integer attribute in spreadsheet on some platforms
The issue here was that I wrongly assumed that the locale would always be available.
Instead just use our built-in function to add thousands-separators (which I didn't
find last time).

Pull Request: https://projects.blender.org/blender/blender/pulls/147515
2025-10-07 11:52:40 +02:00
Philipp Oeser
8d4f883d27 Fix #147476: errors/crashes calling node menus outside the Node Editor
Calling node menus in the context of a different editor can lead to
errors in many places (e.g. checking on space_data tree_type/
node_tree_sub_type), so to resolve, add a very general poll function to
the NodeMenu class.

Pull Request: https://projects.blender.org/blender/blender/pulls/147512
2025-10-07 11:47:47 +02:00
Sybren A. Stüvel
d989117f09 Fix: correct RNA property access in Rigify
Ensure that Rigify correctly handles RNA properties as RNA properties.
Before, it mixed dictionary-style and attribute-style access, but
since 7276b2009a that is no longer
possible.

This means that the (un)registration of the RNA properties needs to
happen in two places: the add-on itself, and the code it generates in
the rig. To be able to inject the code into a blend file, Rigify needs
to access it as string. This commit introduces a new way of dealing
with this: it just has normal code, and uses Python's
[`inspect.getsource()`][getsource] to get that code as string for
injection into the rig file.

[getsource]: https://docs.python.org/3/library/inspect.html#inspect.getsource

The biggest chunk of code in this commit deals with the 'Copy
Parameters', 'Copy Type & Parameters', and 'Mirror Type & Parameters'
operators. Since it's no longer possible to access RNA properties as
dict-like custom properties, new code was written to recursively copy
`bpy.types.PropertyGroup` instances. Eventually this may end up in
Blender itself, but that would mean writing more thorough checks and
making sure it works in many cases. And it might be easier to
implement this on the C++ side, where it should just be a matter of
exposing one `IDP_CopyPropertyContent()` call to the Python API.
That's all for another Blender release, though -- for now this'll have
to do to fix up Rigify for 5.0.

Fixes: #146675
Pull Request: https://projects.blender.org/blender/blender/pulls/147199
2025-10-07 11:37:12 +02:00
YimingWu
0efc88bacd Fix #147157: Scale node X input has no label
The scale node X input has no label, while Y does. This is due to the
`.optional_label()` statement which seems to have accidentally been
added in 149a47ba57. To fix this, we just remove the statement.

Pull Request: https://projects.blender.org/blender/blender/pulls/147178
2025-10-07 11:28:54 +02:00
Sybren A. Stüvel
7d6b55ab3f Anim: remove "Render Viewport Keyframes" operator
Remove the "Render Viewport Keyframes" mode of the `RENDER_OT_opengl`
operator. This was implemented 6 years ago to avoid camera strobing when
animating on 2s, and was (AFAIK) little used after that initial need
(mostly because of usability issues and limited functionality).

The Fix to Camera operator deals with this at an animation level; that's
a better solution, as it also works for regular (non-viewport) renders.

See #146749

Pull Request: https://projects.blender.org/blender/blender/pulls/147463
2025-10-07 11:07:19 +02:00
Jacques Lucke
894d9883b1 Cleanup: Geometry Nodes: use cache mutex for lazy function graph generation
This is a more standard way to handle caches and avoids the need for
a custom double checked lock.

Pull Request: https://projects.blender.org/blender/blender/pulls/147345
2025-10-07 10:46:59 +02:00
Jacques Lucke
93e91f2116 Nodes: simplify editing group interface based on selected group input/output node
This fixes two annoyances when working on node groups: * One has to constantly
switch between the Group and Node tab in the sidebar. * Finding a specific group
input/output in the tree view can be annoying when there are lots of inputs.

This patch implements two features which simplify the process significantly: *
When selecting a group input/output node, activate the corresponding item in the
tree view.
  * When the node has multiple sockets, use the one that's closest to the
  cursor.
* Show the group interface tree view in the node properties when selecting a
Group Input/Output node.

This constains one UI change that may affect other areas: When a new tree view
is added on a redraw, the active element is now scrolled into view, instead of
the scroll bar just being at the very top.  It seems generally good to me, but
could be made optional.

Pull Request: https://projects.blender.org/blender/blender/pulls/147365
2025-10-07 09:22:28 +02:00
Omar Emara
1a9a99036e Fix #147372: Transparency does not work with VSE compositor modifier
If a VSE compositor modifier is used to do keying or introduce an alpha
somehow to the image, the alpha is not used when blending. This is
because the VSE evaluator assumes all modifiers except Mask could not
introduce an alpha channel. So we need to extend the check to also make
an exception for the compositor modifier.

Pull Request: https://projects.blender.org/blender/blender/pulls/147456
2025-10-07 08:20:16 +02:00
Pratik Borhade
ad04c9dfdf UI: Tree View: Active item focus
Adding new element or changing panel looses the focus on active
element. Now handled in this PR inside the function `scroll_active_into_view`.
Iterate all tree view elements then use the index of active to set the
`scroll_value_`.

Resolves #143930

See PR description for the video

Pull Request: https://projects.blender.org/blender/blender/pulls/143977
2025-10-07 07:55:03 +02:00
tariqsulley
7263221403 Fix #147387: Crash after converting duplicated curve to mesh via Python
Disallow converting objects to mesh while in Edit Mode. When an object
is in edit mode during conversion, its edit data may not be properly
flushed, resulting in invalid geometry and potential crashes.

Ref !147482
2025-10-07 16:51:03 +11:00
Jesse Yurkovich
780c6ad024 Tests: Alembic: Add coverage for point cloud attribute import validation
Adds coverage for recently added import of pointcloud attributes.
See PR blender/blender!145946

Pull Request: https://projects.blender.org/blender/blender/pulls/147494
2025-10-07 05:46:34 +02:00
Jesse Yurkovich
fd3f8c1265 Tests: add PointCloud datablock to IO report
Adds support for comparing PointCloud datablocks inside the IO report.

Pull Request: https://projects.blender.org/blender/blender/pulls/147490
2025-10-07 05:13:43 +02:00
Campbell Barton
62d72bd0b5 UV: initial implementation of UV sync select
Support sync selection in the UV editor, with face-corner selection,
so it's possible to select individual UV vertices/edges in the UV editor
without UV's attached to the same underlying edge also becoming selected.

There is limited support for maintaining the UV selection when selecting
from the 3D viewport, common operations such as picking &
box/circle/lasso select support this, however other selection operations
such as "Select Random" or "Select Similar" will clear this data,
causing all UV's connected to selected mesh elements to become selected.
We may add support for additional operators as needed.

Details:

- UV Sync Selection is now enabled by default.
- In edit-mode the UV selection is stored in BMLoop/BMFace which are
  written to custom-data layers when converted to a Mesh.
- To avoid unnecessary overhead - this data is created on demand.
  Operators may clear this data - selecting all or none do so,
  as there is no reason to store this data for a uniform selection.
- The Python API includes functions to synchronize the selection to/from
  UV's as well as flushing based on the mode.
- Python scripts that manipulate the selection will either need to clear
  this synchronized state or maintain it.

See:
- Design task: #78393.
- Implementation task: #131642.

Ref !138197
2025-10-07 01:41:16 +00:00
Sean Kim
88b5319596 Refactor: Split out pressure curve display from main property function
Adds a new `prop_custom_pressure` helper method to `UnifiedPaintPanel`
specifically for drawing brush properties that have custom,
collapsible paint curves and migrates existing usages.

Pull Request: https://projects.blender.org/blender/blender/pulls/147161
2025-10-07 03:10:44 +02:00
Harley Acheson
b11093306b UI: SVG Icons for Collection Colors
A test of using multi-color SVG icons in place of the current "vector"
(custom drawn) style we are using now. These use separate colors for
the box body versus outline, shadow, handhold. Colored by the theme
colors.

Pull Request: https://projects.blender.org/blender/blender/pulls/126307
2025-10-07 02:07:28 +02:00
Campbell Barton
8663f704a2 Cleanup: remove use of f-strings in core scripts 2025-10-07 10:19:46 +11:00
Campbell Barton
cc1a3f19b4 Cleanup: resolve various pylint warnings from recent changes 2025-10-07 10:19:46 +11:00
Campbell Barton
77f5119f77 Cleanup: import modules lazily 2025-10-07 10:19:46 +11:00
Campbell Barton
3de925589f Cleanup: strip trailing space 2025-10-07 10:19:46 +11:00
Campbell Barton
01806a62e3 Cleanup: spelling (make check_spelling_*) 2025-10-07 10:19:46 +11:00
tariqsulley
5cd29bc110 Fix #147288: UV Editing: Copy Mirrored UV Operator
Resolve regression in [0] which would mirror unselected faces.

Only copy UVs between mirror faces that are fully selected,
so unselected faces are left untouched. Vertex mapping also now uses
add_overwrite() to keep the last vertex at duplicate positions for a
more reliable mirroring.

Ref !147405

[0]: 919acbbf7f
2025-10-06 23:02:32 +00:00
Harley Acheson
c03fdf5d9d UI: Toggle Icon Changes
Some of our toggle icons have unclear "off" states, with visibility
looking like a dim curve when off. This PR makes some of these off
states a bit clearer. Visibility and Selectability when off get a slash
through them. Also "unlocked" becomes horizontally aligned with the
"locked"  version.

Pull Request: https://projects.blender.org/blender/blender/pulls/147326
2025-10-06 23:12:37 +02:00
W_Cloud
6399a7c81e Fix: Nodes: Incorrect color for dragged links
Fixes incorrect color for dragged links, likely a regression from #145238.

The fix is to pass `TH_WIRE_INNER` to `nodelink_get_draw_config`. This results
in a color ID of 2 from `nodelink_get_color_id`, which satisfies the
`color_ids[0] < 3u` check in the `gpu_shader_2D_nodelink_vert.glsl`.

Pull Request: https://projects.blender.org/blender/blender/pulls/147462
2025-10-06 21:06:29 +02:00
Nikita Sirgienko
c07454a3d7 Cycles: oneAPI: Update UI about minimal driver version on Linux
These changes are already in place de facto, as the check for
the minimal driver version in the Blender code was already
updated. This commit simply adds the UI update, which I
initially forgot to perform.

Pull Request: https://projects.blender.org/blender/blender/pulls/147459
2025-10-06 20:44:20 +02:00
Harley Acheson
5953ff318c UI: Add Preference for Menu Close on Leave
This PR changes the current behavior that closes menus that are open
when your mouse is moved out of its "safe" area (a bit wider than its
visible bounds). With this PR applied menus stay open unless you click
elsewhere, hover a neighboring menu, press escape, or select an item.
Although this PR turns off menu mouse leave, it also adds a preference
that can be used to turn it back on.

Pull Request: https://projects.blender.org/blender/blender/pulls/145523
2025-10-06 20:19:12 +02:00
Hans Goudey
80e8493c11 Fix #147270: Smooth by angle asset detection broken on Windows
6087a8b4a4 didn't use slashes properly.
Just use a utility function for path comparison instead.

Pull Request: https://projects.blender.org/blender/blender/pulls/147471
2025-10-06 20:00:54 +02:00
W_Cloud
247c19f6cf Fix #147355: Nodes: Inconsistent vector add menu
- 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
2025-10-06 19:09:01 +02:00
Harley Acheson
ba157ee1a4 Fix #147413: Thinner Playhead Line Shadow with Wide Lines
Selecting "Wide Lines" has always made the playhead vertical line
thicker. But with #145081 the line is an odd width, so when at 1X scale
it is three pixels instead of two with default lines, five pixels
instead four with wide line lines. But that one pixel isn't a big
deal, it is that the SHADOW around the line is now calculated based on
the line width when it used to be based on ui scale. This means at
1X scale and wide lines the shadow is two pixels when it used to
be just one. This PR goes back to the old shadow width calculation
which makes the overall obscuring width 2 pixels narrower at 1x wide.

Pull Request: https://projects.blender.org/blender/blender/pulls/147467
2025-10-06 18:48:27 +02:00
Casey Bianco-Davis
fff2b76645 Fix #142377: Grease Pencil SVG Exporter objects disabled in render
This adds a check to ensure that objects disable in the render
don't show up in exported SVGs.

4.5 Backport candidate.

Pull Request: https://projects.blender.org/blender/blender/pulls/147332
2025-10-06 18:43:23 +02:00