**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
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
### Summary
A small fix / addition to Node Wrangler operators.py, specifically the
nw_merge_node operation. I added support for merging nodes with
boolean sockets, which used to not respond to nw_merge_nodes / nw_lazy_mix.
### Motivation
As a user, I found it frustrating that I couldn't use lazy mix on boolean
nodes, as geonodes-heavy projects relied on them, and required adding
Boolean Math nodes often.
I intuitively expected it to add a Boolean Math node, which is the most
similar to Math Add for floats & Join Geometry for geometry.
### Implementation
A boolean nodes list is created when the rest of the lists are cerated,
nodes with boolean outputs get added to it, it's taken into consideration
when checking if PASS_THROUGH, then if we didn't PASS_THROUGH,
a Boolean Math node is created, similar to the existing options.
When the user uses a math merge shortcut (ctrl+0, ctrl+*, etc), the
code ignores it, adds Boolean Math anyway.
Pull Request: https://projects.blender.org/blender/blender/pulls/140236
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
This enables drag-n-drop support for the `import_curve.svg` operator.
Since the existing `Import SVG as Grease Pencil` operator handles the
same file type, when dropping `.svg` files this will prompt to choose
between theses 2 operators.
See PR for examples and notes on eventually changing the operator
description.
Pull Request: https://projects.blender.org/blender/blender/pulls/140603
Our keymap, when pressing Ctrl-Tab in Graph Editor, currently changes
the space type to "Dope Sheet" with "wm.context_set_enum". But this
method is not aware of subtypes. This PR instead changes the space type
using "screen.space_type_set_or_cycle". While in Timeline it will go to
Graph Editor, press again to go back to Timeline. While in Dope Sheet
you go to Graph Editor, press again to go to Dope Sheet.
Pull Request: https://projects.blender.org/blender/blender/pulls/141360
When dropping an extension onto Blender, the URL lookup would print
errors to the STDOUT if a repository directory was missing.
While this didn't break installation, these kinds of errors should
only be shown when the directory is expected to exist.
The issue was raised in #141212.
The base URL was used when reporting errors accessing a URL,
use the full URL being accessed instead since anything else
is misleading, the full URL is needed to troubleshoot issues.
This replaces the Move/Link to Collection operator popup with a menu,
allowing this to be able to search collection to move and to expand
this menu from other menus.
This removes the expected memory leak of using the popup.
Move to Collection operator now uses `session_uid` to identify
target collection, this now allows to target a collection from another
scene, however, is not exposed throw UI)
Resolves#133772
Pull Request: https://projects.blender.org/blender/blender/pulls/140883
Geometry Nodes' Add > Input > Import menu includes file format items
such as "Standford PLY (.ply)", "STL (.stl)", "Text (.txt)". The
latter needs to be translated because "Text" is a generic format.
These items are declared using a custom function
`node_add_menu.add_node_type`, with a `label` argument. This commit
adds the `label` argument to the function arguments that can be
extracted from specific node declaration functions, and specifies the
argument position for each:
"add_node_type", "add_node_type_with_outputs", "add_simulation_zone",
"add_repeat_zone", "add_foreach_geometry_element_zone",
"add_closure_zone".
There is currently no facility to specify a translation context but it
could be easily added if the need arises.
Most of these functions do not actually declare new, unique messages,
but it could happen in the future. In addition, two messages were
extracted using manual `iface_()` calls, which are no longer needed
after this change.
Reported by Ye Gui in #43295.
This commit introduces the `radial_symmetry` property on the `Mesh`
datablock and simultaneously removes the `radial_symm` property in
Sculpt, Vertex Paint, and Weight Paint.
This allows users to have these symmetry values defined on a per-object
basis instead of needing to reconfigure it for each mesh.
Current values stored on the `ToolSettings` on a per-scene basis are not
copied to each mesh in a scene. This is done to avoid introducing
potentially inaccurate data to a large number of meshes at the cost of
some minor backwards incompatibility.
Part of #108107
Pull Request: https://projects.blender.org/blender/blender/pulls/141108
I18n: Translate a few messages
- Translate add-on types in the user preferences.
- Translate a report which uses formatting.
- Do not translate scene names in `sequencer.scene_strip_add` operator
UI.
- Do translate the type of new scene in
`sequencer.scene_strip_add_new` operator.
- Translate Half and Float image format color depth enum items.
- Translate Mix node header with non-color data types.
- Translate sequencer modifiers' names if data translation is enabled.
Most issues reported by Ye Gui in #43295.
Pull Request: https://projects.blender.org/blender/blender/pulls/141145
"Volume Min" can mean:
- The volume of a bone when modified by a constraint.
- The audio volume of a speaker object.
Reported by Alexandr Fatih in #43295.
"Mirror" can mean:
- To symmetrize something (i.e. generate a new mirrored copy of it or
edit it in a symmetric fashion).
- To flip something (i.e. invert its values along X, Y or Z axes).
- To repeat a texture in a mirrored fashion outside its bounds.
Reported by Gabriel Gazzán in #43295.
Replace use of bpy.ops.wm.append with the Python equivalent.
This avoids a separate append call for every group.
Also refactor lookups so node-group names only need to be declared once,
then used to populate a named-tuple.
The default nodes were still present in the node tree when Setup
Tracking Scene operator was called.
The issue was that the operator assumed the default tree always has the
same number and types of nodes, which wasn't true anymore after the
default node tree was changed in df6e65dd93
This PR keeps the changes to a minimum by updating the assumption
about the default node tree.
Pull Request: https://projects.blender.org/blender/blender/pulls/141141
- Remove "experimental" label from C++ based FBX importer,
- Make drag-n-drop use the C++ FBX importer,
- Add "Legacy" label to the previous Python FBX importer
Pull Request: https://projects.blender.org/blender/blender/pulls/140703
Introduced with 96e549c092
While the above commit applied versionings to the related flags, it did
not convert either the UI elements or the underlying grease pencil code
to use the now generic `Brush` properties.
Pull Request: https://projects.blender.org/blender/blender/pulls/141001
The graph.keyframe_jump operator is deprecated. Use the regular
screen.keyframe_jump operator that was recently fixed to work in all
animation editors.
The theme property for group socket nodes was set to `#000000` for
default themes, which looked out of place against the other node
header colors. This patch adds colors to both the Blender Dark & Light
themes that should resemble their counterparts before 2ea3cd2188.
Colors:
Blender Dark - `#1d1d1d`
Blender Light - `#3d3d3d`
Pull Request: https://projects.blender.org/blender/blender/pulls/141011
This PR only shows the Windows on ARM limitation on Windows
on ARM devices. Also some tweaks to the messages were made.
Has been tested on Linux, Windows x86 and Windows on ARM.
Pull Request: https://projects.blender.org/blender/blender/pulls/141023
Move number shortcut keys for isolating collection to outliner space.
Resolves#140651
Same operator is also used in the collection list from the view3d N-panel,
video demonstration includes that part as well to ensure it is unaffected.
Pull Request: https://projects.blender.org/blender/blender/pulls/140653