The placeholder text of this property already says "Object", so the label saying
the same thing is quite redundant. It usually takes up extra space and cuts off
the names of selected objects, so having the label is arguably more inconvenient
than helpful.
This patch removes said label, giving more room for the object selector.
Pull Request: https://projects.blender.org/blender/blender/pulls/147338
The current placement of the operators make it easy for them to blend in with
other group nodes in that menu.
This patch adds an icon to better indicate the nature of these operators, and
have separators between it and other entries of the menu.
Pull Request: https://projects.blender.org/blender/blender/pulls/147330
Without this check, the dropdowns in Glass BSDF and Metallic BSDF show up twice
because layouts added with `add_default_layout` are drawn once at the start of
`ui_node_draw_node` and a second time in the loop.
Pull Request: https://projects.blender.org/blender/blender/pulls/147329
This reduces the constant overhead for the evaluation of the Geometry Nodes
modifier. Currently, it has to detect which gizmos are currently used, because
it has to potentially trigger additional evaluation to make the gizmos work.
Part of that is detecting which inputs are used, because gizmos for inputs that
are not used are hidden. Previously, it would compute whether each input is
used. This patch changes it so that only the inputs that have gizmos are
checked.
This reduces the evaluation time in my test from 2.2ms to 1.5ms.
Pull Request: https://projects.blender.org/blender/blender/pulls/147286
Seems to have been introduced by 1104c69a0e.
In `BKE_paint_copy` the `src->runtime` can be `nullptr` in some cases.
This adds a check to make sure to only copy the settings
when `src->runtime` exists.
Pull Request: https://projects.blender.org/blender/blender/pulls/147304
The "Add Reroutes" operator does not ignore virtual sockets when creating reroutes.
This has the unintended side effect of creating new sockets when attempting to link with said sockets.
This patch adds a check that explicitly skips over them.
Pull Request: https://projects.blender.org/blender/blender/pulls/147306
This PR renames "Fac" sockets to "Factor" in the user interface across
shading and compositing nodes, while keeping the identifier unchanged
for scripting compatibility.
The only texture node affected by this renaming (Color Ramp) was not
updated, as it still uses the old style node declaration and this is
legacy anyway.
This also changes "Bright" to "Brightness" in both shading and
compositing.
Ref #96219
Pull Request: https://projects.blender.org/blender/blender/pulls/140498
Since 2.80, the 3D Cursor is actually 3D, but it is still not clear
which way it points.
To improve this, the following style tweaks were done:
- Use theme axes colors for the 3D Cursor lines, a bit desaturated.
- Draw the negative axes a little darker, to tell at a glance its
direction.
- Replace the red/white lines with black/white for improved contrast
and to not conflict with X axis colors.
- Make it over all smaller in size, since it's already prominent by its
colors.
See PR for details and screenshots.
Pull Request: https://projects.blender.org/blender/blender/pulls/146927
This was copying the toolsettings from `scene_dst` which, confusingly,
will work because the ID got shallow copied before running
`scene_copy_data` so the pointer to `scene_dst->toolsettings` is the
same as `scene_src->toolsettings`.
This changes that line to copy from `scene_src->toolsettings` to
`scene_dst->toolsettings` to avoid any future confusion.
Move the Copy Global Transform core add-on into Blender's code.
- The entire extension was one Python file. This PR basically splits
it into two, one for operators (in `bl_operators`) and the other for
UI panels. Those panels are registered in the 3D viewport's sidebar,
which were registered in `space_view3d`, but I made the decision
here to create a new file `space_view3d_sidebar`, because the main
file is getting too large and difficult to navigate. This PR puts
the global transform panel in this file. After this is merged, I
will do refactors to move the rest of the sidebar panels here as
well.
- `AutoKeying` class was moved into `bpy_extras/anim_utils.py` so that
it's reusable and also accessible from API, since it's generally
very useful. There were discussions about putting this somewhere,
but for now, I chose against it because creating a new file would
also mean PR would have to affect documentation generation, and
would complicate things. If we want to, we can probably create a new
module in the future.
- Little tweaks to labels and descriptions. Now that they exist
outside of the add-on context, and exist without the user explicitly
enabling them, they need to be more descriptive and tell users what
they actually do. They also need to conform to Blender's GUI
guidelines. Also tried organizing files a little by grouping
objects.
- Add-on properties (which included word `addon` in the name) have
been registered in C++, on `scene.tool_settings` with `anim_`
prefix.
Pull Request: https://projects.blender.org/blender/blender/pulls/145414
Goal of this PR is mainly to improve flexibility and of VSE layout and
screen space efficiency.
Previously, strip properties were displayed in timeline sidebar. This
was limiting, because if you want to display as much properties as
possible, the timeline area had to be taller, but this was at the
expense of space available for preview. However there is plenty of
space in properties editor, which is mostly unused in VSE. Therefore
strip properties were moved to the properties editor.
ID pinning and path displayed in top section aren't drawn, since strip
is not an ID and can not be pinned. Since there is more space for
properties, various panels are changed to be open by default.
Mainly transform and time panels, since they are used often.
There is one minor change: The waveform display property
of sound strip was previously hidden, if timeline area had per strip
waveform display overlay set. This is no longer possible to do and the
property is always visible.
Pull Request: https://projects.blender.org/blender/blender/pulls/140395
Note that this commit keeps the same behavior as before this commit,
except for the newly introduced vector of archived libraries, which is
reset to empty. This behavior may have to be further tweaked still.
Root of the issue was from original commit enabling Library ID copying
(87a4c0d3a8), but the later move to an allocated runtime pointer
using a copy constructor in 87a4c0d3a8 made this behavior even
more confusing/hidden.
In general, what is re-used/copied in runtime data should be explicit,
such that by default new data can be assumed reset to their default
value there in the copy ID.
The loading step of the irradiance validity was
left unfinished for some reason. It was loading
the same validity for all 8 corners and copying
the same value for all 4 Z slices.
There is another bug, which is that the default
backface validity of surfels is wrong. This means
that the tests are passing because of this bug
as the validity is always 1 everywhere.
Pull Request: https://projects.blender.org/blender/blender/pulls/147200
Remove the legacy (aka backward-compatible) API from `bpy.types.Action`:
- `action.fcurves`
- `action.groups`
- `action.id_root`
These have been deprecated since the introduction of Slotted Actions in
Blender 4.4. They operated on a subset of the Action's data, which was
not guaranteed to be the correct subset, given the Action's new
possibilities. This was to give add-on developers time to migrate to the
new API, and has always been intended to be removed in Blender 5.0.
See #146586 for more info.
Pull Request: https://projects.blender.org/blender/blender/pulls/146626
This node gives access to the integer coordinates of the the voxel that is
currently being evaluated by a field. It can be used together with e.g. the
Integer Math and Sample Grid Index node to sample neighboring voxel values.
Previously, one could only get the position of the voxel in object space.
Since sometimes field are evaluated on tiles of many voxels, just having the
voxel coordinates can be misleading. Therefore, this same node also outputs
whether it is a tile and the extent of the tile (which is 1 for normal voxels).
Pull Request: https://projects.blender.org/blender/blender/pulls/147268
This basically implements the same optimization #147271 did for the Sample Grid
Index node.
The code had to change a little bit more because for some reason `GridSampler`
did not work with unsafe accessors. However, one can just use the lower level
simplers directly instead.
The performance improvement is not as large as in the Sample Grid Index node,
because node does way more stuff with interpolation etc. However, I still
measure a 20% speedup.
Pull Request: https://projects.blender.org/blender/blender/pulls/147280
Fixes link drawing for grids and single values connected through a Simulation
Zone. They are currently drawn as dashed field links and this PR adds
Simulation Zone to special link inference that is currently used for
Repeat Zone.
Pull Request: https://projects.blender.org/blender/blender/pulls/147035
Mitigate the problem reported by #145877 where expanding the outliner
eventually runs out of stack memory.
The ViewLayer.despsgraph and node sockets would expand indefinitely.
I'm not sure if the issue is solved as expanding makes the outliner
unusably slow.
The BMesh::selectmode is expected to be set when performing any
selection operations on the BMesh. While it wasn't possible to set
the select_mode to zero from Python, this meant assigning the attribute
from one BMesh to another could fail with an exception.
Aside from this, selection logic wouldn't work as expected.
Ref !147278
It seems `ui_handler_region_menu/ui_handle_menu_event` doesn't handle
any events other than press/double-click as they return `WM_UI_HANDLER_BREAK`.
`KM_CLICK` event is not possible due to above case. i.e. clicked element
can't be set active inside `ui_handle_view_item_event()`. (Guess `HANDLER_BREAK` also
prevents from looping over keymap to find relevant keyitem pair to invoke the operator?
Didn't check in details). To fix this, add a condition that checks whether button is in
popup menu. If yes, force active the pressed button and keep the popup open.
Pull Request: https://projects.blender.org/blender/blender/pulls/147047
Changes the class of the Sample Grid and Sample Grid Index to be
`NODE_CLASS_GEOMETRY`. This is consistent with the other grid-related nodes
and the Sample Index node.
Pull Request: https://projects.blender.org/blender/blender/pulls/147266
Previously, Repeat Zones with non-static iterations would be fully
disconnected.
With this patch, they behave as if they have 0 iterations.
Co-authored-by: Jacques Lucke
Pull Request: https://projects.blender.org/blender/blender/pulls/147211
When a tab had any instanced panel, all instanced panels were drawn in
this tab. This PR adds same poll function, which is used for adding
panels for drawing them.
Pull Request: https://projects.blender.org/blender/blender/pulls/147238
This implements two optimizations for the Sample Grid Index node which caused a
lot of overhead. * Use an unsafe accessor which does not register itself with
the tree. This is necessary because we create many of these accessors in
parallel and they cause lots of thread contention. Using the unsafe accessor is
fine because we know that the grid won't change while we iterate over it. *
Access the grid when constructing the multi-function instead of in the `call`
function. This reduces similar thread contention when registering the tree
access token.
Overall, this results in a 4x speedup in my test with sampling neighboring
voxels.
The same optimization can probably be implemented for the Sample Grid node, but
that's not included here.
Pull Request: https://projects.blender.org/blender/blender/pulls/147271
b2eaf812b1 made sure that the min offset alignment for text rendering
was used to calculate the correct offset. However the change didn't
update the region to be uploaded to the GPU. The artifacts are caused by
reading from allocated, but uninitialized memory.
This PR fixes this by calculating the correct region to copy to the GPU.
The artifact didn't appear on AMD/NVIDIA GPUs as their alignment are
4 bytes. Intel GPU is 64 bytes.
Pull Request: https://projects.blender.org/blender/blender/pulls/147265
VSE doesn support pure emissive colors when rendering, but weren't
showed inside the preview. This was a limitation when the background
checkerbord is draw. It renders the alpha of the overlay to 1.0 making
the background be drawn on top of the image, hiding the pure emissive
colors.
This PR fixes this by clearing the alpha. This will render the
checkerboard below the image.
Another solution would be to set the alpha to zero in the theme, but that
adds confusion as theme colors will still be able to alter the support of
pure emissive colors.
Pull Request: https://projects.blender.org/blender/blender/pulls/146562
Subimage tracking is done per layer, but workbench depth of field
required to track per mipmap level. This PR refactors sub image tracking
and implements tracking the state per mipmap level to ensure that
the correct pipeline barriers can be generated.
Most platforms wouldn't show any artifacts as the pixel layouts are the
same, but there it is a violation of the spec.
Pull Request: https://projects.blender.org/blender/blender/pulls/147207
Add sound pitch correction functionality, so that retimed sound strips
can preserve their original pitch.
This has been implemented as a GSoC 2025 project. Actual pitch
correction is done with Rubberband library, which has been already
included into Blender 5.0 library builds; and then most of the other
code has been in Audaspace, which was already updated within Blender
tree earlier.
So this PR just flips on Rubberband build option, and adds the
checkbox to VSE sound strips for pitch correction (on by default for
newly created sound strips). Pitch correction works with both
simple whole-strip retiming, as well as more complex retiming setups
where different parts of the strip use different speeds.
Co-authored-by: Aras Pranckevicius <aras@nesnausk.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/143347
The pattern here is very similar to `SocketValueInferencer`. The goal is to make
it easier to reuse this functionality without calling a higher level wrapper
like `infer_group_interface_usage`. This is especially useful when determining
the usage of just a subset of group inputs. I intend to use that to speedup the
detection of what gizmos should be displayed in
`foreach_active_gizmo_exposed_to_modifier`.
Pull Request: https://projects.blender.org/blender/blender/pulls/147234
The Spin operator generated faces with flipped normals because
extrude_face_region always flipped the input faces.
A new skip input flip option was added to extrude_face_region,
allowing the operator to preserve the original orientation when
needed and avoid creating duplicates with flipped normals.
Ref !146203
The operator moves selected UVs, using the num-pad for directional keys:
Modifiers control the units:
- UDIM / UV unit (NUMPAD KEY)
- Dynamic grid unit (CTRL + NUMPAD KEY)
- Pixel unit (SHIFT + NUMPAD KEY)
Implements design task #78405.
Ref !139608
Follow up to #73208, hiding unselected was skipping disconnected
vertices as well as disconnected edges.
Now vertices without connected edges are hidden as well.
Ensure unselected loose edges are also hidden when using Hide
Unselected (Shift+H) in Face Select mode.
This makes the behavior of hide unselected consistent,
since loose edges with no visible face should not remain displayed.
Ref !147158
The operator passed edges into BM_edge_exists, which asserts both
inputs must be vertices. Mixed selections are now rejected with an
error message, preventing the assert and crash.
Ref !147239