Commit Graph

121338 Commits

Author SHA1 Message Date
Bastien Montagne
a345b83f1a Merge branch 'blender-v4.5-release' 2025-07-07 15:53:53 +02:00
Lukas Tönne
090d3ea994 Refactor: Armature deform API and threading function cleanup
Improved readability of `armature_deform.cc` high level API functions
by using spans, references, and optional values instead of raw pointers.
Threading callbacks are reorganized to avoid unused function parameters
in code branches and makes it easier to verify which parts of the code
are executed for given input arguments.

Pull Request: https://projects.blender.org/blender/blender/pulls/141453
2025-07-07 15:50:38 +02:00
Jeroen Bakker
f98049692a Fix #141245: Assert in VFX editor
Caused by incorrect merge from 4.5.

Pull Request: https://projects.blender.org/blender/blender/pulls/141557
2025-07-07 15:47:42 +02:00
YimingWu
22e8980b01 Cleanup: Unused variables in grease_pencil_join_selection_exec
Introduced by 5acd62b39d. The variable is
unused in release and not affecting any existing logic downstream. So
removing it.
2025-07-07 20:48:07 +08:00
YimingWu
d47175d6fd Fix #141448: Geometry Nodes: UI panel property name trimming logic Fix
Previously in 95259228d9, property names
within geometry nodes panels are trimmed to make it less verbose if the
property name contains the parent panel's name as prefix, this didn't
take into account where property name can be the same as panel name, in
which case there will be an empty property name which is undesired. So
we should not trim the name in this case.

Pull Request: https://projects.blender.org/blender/blender/pulls/141500
2025-07-07 13:59:23 +02:00
YimingWu
5acd62b39d Fix #141513: Grease Pencil: Remove strokes joined from other layers
Previously when joining a stroke from other layers, those original
strokes are kept even when joining mode isn't "Join and Copy". Now the
operator will correctly remove the incoming strokes from their original
layers.

Pull Request: https://projects.blender.org/blender/blender/pulls/141527
2025-07-07 13:03:54 +02:00
Jacques Lucke
549e4c6274 Fix #139079: crash switching scene due to double depsgraph rebuild
The root cause of the crash was that currently the depsgraph does not support
being rebuilt twice without being evaluated in the meantime. While not ideal to
rebuild the depsgraph twice, it's really something I'd expect to work without
crashes/leaks.

The double-rebuild when switching the scene was introduced by b6e1afb6e1
which tagged the depsgraph relations indirectly. Tagging relations at that place
should be valid though. The same bug can easily be reproduced by explicitly
writing code that rebuilds the depsgraph twice as shown in
https://projects.blender.org/blender/blender/issues/139079#issuecomment-1615029.

So far, we've found two places that need to be fixed to properly support
rebuilding the depsgraph before it has been evaluated:
* `update_invalid_cow_pointers`: `previously_visible_components_mask` was used
  to check if the id is new and therefore not expanded yet. However, this check
  is wrong in the case when the depsgraph was not evaluated yet. Instead, check
  whether the ID is expanded directly. IDs which don't use copy-on-eval are
  still handled properly due to another existing check.
* `DepsgraphNodeBuilder::begin_build`: This just discarded
  allocated-but-not-expanded IDs without freeing them. Now they are freed when
  their ownership is not transferred to `IDInfo`.

See
https://projects.blender.org/blender/blender/issues/139079#issuecomment-1615029
for more details.

Pull Request: https://projects.blender.org/blender/blender/pulls/141199
2025-07-07 13:00:04 +02:00
Habib Gahbiche
8bd8754268 Fix #141515: Compositor: Crash when tweaking gizmos
Fix crash when tweaking following gizmos:
- Box Mask
- Ellipse Mask
- Crop

This commit uses the same workaround to trigger an update for gizmos
(see also Sun Beams, Corner Pin and previous versions of the above
mentioned gizmos).

A better solution is needed for gizmo updates. This will be
investigated and submitted separately.

