During animation playback, `screen_animation_step_invoke` takes a
reference to the active screen timer to use throughout its processing.
However, as part of transitioning frames (during which frame change
hooks are invoked) this screen timer may be removed. In the case of the
mentioned report, this happens because the `frame_change_post` hook
called `bpy.ops.screen.animation_cancel` which removes the timer as part
of its processing.
We need to recheck if our timer is still active and available after
transitioning frames but before continuing. If no longer available, we
should be able to return early at this point.
Pull Request: https://projects.blender.org/blender/blender/pulls/147167
The main goal is to simplify reusing this drawing code when drawing properties
for group input/output nodes. This is not implemented as part of this patch
though. The UI shouldn't change, except that the old code had an incomplete
`field_socket_types` list.
Pull Request: https://projects.blender.org/blender/blender/pulls/147231
Add two common building blocks for volume-grid workflows.
- **Voxelize** turns all active tiles into fully dense voxels. For fog
volumes, this will mean the "inside" sparse tiles will become
individually adjustable voxel values.
- **Prune** is the opposite action as voxelize. It can be important for
certain workflows when large regions of constant values are created.
The node can collapsed those regions into more efficient tiles or
inner nodes. There are a few modes which are each useful for
different use cases.
Pull Request: https://projects.blender.org/blender/blender/pulls/147148
This PR makes it so that when the `delta_time` attribute does not exist
or is equal to zero, the Grease Pencil Strokes will default to one
second to be drawn.
This feature existed in the legacy modifier but was not implemented in
GPv3.
Pull Request: https://projects.blender.org/blender/blender/pulls/146950
Currently, the 'Reset Curve' button, corresponding to the
`BKE_curvemap_reset` function, converts a predefined negative slope
curve to a positive slope by inverting the order of y axis points. This
has the implicit dependency on these points being at inverse x
positions. For most preset curves, this works well, but for the round
curve, which has points at 0, 0.5, 0.86, and 1, this condition does not
hold true.
To fix this, take the inverted x value for a given control point
instead of the raw value. For the above example this means that the
round curve now has x values at 0, 0.14, 0.5, and 1.
Pull Request: https://projects.blender.org/blender/blender/pulls/147008
Explicitly set the transform of a grid.
The new transform can fail to be applied if the input transform isn't
invertible or for some extremes of scaling (0 or combinations of
negative and positive) and numerical errors with `openvdb`. If a
transform is not applied an error is raised and the `Is Valid`
returns false.
Pull Request: https://projects.blender.org/blender/blender/pulls/146824
This was an issue with creatiung the correct `reference_relations` between
input and output sockets. Those are necessary for the automatic lifetime inferencing.
* Move Shader before Displacement
* Organize Shader submenu by mix/add, surface and volume
* Alphabetically order Color submenu
* Move Script into utilities
Pull Request: https://projects.blender.org/blender/blender/pulls/147212
When an old file that uses regular subdivision is loaded, the adapative
settings were not applied to the existing modifiers if they weren't
already using adaptive subdivision. This results in the settings
remaining at their 0 defaults which can be surprising. E.g. the
`dicing_rate` of 0 is clamped to 0.1px which is probably not intended.
Make sure to set the correct defaults in all cases now.
Pull Request: https://projects.blender.org/blender/blender/pulls/147164
The issue was that the "Clear Keyframes" operator was missing call
to notify the dependency graph, and thus objects were still animated
even though the keyframes were deleted.
Pull Request: https://projects.blender.org/blender/blender/pulls/147216
This is to make it easy to get the bpy paths to bpy.context.property for
example. Before this change, the easiest way was to use the clipboard
bpy.ops function. However this would make the python scripts using this
fragile as it we do not have full control of what is stored in the
system clipboard.
Pull Request: https://projects.blender.org/blender/blender/pulls/147116
All looking-glass icons in Blender were left-handed.
Most OS, applications, websites, even a simple image search shows that
these icons are more often depicted right-handed.
Flip all icons that include a looking-glass.
See PR for details and descriptions.
Pull Request: https://projects.blender.org/blender/blender/pulls/147206
Adds four new grid operator nodes that wrap OpenVDB's differential
operators. All nodes take a grid input and output a grid, potentially
with a different data type.
New nodes:
- Grid Curl: Calculate curl of vector field (Vec3 → Vec3)
- Grid Divergence: Calculate divergence of vector field (Vec3 → Float)
- Grid Gradient: Calculate gradient of scalar field (Float → Vec3)
- Grid Laplacian: Calculate Laplacian of scalar field (Float → Float)
These operators enable vector calculus operations on volume grids for
effects like flow analysis, vortex detection, etc.
Co-authored-by: Hans Goudey <hans@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/146845
Code would early-return on failure, forgetting to free the xxhash state.
Use the `BLI_SCOPED_DEFER` util to ensure the state is always properly freed
when it gets out of scope.
Pull Request: https://projects.blender.org/blender/blender/pulls/147189
## Fix: Error in Node Wrangler UI when in Sequencer mode
Node Wrangler tried to find the current scene compositing node tree,
even when there was none. This could happen if working on a sequencer
compositing modifier.
This commit hides the Save This Image button when not in Scene
compositing mode.
## Fix: Error in Node Wrangler's Save Image op when file path is empty
If the file path is empty in Save Image operator, it returns `None`
and errors out.
This commit makes it return `{'CANCELLED'}` early in that case.
## Add webp to list of file formats for Save Viewer
## Fix: Error when Viewer Node image renamed and saved
The "Viewer Node" image that contains the current compositing node
tree's viewer data has a hardcoded name by default. However it can be
renamed by the user, which will make the Save Viewer operator fail.
This commit extracts a utility function to get the current viewer
image based on its properties, and simply saves that.
In addition, this avoids having to change the area type to an image
editor to get the current viewer node, and restoring the node editor
afterwards. This action did not restore the current node tree if the
editor was inside a node group.
## Rename "Save This Image" to "Save Viewer Image"
When calling the operator through Menu Search, it is not clear what
"Save This Image" refers to. This commit renames the operator to "Save
Viewer Image", but keeps the old name for the button label.
Pull Request: https://projects.blender.org/blender/blender/pulls/147085
This patch swap position attribute initialization and edge construction
of boolean result. Logic is what both of these steps are last, all
future code do not build mesh topology but only maintain user
attributes. So at this point mesh already must be valid. But future
change of edge calculation (#132492) code will requer this mesh
validation to be done as part of the step. So when edges will be
calculated mesh must already be built, valid and contains position
attribute.
Pull Request: https://projects.blender.org/blender/blender/pulls/146229
Minimal changes to make Rigify use the current Action API (introduced in
Blender 4.4) instead of the legacy API (removed in 5.0).
Most of the refactoring consists of:
- Find the right `Channelbag`
- Replace operations on `Action` with operations on that `Channelbag`.
I didn't manage to test all code, because some code paths are very hard
to follow, and others seem to only be available for legacy rigs.
This is part of #146586
Pull Request: https://projects.blender.org/blender/blender/pulls/147060
Convert the code in `scripts/modules/animsys_refactor.py` from the
legacy Actions API to the current API.
The code was made for very old rigs (2.70 and older, last updated for
Caminandes in 2014). The updated code seems to work on a Caminandes test
file, and produces the same logging on the terminal as in Blender 4.3
(before slotted Actions).
No functional changes.
This is part of #146586
Pull Request: https://projects.blender.org/blender/blender/pulls/147060
Remove the use of `action.fcurves` in the Bake Action operator, replacing
it with the current API (introduced for slotted Actions in Blender 4.4).
No functional changes.
This is part of #146586
Pull Request: https://projects.blender.org/blender/blender/pulls/147060
Adjust various unit tests so that they no longer use the legacy Action
API (which was deprecated in Blender 4.4 and will be removed in 5.0).
No functional changes.
This is part of #146586
Pull Request: https://projects.blender.org/blender/blender/pulls/147060
Regression in e65524382, where what should have been essentially
(window_width / text_width) became (window_width + 1/text_width)
which is not the same at all! What the code was trying to do is
((window_width + 1) / text_width)
Most easily visible in VSE template because it defaults to
MM:SS+FRAME display format, but could be seen in other
animation related windows.
Pull Request: https://projects.blender.org/blender/blender/pulls/147198
This fixes a memory leak that could occur with the
Grease Pencil Pen Tool. If the Pen Tool exited during
the initialization the `GreasePencilPenToolOperation`
object would not be deleted. The Pen Tool could end
in initialization if the `Selection Mode` was not `Points`
This problem only effected Grease Pencil, because
the `Curves` Object code properly exited.
Pull Request: https://projects.blender.org/blender/blender/pulls/147170