The existing behaviour traces back from pre-2.5 era. It seems like a
general sanitization technique for any operator which may change the
view transformation.
While it still makes sense to switch to PERSPECTIVE mode when actively
calling a view operator, I don't think the same should be said by simply
switching the active scene.
This PR makes it so a temporary flag is set when switching to a scene that
has no camera. This flag is kept around until we deliberately change
perspective mode. We can eventually make it so the flag is reset again in
more occasions. But the patch is good as it is.
Ref: !146364
This deprecated function looks to have been long forgotten. Both import
and export are already available as `bpy.ops.wm.alembic_import` and
`bpy.ops.wm.alembic_export`.
Pull Request: https://projects.blender.org/blender/blender/pulls/146556
This patch reorders the inputs of some of the compositor nodes
accordingly to their importance. The importance is already quantified
internally using the domain priority of the input, so we needn't make
any subjective judgement and just order by the priority.
This breaks forward and backward compatibility if input indices were
used as opposed to input identifiers due to the different order.
Handling compatibility is not impossible, but is difficult, and it was
already ignored in many past node changes.
Pull Request: https://projects.blender.org/blender/blender/pulls/146311
Renames `'RADIAL_MENU'` to `'PIE_MENU'`, to more clearly describe what
it relates to. Internally this was already done with e425faf696.
This is a 5.0 compatibility breaking change. But I couldn't find any
usages of it in bundled scripts.
Pull Request: https://projects.blender.org/blender/blender/pulls/146651
Currently `MEM_delete` frees pointers expecting that they match to the
pointers allocated with `MEM_new`, otherwise it can cause undefined
behavior when freeing memory(using `--debug-memory` flag breaks in
place, if not it can corrupts other data, generating a incorrect back-traces).
However polymorphic objects lifetime can be managed by pointer of their
most derived type or by any pointer in their ancestor tree that defines
a virtual destructor, which sometimes can differ in offset when pointing to
the same object.
This changes ensures the correct pointer is being freed, by using the pointer
to the most derived type (returned by`dynamic_cast<void *>(...);`[0]).
----------
[0] = [dynamic_cast](https://en.cppreference.com/w/cpp/language/dynamic_cast.html): `a) If expression is a pointer to (possibly cv-qualified) void, the result is a pointer to the most derived object pointed to by expression.`
-----------
As an example, given the followings structs:
```c++
struct A {
int a;
virtual ~A() = default;
};
struct B {
int b;
virtual ~B() = default;
};
struct Derived : public A , public B {
int c;
};
std::unique_ptr<A> a_ptr = std::make_unique<Derived>();
std::unique_ptr<B> b_ptr = std::make_unique<Derived>();
```
Using std smart pointers to manage `Derived` objects can be done with `A`
or `B` pointers.
However if a `Derived` object memory is managed with `MEM_delete`,
using a `B` pointer for freeing the memory currently may silently break Blender,
since it don't accounts for the full object memory layout, the `dynamic_cast<void *>(ptr);`
cast gives a more safe pointer for freeing the memory.
Note that object destruction is successfully handled through the virtual destructor.
----------
This instead could be an assert to ensure polymorphic objects to be deleted
as the most derived object type.
Pull Request: https://projects.blender.org/blender/blender/pulls/146269
The image log render tests uses an EXR that contains INF. Workbench
with specular enabled will mix these INFs, but there is a difference
in behavior between OpenGL and Vulkan.
In OpenGL mix(0.05, INF, 0.0) will result in INF
In Vulkan this results in NaN.
This should eventually be solved in the engine to ensure consistency.
For now we disable the render test and document the limitation.
Pull Request: https://projects.blender.org/blender/blender/pulls/146648
With !142495, the minimum brush radius became 0.5px, so clamp to that
instead of 1px to allow drawing single pixels. Also change how drawing
with anti-aliasing disabled works to avoid 1 pixel brush strokes not
always appearing. Now when AA is disabled, snap the cursor to either
the corners or centers of the pixels, depending on if the diameter is even
or odd, respectively.
Fixes#71403
Pull Request: https://projects.blender.org/blender/blender/pulls/146384
This commit bumps up the time delay while running these tests from
1/60th of a second to 1/6th of a second to ensure that the new window
is created prior to the rest of the test running while.
Pull Request: https://projects.blender.org/blender/blender/pulls/146309
Call translation function in: Menu socket tooltip and node description tooltip.
- Menu Socket Tooltip
- Node description tooltip
- If node description is empty, not add space before idname.
Pull Request: https://projects.blender.org/blender/blender/pulls/146126
Caused by caf11a2b9f
Above commit removed the assignment of "id" to the context (and instead
stored the "session_uid" in the button context). This is all good for
the fix it did, but... we are not getting the correct ID now in the
operator (instead, the id in context is the last item made active [by
selection] it seems).
Anyhow, to restore previous behavior, just bring back "id" to the
context (leaving the "session_uid" untouched), so we have the data to
work with in the operator.
NOTE: might be possible to retrieve the correct ID from the
"session_uid" as well -- havent looked into this much though since this
is ore tied to actual buttons it seems...
Pull Request: https://projects.blender.org/blender/blender/pulls/146599
Always name the imported action slot "Slot" when importing BVH and FBX
files, for ease of switching between imported Actions.
Note: this is only adjusting the old Python-based FBX importer.
Previously the slot would be named after the file itself (BVH) or had a
combination of the animated object, the animation "stack", and the
animation "layer" (FBX). This meant that every imported animation would
get another slot name, making Action switching tedious.
Pull Request: https://projects.blender.org/blender/blender/pulls/146601
Maintenance update to the 2D Animation template.
The following changes were made:
- Remove Timeline.
- Enable DopeSheet footer.
- Save (with compression).
- Enable "By Active Tool" in tool shelf. (suggested by the GP module)
- Remove Compositing and Rendering workspaces
All changes done in a 1920x1090 window, factory startup, without a
preferences folder.
See PR for details and screenshots.
Pull Request: https://projects.blender.org/blender/blender/pulls/146359
Due to an incorrect assumption float buffers were converted to sRGB
values when uploading to an sRGBA8 texture. This is done when rendering
flames in workbench and resulted in to bright renders.
This PR removes sRGB encoding when uploading float values to sRGBA8 textures.
Fixes:
- render/openvdb/fire
- render/openvdb/principled_blackbody
- render/openvdb/smoke_fire
Pull Request: https://projects.blender.org/blender/blender/pulls/146636
It may be worth reconsidering how to organize these menus and add consistency
with geometry nodes. However we should at least avoid putting these as 5 new
top level entries.
Ref #141936
Pull Request: https://projects.blender.org/blender/blender/pulls/146607
Before the render graph was introduced we relied on a submission
resource tracker that allowed to resuse resources in the next frame.
With the introduction of the render graph we slowly migrated the
resource tracking to the render graph and eventually also moved the
whole discard pools to the submission runner.
There was still one part that 'used' the legacy resource tracker, but
actually didn't as it never reused resources. This PR removes the
resource tracker and migrate the push constants to use the render graph
to update a single buffer per shader.
Pull Request: https://projects.blender.org/blender/blender/pulls/146627
The RNA icon was rotating on the wrong direction.
Technically this is mostly a DNA helix, but even RNA can be a
double-helix sometimes. And both cases (RNA and DNA) are supposed to
have a right-hand orientation.
This PR also removes the RNA_ADD icon which is not used anywhere.
Based on suggestion by Brady Johnston.
Ref: !146600
MTLAccelerationStructureMotionCurveGeometryDescriptor.controlPointCount should specify the per-step control point count. Although the previous initialisation wasn't manifesting as incorrect behaviour it was technically wrong.
Pull Request: https://projects.blender.org/blender/blender/pulls/146568
This function would only call `IDP_FreePropertyContent` on the items it
is releasing from its buffer, when reducing the length of the array.
However, it needs to call `IDP_ClearProperty` instead, otherwise some
invalid 'dirty' data is kept in the released properties, e.g. the `len`
value for groups or arrays.
Not sure how this never bit us before, but the recent asserts added by
6cb2226f13 did trigger in that case, once the code was re-using these
released IDProps.
Pull Request: https://projects.blender.org/blender/blender/pulls/146326
Currently accessing these three separate boolean layers can
actually _create_ other attributes. Currently this can cause a
crash because it invalidates the pointers to other CustomData
layers. But it's also just logically wrong. Instead add functions
`vertex_selection_ensure()`, `edge_selection_ensure()` and
`pin_ensure()` to get the old behavior, and make the property
access just give empty collections if there is no boolean layer.
Part of #145877.
Pull Request: https://projects.blender.org/blender/blender/pulls/146611
The one-sample Monte Carlo estimator of the radiative transfer equation
is
<L> = T(t) / p(t) * (L_e + σ_s * L_s + σ_n * L),
Which means we can also use another p(t) than majorant * exp(-majorant * t)
for sampling the distance. Thus, we use the baked σ_max for distance
sampling, but adjust the majorant when we encounter a density that is
larger than σ_max.
Note that this is not really unbiased because such scaling is not always
applied, but seems to work well in practice when the majorant is
reasonable.
Pull Request: https://projects.blender.org/blender/blender/pulls/146589
Undo compression stored evaluated mesh positions instead of base mesh
positions when deform modifiers were active.
**Solution** : Modified `compress_fn` to compress `orig_position` data
when available (deform modifiers active), falling back to regular
position data otherwise.
Pull Request: https://projects.blender.org/blender/blender/pulls/146498
This implements a basic render time pass,
using HW-based counters to minimize render time impact.
x86-64 uses the TSC instruction for timing, while ARM64 uses the cntvct_el0
register. In theory TSC is not always super reliable (e.g. old CPUs had it tied
to their current clock rate), but for somewhat recent CPU models it should
be fine. If neither is available, it falls back to `std::chrono::steady_clock`,
which should still be very fast.
The output is in milliseconds of CPU-time per pixel.
Pull Request: https://projects.blender.org/blender/blender/pulls/125933
Before this change, any accumulated errors from OpenImageIO would be
lost and a nonsensical use of `errno` would be used instead.
An example of the new error log:
```
00:23.188 image.write | ERROR OpenImageIO write failed: sgi image resolution may not exceed 65535x65535, you asked for 65536x1
```
Pull Request: https://projects.blender.org/blender/blender/pulls/146554
The problem was that the `Pen Tool` would not add keyframes when Auto
Keying was enabled.
This also fixes a crash that could happen when auto keying was enabled
and no keyframe existed.
Pull Request: https://projects.blender.org/blender/blender/pulls/146549
With Blender 5.0 a few modifier assets are bundled. This makes the
Geometry Nodes modifier even more of a special modifier which isn't
intended for many people to use.
As such this PR moves it to the end to be a bit less prominent.
| 4.5 | PR | PR |
| - | - | - |
|<img width="217" alt="Screenshot 2025-09-22 at 16.10.17.png" src="attachments/c12fedc4-549e-4b7b-bc28-c990e17a679e">|<img width="182" alt="Screenshot 2025-09-22 at 16.11.18.png" src="attachments/ce80702e-95dd-441a-8d36-c41f64d03a64">|<img width="214" alt="Screenshot 2025-09-22 at 16.11.45.png" src="attachments/5b07d5e9-b133-4fc5-a5a4-a1989929e58e">|
The PR column shows the changes proposed here in two scenarios: with and another without Unassigned assets.
Ref: !146590
As discussed in the last geometry nodes workshop, the viewer node now
needs the flexibility to handle new features: bundles, closures, and
lists. This PR takes the opportunity to add support for an arbitrary
number of items. Values are displayed directly in the node are all
displayed in the spreadsheet, where a new tree view allows selecting
which data to view, including nested bundles. Lists, single values,
bundle items, and closure signatures are all visualized in the spreadsheet.
We also prioritize the existing viewer behavior that views a geometry
together with a field, so various special cases are added in the viewer
activation to handle this.
Bundle hierarchies are displayed in the new tree view in the spreadsheet
sidebar. The spreadsheet itself just displays bundle identifiers, types,
and the contained values. Design wise, there might be more integrated
ways to present that hierarchy, but doing it in the tree view is a very
simple starting place.
Interactively added viewer node inputs are now removed automatically
if the link is removed. There is a new "Auto Remove" flag for each input
controlling this behavior. It can't be enabled for all inputs all the time
because then one couldn't e.g. setup the viewer node properly using
a script (which might add a few inputs first and then creates links).
Also when viewer items are added with the plus icon in the sidebar,
they are not automatically removed immediately.
https://code.blender.org/2025/07/geometry-nodes-workshop-july-2025/#view-any-data
Co-authored-by: Hans Goudey <hans@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/144050
This probably got broken when expanding was changed to use foreach ID. In the
old code the screen was not part of expanding.
Also adds the appropriate flags for workspace pinned and sequencer scenes.
This was causing issues in particular with the new video editing template, where
appending a workspace would append the Edit scene.
Fix#146156
Pull Request: https://projects.blender.org/blender/blender/pulls/146164
- Show unassigned scene assets directly under Assets.
- Use Icons for Assets label.
- Only show "Scenes" when there are Assets.
- Don't show scene assets on the "Scenes" list.
The design about changing the operator default behaviour will be
addressed separately. This patch only changes the UI.
Design ref: #145522
Ref: !146574
`preview_id_copy_free` was trying to do its own version of
`BKE_libblock_free_data`, instead of calling directly that function.
This could easily lead to missing cleanup when modifiying ID management,
and since these IDs are managed by general ID API, there is no reason
not to do the same on destruction.
This is extracted from !146046 'making ID::runtime an allocated struct'.
If nodegroup is linked or marked as asset, show different icons in breadcrumbs inside node space.
Note: Packed data-blocks have to be tackled separately since they are not in main yet (!133801).
Ref: !146573
Mainly:
- Move 're-used' ID reset from `BKE_id_copy_in_lib` to lower-level
`BKE_libblock_copy_in_lib`.
- Remove call to `deg_tag_eval_copy_id` in `IDNode::init_copy_on_write`,
as this is already done in `deg_expand_eval_copy_datablock` for all
CoW IDs anyway (both re-used and newly allocated ones).
This is extracted from !146046 'making ID::runtime an allocated struct'.
Pull Request: https://projects.blender.org/blender/blender/pulls/146593
On its own, the main functionality of the Radial Tiling node
is the ability to divide a 2D Cartesian coordinate system into
as many radial segments as specified by the "Segments" input.
Each segment has its own affinely transformed coordinate system,
provided through the "Segment Coordinates" output, which can be
used to tile textures in a radially symmetric manner.
Additionally, a unique index is provided for every segment through
the "Segment ID" output, the width of each segment at Y-coordinate
of the "Segment Coordinates" output without normalization = 0 is
provided through the "Segment Width" output and the rotation value
of the affine transformation of the coordinate system of each segment
is provided through the "Segment Rotation" output.
The roundness of the coordinate lines of the "Segment Coordinates"
output can be controlled through the "Roundness" inputs.
This can be used to make the coordinate systems of the segments
a mix of Cartesian and polar coordinates.
Lastly, the lines of points of the "Segment Coordinates" output with
constant Y-coordinates have the shape of polygon with rounded corners,
which can be used to procedurally create rounded polygons.
Pull Request: https://projects.blender.org/blender/blender/pulls/127711
The keymap `km_image_paint` righfully includes both
`VIEW3D_AST_brush_texture_paint` and `IMAGE_AST_brush_paint` since
painting can be done in both Editors.
So we want to improve upon polling.
Three parent classes involved: `ImageAssetShelf`, `View3DAssetShelf`,
both inherit from `BrushAssetShelf`
`IMAGE_AST_brush_paint` (inherits from `ImageAssetShelf`) was already
checking for being in paint mode (so that Asset Shelf already wasnt
showing), but `VIEW3D_AST_brush_texture_paint` (inherits from
`View3DAssetShelf`) was permissive (doesnt have specialized poll, relies
on the "mother" classes `BrushAssetShelf` which only checks for an
active object and if that active objects `mode` equals the Assets Shelfs
"mode"). This can be true if you have an object in Texture Paint mode in
the 3DView.
So to make shelves like `VIEW3D_AST_brush_texture_paint` **not** pass
their poll in the Image Editor, add a specific poll case.
NOTE: the report also mentiones a crash when actually selecting a "bad"
brush from the "bad" asset shelf. Since that scenario is now impossible
to reach, the crash has not been investigated further.
Pull Request: https://projects.blender.org/blender/blender/pulls/146071