Pull Request: https://projects.blender.org/blender/blender/pulls/141542
2025-07-07 12:19:08 +02:00
Damien Picard
ca38e3be94 I18n: Use proper existing context for "Dimensions"
This occurrence of "Dimensions" uses the existing "Texture" translation
context.

Reported by Satoshi Yamasaki in #43295.

Pull Request: https://projects.blender.org/blender/blender/pulls/141491
2025-07-07 12:02:26 +02:00
Damien Picard
68189253df I18n: Disambiguate "Median"
"Median" can have:
  - a geometrical meaning, as in the median of points in a mesh,
  - a statistical meaning, as in the median of a set of values. Used
    in node attribute statistics.

This commit adds the specific "NodeTree" translation context to the
latter sense.

Reported by Satoshi Yamasaki in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
995b700e71 I18n: Disambiguate "Edges" in Keying compositing node
"Edges" usually refers to the edges of a mesh. In the context of the
Keying compositing node, it should be the image processing sense of
edges between color areas. This mirrors the singular "Edge", already
similarly disambiguated.

Reported by Satoshi Yamasaki in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
3aa633304a I18n: Disambiguate "Strip" for exporter filepath mode
"Strip" generally is a sequencer or animation strip, but in this
context it is a string manipulation action for file names. It is
defined as part of the Path Mode defined in the FBX and OBJ exporters.
Those exporters are defined in Python and C++, respectively. This
commit changes both exporters to use the "File browser" translation
context.

In addition, the tooltip for "Relative" from the FBX exporter was
changed to match its OBJ counterpart, and the "Strip Path" mode was
also matched to the other version which reads better as an enum item.

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
d16c9003d2 I18n: Translate link items for Integer Math node
Link items need to be gathered using the same translation context as
the actual enum prop they come from, in this case "Nodetree".

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
23b217662e I18n: Translate some node socket tooltips
Node socket tooltips can include substrings from many different
sources. This commit adds two that were previously untranslated:
- hardcoded strings that simply need to be manually translated using
  `TIP_()`,
- the socket name, which should use its context. This simply copies
  the translation code from the socket name label.

Reported by Gabriel Gazzán in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
14957fe2ac I18n: Translate Window manager job names
Job names displayed in the status bar were not extracted or
translated. This commit adds a regex to the bl_i18n_utils settings to
detect `WM_jobs_get()`, and the `RPT_` translation macro to translate
the message in the UI.

About 30 new messages are translated.

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
ac8a3f98c2 I18n: Translate "Boolean" output in Boolean GN node
This node uses the recently-introduced uiLayout API to draw its UI.
This still needs to do manual translation using `IFACE_()`. This
commit adds this macro.

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
771af1a0ad I18n: Translate "Equalizer" strip modifier name
New sequence strip modifiers get a name that is to be translated if
translation of data is enabled. This used the default translation
context, but "Sequence" must be used because this is the context used
to extract the modifier names (`modifiersTypes` array in modifier.cc).

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Damien Picard
6914e04f5c I18n: Translate node groups' interface socket subtypes
Node tree interface sockets can have subtypes depending on their type.
These use enum items extracted elsewhere using the "Unit" translation
context. The sockets' subtypes thus need to use the same context as
well.

Reported by Satoshi Yamasaki in #43295.
2025-07-07 12:02:25 +02:00
Lukas Tönne
c40d8f50b6 Fix #141535: Lattice deform without dverts causes crash
Using armature deformation with a lattice object that doesn't have
vertex groups creates an invalid span that crashes during deformation.
This was caused by refactoring which replaced raw pointers with spans,
but has to check for nullptr to avoid creating an invalid span.

Pull Request: https://projects.blender.org/blender/blender/pulls/141538
2025-07-07 12:01:01 +02:00
Pratik Borhade
d6f22a7810 Fix: Update selection in shapekey dopesheet
Shift+LMB selection in tree view doesn't update selection state in
shapekey dopesheet. To fix this, add notifier for area redraw.
In other cases, `on_activate()` function of inherited class handles
the notifier.

Pull Request: https://projects.blender.org/blender/blender/pulls/141543
2025-07-07 11:57:05 +02:00
Falk David
2b100e0a7e Merge branch 'blender-v4.5-release' 2025-07-07 11:14:52 +02:00
Casey Bianco-Davis
f01bc4d811 Fix: Grease Pencil: Material Select doesn't select bezier handles
This makes it so that the `Material Select` operator also selects bezier handles.

Pull Request: https://projects.blender.org/blender/blender/pulls/141478
2025-07-07 07:28:50 +02:00
Casey Bianco-Davis
729fc1ed47 Fix: Grease Pencil: Set Handle Type operator for single handle
When only handles were selected they could not be set.
The problem is that `retrieve_editable_and_selected_strokes`
only counts strokes that have selected control points.

Pull Request: https://projects.blender.org/blender/blender/pulls/141437
2025-07-05 11:02:57 +02:00
Richard Antalik
4d65362550 Fix #141332: Add movie operator crashes Blender
Caused by null dereference, because operator was executed with
overridden context with region not set.

Pull Request: https://projects.blender.org/blender/blender/pulls/141419
2025-07-05 01:34:30 +02:00
Campbell Barton
0ceedc2a7d Cleanup: various non-functional changes in C++ 2025-07-05 09:03:09 +10:00
Campbell Barton
932d37ba0b Cleanup: sort file lists in CMake 2025-07-05 08:54:18 +10:00
Campbell Barton
68e363ddc8 Cleanup: typos in code-comments, quote code literals 2025-07-05 08:52:49 +10:00
Julian Eisel
183420bd07 Refactor: Make file-list cache struct non-trivial C++ one
Makes it possible to use non-trivial C++ types in `FileListEntryCache`.
I'm planning to use this for blender/blender!130543, to store status
information about downloaded previews. While it's possible to use
C-style types instead, this is easier and a worthwhile general
improvement.

I turned `FileList.filelist_cache` into an allocated pointer, so
`FileList` doesn't have to be ported to be a non-trivial type as well.
We probably want to do that too at some point.

Pull Request: https://projects.blender.org/blender/blender/pulls/141411
2025-07-04 23:09:02 +02:00
Germano Cavalcante
58af30f9b9 Refactor: Transform: Unify logic of "orient_axis" and "constraint_axis"
In rotation-based transform operations, the rotation axis can be
determined in two ways:
1. Through "orient_axis" (X, Y or Z)
2. Through "constraint_axis"

When the axis is obtained through the constraint, "orient_axis" is
ignored, and the angle may be negated depending on the view orientation
to match the mouse movement.

However, "orient_axis" never has its angle negated. Since the default
orientation is "View", the Z axis is inverted by default, aligning with
the mouse movement but not with the constraint axis.

This causes problems in the Redo Panel because the constraint fields
are hidden in the Rotation operation, so they need to be unset for the
Axis field to work. However, if you change the value of the Rotation
field, the object may have its rotation negated unexpectedly.

This issue was partially shown in #93078. Commit c30e6a37b0 attempted
to fix it by unsetting the constraint property when the Axis was
changed. However, this solution is incomplete: if the Axis is changed
and then reverted, the negative rotation issue reappears. In addition,
it has not been implemented in all operations.

This commit resolves the issue by reverting c30e6a37b0, aligning the
behavior of "orient_axis" and "constraint_axis", and unsetting
"constraint_axis" in `saveTranform`.

A downside of this solution is that it may break operators invoked from
Python that rely on "orient_axis" as the rotation axis, as the rotation
value now needs to be negated.

Pull Request: https://projects.blender.org/blender/blender/pulls/141101
2025-07-04 20:47:25 +02:00
Namit Bhutani
e5db240434 Mesh: Spatial Reordering for Sculpt Speed Improvements
**Problem Description**

Blender's current mesh data layout often lacks spatial coherence,
causing performance bottlenecks during BVH construction for sculpting
and painting operations. Each time a BVH is built, the system must
recompute spatial partitioning and vertex groupings from scratch,
leading to redundant calculations and suboptimal memory access patterns.

**Proposed Solution**

This patch implements pre-computed spatial organization of mesh data
through a new `mesh_apply_spatial_organization()` function that:

- Reorders vertices and faces based on spatial locality using recursive
  spatial partitioning.
- Stores pre-computed MeshGroup hierarchies in MeshRuntime for reuse.
- Enables the BVH system to bypass expensive spatial computation when
  pre-organized data is available.

This approach separates the expensive spatial computation from more
frequent BVH rebuilds, providing sustained performance improvements
across multiple sculpting operations.

**Limitations**

- Requires manual invocation (occurs automatically only during remesh
  operations).
- Additional memory overhead for storing MeshGroup metadata.
- One-time computational cost during initial organization.
- Spatial group references are not yet stored in files.

**User Interface**

The feature is accessible via a new "Reorder Mesh Spatially" operator in
the Mesh Data Properties panel under the Geometry Data section. Users
can invoke it manually when needed, or it will be applied automatically
during quadriflow and voxel remesh operations. The operator provides
feedback confirming successful spatial reordering.

Pull Request: https://projects.blender.org/blender/blender/pulls/139536
2025-07-04 20:02:37 +02:00
Harley Acheson
a60ec16858 Fix #141225: Hide Right Node Editor Scrollbars When Sidebar Visible
For Node Editors do not show right-side scrollbars if region overlap
and there is a right-aligned region open, to avoid two scrollbars.

Pull Request: https://projects.blender.org/blender/blender/pulls/141418
2025-07-04 19:50:44 +02:00
Germano Cavalcante
79721249b0 Cleanup: Avoid unnecessary indentation levels in 'tranform.cc'
Use early return and remove repeated conditions.
2025-07-04 14:47:11 -03:00
Hans Goudey
123267933c Fix #141430: Crash with viewer node on invalid domain
Since 68759af516, it was possible
to add attributes on invalid domains. Just add a check for that.

Pull Request: https://projects.blender.org/blender/blender/pulls/141460
2025-07-04 18:57:33 +02:00
Guillermo Venegas
3cd285d7f0 Cleanup: UI: Remove unused pie menu functions
I couldn't find exactly when it was stopped being used,
but seems that this has some years with no use.

Pull Request: https://projects.blender.org/blender/blender/pulls/141435
2025-07-04 18:29:05 +02:00
Falk David
cc7f1a2b52 Merge branch 'blender-v4.5-release' 2025-07-04 18:05:43 +02:00
Falk David
eff92923ec Fix: Grease Pencil: Soft eraser leaves points with zero opacity
The soft eraser could leave points with zero opacity. To fix this issue
for now, we apply a post-process step when the stroke is done to remove
these points.

In the future, it would be better to refactor the eraser a bit more and
delete points during the stroke.

Part of #131686.

Pull Request: https://projects.blender.org/blender/blender/pulls/141454
2025-07-04 17:22:49 +02:00
Pratik Borhade
a559fb833c Tree View: Multi-select support
Add support to select multiple tree view elements (similar to outliner/anim channels)
`Ctrl + LMB` to select+activate element under the mouse
`Shift + LMB` to select all items between active and clicked item.

As of now, only Shape key has support for multi-select. (straightforward to include
other views). `KEYBLOCK_SEL` flag is used for storing selection state.

Pull Request: https://projects.blender.org/blender/blender/pulls/138979
2025-07-04 15:45:18 +02:00
Philipp Oeser
458e224587 Merge branch 'blender-v4.5-release' 2025-07-04 15:01:33 +02:00
Philipp Oeser
eb82ff6166 Fix #141387: Light Probes not integrated into Animation Editors
You could basically not interact with the animation (except for
keyframes in the main region), channels region was totally empty, NLA
could not be used, ...

It is not something users will animate a lot, but we should still have
animation editors in mind when adding a new object type.

Just missing from cc31d7bb49

Pull Request: https://projects.blender.org/blender/blender/pulls/141449
2025-07-04 15:01:15 +02:00
Falk David
93d83bdad4 Merge branch 'blender-v4.5-release' 2025-07-04 14:57:53 +02:00
Falk David
859d271528 Fix: Grease Pencil: Crash when geometry has no drawings
Adds checks to the `get_drawing` functions to make sure that there is at
least one drawing in the geometry.
2025-07-04 14:57:08 +02:00
Omar Emara
c18e4b69a4 Fix: Versioning of Normal node applies to all nodes
The versioning code for the Normal node applies to all nodes, while it
should only apply to the Normal node.

Pull Request: https://projects.blender.org/blender/blender/pulls/141452
2025-07-04 14:07:00 +02:00
Campbell Barton
441cc3ab09 Merge branch 'blender-v4.5-release' 2025-07-04 20:23:30 +10:00
Jason C. Wenger
014be23586 Fix #141351: Default edge dissolve angle leaves many verts undissolved
Adjust angle threshold defaults to dissolve verts as before,
while preserving selected geometry.

The new behavior works as follows:

- If a dissolve terminates on an edge loop or the the corner vert of a
  face, do the dissolve.
- If a set of dissolve edges (either a chain, or a set of 3+ edges)
  crosses a loop cut, do the dissolve.
- If a chain of dissolve edges touch the corner of an unselected face,
  and then leave in a different direction without crossing a loop cut,
  preserve that vert. Just because the selection touches it doesn't mean
  it should be altered.
- If a dissolve edge is separating two triangles,
  then the face join creates a quad. Users generally prefer
  and strive to create meshes that contain quads.
  Instead of destructively dissolving the corners of the quad and
  automatically turning it to a triangle or wire,
  instead prefer to preserve the quad.

Ref !141097
2025-07-04 20:14:55 +10:00
Pratik Borhade
eab747e8dd Fix #51739: Sliding values in add primitive redo panel not hiding cursor
Cursor is actually wrapped at the beginning with the help of function
`WM_cursor_grab_enable`. Though the `ND_MODE` event notifier added
inside  `editmode_enter/exit_ex` further calls `region_cusor_set()`.
This resets the cursor to default at the bottom of
`ED_region_cursor_set()`. Such sitution could be avoided by creating a
dummy cursor function for hud region. But issue remains when we call
redo panel from F9. As Julian suggested, add condition for `grabcursor`
to avoid changing cursor when editing buttons.

Pull Request: https://projects.blender.org/blender/blender/pulls/133529
2025-07-04 12:01:03 +02:00
Pratik Borhade
841c36850c Fix #67806: Delete non existing temp screens
When deleting a window, clear screen ID data if it belongs to
non-main window with single area

Pull Request: https://projects.blender.org/blender/blender/pulls/132978
2025-07-04 11:56:12 +02:00
Campbell Barton
dcf59ca85a Merge branch 'blender-v4.5-release' 2025-07-04 19:54:38 +10:00
Campbell Barton
389a9197ae Merge branch 'blender-v4.5-release' 2025-07-04 19:51:40 +10:00
Patryk-Skowronski
c53a0cfcb6 NDOF: use fixed speed values for translations in "Fly Mode"
Use fixed speed values for translations in Fly mode to constant
values for each axis. Until now, after switching to the Fly mode,
the latest speed value calculated based on RegionView3D::dist
was used for translations.
Now, the translation speed in Fly mode is an adjusted constant
for each axis.

Ref !141285
2025-07-04 19:33:43 +10:00
Casey Bianco-Davis
5cbaee3321 Grease Pencil: Implement align Bézier handles in transform operator
This PR add bezier `align` type calculation to Grease Pencil.
Curves objects were implement in #128726.

Pull Request: https://projects.blender.org/blender/blender/pulls/141371
2025-07-04 11:27:14 +02:00