Commit Graph

154313 Commits

Author SHA1 Message Date
Lukas Tönne
8697bffe22 Fix #146946: Breaking a node zone crashes on valid pointer assumption
The Node Wrangler addon has a _Reset Nodes_ operator that can remove the input
node of a node zone. This crashes in reference set updates because the code
expects valid input/output node pairs in each zone.

The fix is two-fold:
1. Finding zones for the runtime now returns an empty result to ensure no
  invalid node pointers are being accessed. This should not happen in practice,
  all operators should make sure zone relationships are not broken.
2. The node wrangler addon is updated to ignore all zone types, including the
  newer repeat, closure, and for-each-element zones. The type filtering was
  outdated and now uses the `bl_idname` consistently.

Pull Request: https://projects.blender.org/blender/blender/pulls/147028
2025-09-30 10:49:20 +02:00
Falk David
cd40f5b0f1 VSE: Story Tools: Sync object modes when switching scenes
Currenty, when switching from one scene to another, the mode
of the active objects (before & after) is left untouched.

This becomes a workflow problem when trying to work across
different scenes. E.g. when opening the new "Storyboarding"
template and scrubbing to the next scene strip, the Grease Pencil
object is now in Object Mode, when in the previous shot it was
in Draw Mode.

To solve this, when syncing scenes try to change the mode of
the next active object to the mode of the previous active object
if the type of the object is the same.

Pull Request: https://projects.blender.org/blender/blender/pulls/146981
2025-09-30 10:38:30 +02:00
Sybren A. Stüvel
acde9be6fd Fix: correctly update Actions when renaming/re-typing a custom property
Fix: correctly update Actions when renaming/re-typing a custom property

When renaming a custom property on a data-block, only update the
animation in a slot for that data-block. Previously all F-Curves were
updated, even when they were meant for other data-blocks.

This also handles the cases where the type of a custom property is
changed, and not just its name.

This is part of #146586

Pull Request: https://projects.blender.org/blender/blender/pulls/146979
2025-09-30 10:23:20 +02:00
Campbell Barton
a59be80d38 Fix #146836: Auto merge not working in edit mode
Regression in [0] removed checks for indices referencing themselves
which need to be kept but can still be used as targets.

Restore this logic as well as fixing another problem (#147022)
where auto-merge would not merge into the nearest vertex, this
was especially noticeable then the threshold was set to a large value
but would happen at smaller values too.

[0]: bdae3e28a2
2025-09-30 17:37:17 +10:00
Jacques Lucke
d21f9fa07d Refactor: Geometry Nodes: extract function to draw panel content in modifier
Besides extracting a function, this also cleans up the construction of the rna_path.
2025-09-30 06:56:55 +02:00
Guillermo Venegas
083cc599f9 Fix: Wayland/IME accessing stale IME data
Guard IME data access to ensure stale IME data isn't used.

Ref !146834
2025-09-30 11:01:39 +10:00
Campbell Barton
ab4a66bd48 Cleanup: resolve pylint warnings 2025-09-30 10:45:29 +10:00
Sean Kim
a40d484b1a UI: Show preset controls for brush strength, size, and jitter curves
Toggles the new `show_presets` option on for the recently added brush
size, strength, and jitter curves across paint modes to allow users
to set these custom curves to any of the defined internal presets.

Pull Request: https://projects.blender.org/blender/blender/pulls/147000
2025-09-30 00:34:20 +02:00
Pablo Vazquez
41a1e871ef UI: Update editor descriptions
A long overdue pass on editor descriptions/tooltips.

Some editors used a variation of the editor name as description, while
others didn't even have one. In some editors their functionality
changed so use this opportunity to reflect this (UV for example,
no longer depends on "mesh editmode").

See PR for details.

Pull Request: https://projects.blender.org/blender/blender/pulls/146968
2025-09-29 23:24:49 +02:00
marcopavanello
390f053e32 Fix #146630: Single Scattering Sky has darker pixels near horizon
Store the ground fading of Single Scattering sky directly in the LUT.

Co-authored-by: Lukas Stockner <lukas@lukasstockner.de>
Pull Request: https://projects.blender.org/blender/blender/pulls/146659
2025-09-29 20:56:32 +02:00
Sean Kim
0f3c6da272 UI: Add preset curve buttons for curve mapping template
To support setting the custom `CurveMapping` to a well defined preset,
there exist a number of operators that are hardcoded to apply a
particular preset to a particular curve.

This commit begins to replace this functionality and make it part of the
template itself, allowing the preset to be applied to any curve. For
now, it only supports either positive or negative slopes, primarily for
the brush usecases.

The `brush.curve_preset` and `brush.sculpt_curves_falloff_preset`
operators are unneeded after this change and have been removed.

Notably, these preset controls have not been added elsewhere, they can
be added on a case by case basis in future commits by interested
modules.

Pull Request: https://projects.blender.org/blender/blender/pulls/146847
2025-09-29 20:11:29 +02:00
Sean Kim
af8cb99b10 Paint: Add asserts for BKE_brush_curve_strength
Neither the `distance` or `brush_radius` parameters make sense to be
negative and can cause odd behaviors.

Pull Request: https://projects.blender.org/blender/blender/pulls/146698
2025-09-29 19:13:56 +02:00
Brecht Van Lommel
b168a96083 Refactor: Use enum class instead of bool video
Pull Request: https://projects.blender.org/blender/blender/pulls/146888
2025-09-29 19:01:39 +02:00
Brecht Van Lommel
df12a448ba Color Management: Save and load HDR images with 203 nits
Based on extensive testing, this gives matching HDR brighness across most
application, with both PNG and AVIF. Video remains at 100 nits as that
appears to tbe convention there.

This is implemented by adding two modified PQ and HLG color spaces to the
OCIO config on startup, and for the specific cases of image save and loaded
these will replace the regular PQ and HLG color spaces.

This was chosen rather than adding them as color spaces in the OCIO config,
so that it can work for any config with appropriate interop IDs, including
the ACES config. Additionally, it would be unclear how to make this work with
view + display transforms, we wouldn't want to burden the users with having
to pick a different display depending if they are saving images or video.

Ref #145855, #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146888
2025-09-29 19:01:33 +02:00
Jacques Lucke
ae2034e6c5 Attributes: make id attribute generic instead of built-in
The "id" attribute was built-in on curves (point domain), mesh (point domain)
and instances, but not on e.g. point clouds. This mismatch causes issues because
of the special rules regarding built-in attribute propagation. Furthermore, an
implication of this was that the id attribute had to be an integer attribute on
a specific domain, which is not always ideal.

This patch turns the id attribute into a normal generic attribute, except that
some nodes internally modify this attribute in special ways. This may cause some
compatibility breakage in rare cases, but that can generally be easily fixed by
either removing the id attribute or setting it explicitly on the right domain. I
can't think if a feasible way to avoid this unfortunately.

The internal special cases for the id attributes are generally skipped unless
the attribute is an integer attribute on the point/instance domain.

Pull Request: https://projects.blender.org/blender/blender/pulls/146941
2025-09-29 18:47:51 +02:00
Jacques Lucke
1ffa0c4648 Nodes: support searching for group inputs
This simplifies finding where a specific Group Input is used in a node group.
It extends what was added in #146882.

Pull Request: https://projects.blender.org/blender/blender/pulls/146992
2025-09-29 18:34:18 +02:00
Jacques Lucke
01ccf31d20 Fix: Nodes: propagated menu expanded state to group input
Previously, when a new group input was created from an expanded menu
socket, the expanded flag was not set on the group input.
2025-09-29 18:28:20 +02:00
Sean Kim
baa0bd6fbb Fix: Grease Pencil Sculpt shows dropdown toggle for size curve
Introduced in 5b02341a11

Pull Request: https://projects.blender.org/blender/blender/pulls/146778
2025-09-29 18:24:51 +02:00
Sean Kim
5ec5572a21 UI: Add dropdown toggle for grease pencil pressure curves
Follow up to 5b02341a11

Pull Request: https://projects.blender.org/blender/blender/pulls/146776
2025-09-29 18:22:29 +02:00
Casey Bianco-Davis
d4f84619ea Grease Pencil: Add new Corner Types
This adds three corner types: `Round` `Sharp` and `Flat`.
These control how the corner of `Grease Pencil` line strokes are rendered.

- The `Round` type draws circular arcs, and is what `Grease Pencil`
   currently supports and is default.
- The `Flat` type cuts off the tip of the corner.
- The `Sharp` type allows for sharp corners to be created.
  If the angle is sharper than `Miter Limit` then the tip will be cut like `Flat`

These three types match the main types of `line joins` present in `SVG`
files.

This data is stored in one `Point` attribute called `miter_angle`.
This stores both the `Corner Type`, the `Miter Limit` and defaults to
the `Round` type.

This PR adds:
- Rendering of the corner types.
- An operator for setting the `Corner Type` and `Miter Angle` attribute.
- Corner types to the `Outline` operator and modifier.

Part of #145380.

Pull Request: https://projects.blender.org/blender/blender/pulls/143688
2025-09-29 18:19:05 +02:00
Jacques Lucke
e53f0066f9 Fix #146409: nested shader node outputs are ignored
This was supported before, and was accidentally removed in 32c301e3cf. This
patch brings back support for nested shader node outputs. Only rule is that they
must not be in a zone.

Pull Request: https://projects.blender.org/blender/blender/pulls/146983
2025-09-29 18:17:35 +02:00
Jacques Lucke
ef92735a95 Nodes: support optional labels for group inputs
Built-in nodes already used the functionality to hide the input labels in a few
situations. However, this functionality was not exposed for node groups before.
It required some refactoring to get the semantics of the flag right. The tricky
aspect is that "Hide Label" would be an incorrect name, because the label is
still shown under various circumstances. Instead, the flag merely indicates that
drawing code may skip drawing the label.

This adds a new "Optional Label" input for node group inputs. Other names are
possible like "Requires Label" which would be the inverse.

Overall the implementation is pretty straight forward after
1f489ea31a,
469a70dba9 and
f79896f5b9.

Pull Request: https://projects.blender.org/blender/blender/pulls/146939
2025-09-29 18:14:41 +02:00
Simon Thommes
6f16a0805f Geometry Nodes: Fixes to essentials assets
Merge changes from blender/blender-assets#29 :

- Fix warning 'No Curve Selected' showing constantly in all shape modes.
- Fix radius extrapolation to work for round/custom profiles on both curve ends.
- Fix merging custom profile round caps to work on both curve ends.

Pull Request: https://projects.blender.org/blender/blender/pulls/146991
2025-09-29 18:10:00 +02:00
YimingWu
5cde024fc9 Fix #146413: Truncate socket names only if space is present after prefix
In 95259228d9 an optimization was made to
simplify geometry nodes socket names on panels when they contain the
exact group title as prefix, but this leads to issue where `Opening` can
be truncated as `ing` which is not desired. Now will check if a space
character is present after the prefix, then do the truncation.

Note that this implementation still doesn't truncate `CamelCase` or any
CJK name strings because they don't use the space character as
separator.

Pull Request: https://projects.blender.org/blender/blender/pulls/146973
2025-09-29 17:37:17 +02:00
Jacques Lucke
02bdc709c2 Shader Nodes: support Menu Switch node
This implements the Menu Switch node in shader nodes. It's the same node that is
used in Geometry Nodes and the Compositor.

The Menu Switch node is purely handled during preprocessing and thus builds on
top of #141936. Hence, it's input has to be a single value, just like the
iteration count for repeat zones. This limitation can be lifted in the future,
but currently there is no way to produce a non-single menu value in shader
nodes. This will become possible if other Switch nodes are added though.

Pull Request: https://projects.blender.org/blender/blender/pulls/146896
2025-09-29 17:26:38 +02:00
Hans Goudey
d75808fdf0 Fix: Node editor drawing stack use after scope
Caused by a bad conversion to StringRef in 950a2bb8a3.
Instead pass around StringRef since that's all that's needed by the UI code
anyway. And make the argument to the node socket drawing RNA function
clearer, previously it relied on the char pointer being first in StringRefNull.

Pull Request: https://projects.blender.org/blender/blender/pulls/146985
2025-09-29 17:24:50 +02:00
Clément Foucault
1cb373e980 Fix: EEVEE: Reversed condition in metallic BSDF optimization
This is a mistake from 0517e90233.
2025-09-29 17:24:16 +02:00
quackarooni
99b47b72aa Nodes: Remove "Swap" menu from editor header
Relocated the "Swap" menu from the header to inside of "Node" menu.
As it wasn't deemed ideal to put such a menu at the root level of the header.

Pull Request: https://projects.blender.org/blender/blender/pulls/146964
2025-09-29 17:22:15 +02:00
Pablo Vazquez
b5a6587ef9 Cleanup: Make format 2025-09-29 17:15:04 +02:00
Pablo Vazquez
cd7404ac96 Cleanup: Update userdef_default_theme.c
Run blender_theme_as_c.py so that next time there is less noise.

No functional/visual changes expected.
2025-09-29 17:14:08 +02:00
Iliya Katushenock
2d6a4da01a Cleanup: Improve description of asserton related to topology cache
Pull Request: https://projects.blender.org/blender/blender/pulls/145248
2025-09-29 16:55:28 +02:00
Brecht Van Lommel
7147227a40 Python API: Make context.tool_settings never null
Since 1122a05cb6 tool settings could return None, but we do not check this
consistently in scripts. Now always return some tool settings, since it's difficult
to verify and easy to forget proper null checks in e.g. operator poll functions.

The sequencer UI code was updated to continue showing tool settings only when
there is a sequencer scene.

Co-authored-by: Sergey Sharybin <sergey@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/146166
2025-09-29 16:54:40 +02:00
Guillermo Venegas
9aaefbab5b Refactor: Make layout resolve functions into virtual methods
Following to the uiLayout refactor, this converts each
layout resolve  function as virtuals methods, so `x_`,  `y_`,
`w_` and `h_` properties can become protected.

No user visible changes expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/146185
2025-09-29 16:53:44 +02:00
Clément Foucault
0517e90233 Fix: EEVEE: Metallic BSDF roughness broken in certain condition
This was caused by the `GPU_MATFLAG_REFLECTION_MAYBE_COLORED`
flag not being properly set for every parameters of this
BSDF.
2025-09-29 16:53:07 +02:00
Clément Foucault
0a8fd69ad5 Fix #146885: EEVEE: Principled BSDF incorrect when not fully metallic
Caused by faulty optimization. We can consider metal anything non
purely dielectric.
2025-09-29 16:53:07 +02:00
Sean Kim
15ddff12d4 UI: Grey out 'Show Object Origins' option in paint modes
The overlay is not shown in any of these modes, grey out the option
to better indicate to users that it is expected to have no effect.

Part of #93501

Pull Request: https://projects.blender.org/blender/blender/pulls/146876
2025-09-29 16:48:35 +02:00
MattiasF
29b27bb19b Curves: Numerically robust curve tangents
Current approach for computing the curve tangent approximations using
the average of the sum of the normalized segment direction vectors
suffers from catastrophic cancellation as the angle between the segments
approach 0°, with increasingly large error in resulting tangent.

Improving current behavior by conditionally computing the tangent using
the cross product to rotate the difference around the orthogonal axis
show a significant improvement for small angles. For segments in an axis
aligned plane, additional errors from computing the cross product is
avoided as terms cancel out. When the rotation axis is not axis aligned,
the method still shows a constant improvement for angles smaller
than ~45°.

Changes improves behavior for cases such as #145558.

For more information see https://projects.blender.org/blender/blender/pulls/146332.

Pull Request: https://projects.blender.org/blender/blender/pulls/146332
2025-09-29 16:45:12 +02:00
Lukas Tönne
b121142828 Fix #144983: Skip attribute transfer when no attribute writer is created
Attribute writer creation can fail in cases where a built-in attribute exists
and prevents arbitrary name/type/domain combinations. In those cases the
attribute should just be skipped.

Pull Request: https://projects.blender.org/blender/blender/pulls/146976
2025-09-29 16:38:31 +02:00
Hans Goudey
59aa61b8be UI: Interleave essentials modifiers in "Generate" menu
Hardocde the position of the essentials assets in the menu,
for consistent alphabetical order and a clearer indication of
the different between the nodes and builtin "Array" modifiers
(the old one is now called "Array (Legacy)").

Pull Request: https://projects.blender.org/blender/blender/pulls/146887
2025-09-29 16:37:35 +02:00
Clément Foucault
596062329d GPU: Improve shader dependency logger
Add shader name to graph.
Strip CLOG prefix for mermaid lines.
2025-09-29 16:31:47 +02:00
Hans Goudey
c58a789673 Fix #146966: Crash joining mesh objects
Caused by 113d91aba8.

A use-after-free when custom data layers are reallocated to add
attributes. Fix by using std::string instead of referencing the name.
This will be unnecessary after #122398 is finished.

Pull Request: https://projects.blender.org/blender/blender/pulls/146982
2025-09-29 16:22:44 +02:00
Alaska
6c56289f43 Fix #146679: Node wrangler connects bump maps to filter width
This commit fixes a issue where the node wrangler addon would connect
bump mapping textures to the filter width input of the bump node,
instead of the height input.

Pull Request: https://projects.blender.org/blender/blender/pulls/146684
2025-09-29 16:18:15 +02:00
Jeroen Bakker
cfeacef394 Vulkan: Streaming Buffers
OpenGL has the concept of streaming buffers these buffers are marked to be
rewritten and used a small number of times. Vulkan (being low-level API)
doesn't have this concept. When performing font rendering Blender uses
streaming buffers and can slow down Vulkan as GPU barriers are added
between uploading and using the buffer.

Using a different approach could reduce the GPU barriers. The overall
idea is:

Altering render graph nodes

During font rendering the streaming buffer is rewritten from start with
the data to render the next part. This could only cover a part of the fully
allocated buffer. And would introduce a barrier before and after rewritting
the next part.

The allocated buffer on the GPU can fit more data but that data needs to be
passed along the first update to reduce the barriers. Allowing access to an
existing node in the render graph would allow to change the initial upload to
upload more data, without additional barriers.

VKStreamingBuffer

A new buffer type is introduced that will keep track of the streaming buffer
on the current render graph. A streaming buffer can be shared between multiple
threads and requires state manager to be done per context.

Pull Request: https://projects.blender.org/blender/blender/pulls/146956
2025-09-29 16:15:04 +02:00
Jeroen Bakker
a0370d2fe3 Fix: Vulkan: Performance regression text drawing
7becc38a3c introduced new text rendering.
In the refactoring the vertex buffer was replaced by a more shallow
storage buffer. However the refactoring removed one optimization that
the vulkan backend uses, namely the actual amount of bytes that is being
used by the draw call. This resulted in overly large data transfers.

For example in the text editor the texts are rendered one glyph at a
time. But the storage buffer would always upload the data for 1024
glyphs.

This PR allows the usage size of a storage buffer to be set to ensure
that the data transfers are limited.

The implementation wasn't added to OpenGL as it draws incorrectly.

Issue detected during the research of !146956 That PR will implement
better data streaming inside the Vulkan backend and also requires
to know the actual usage size of the buffer to detect what data can
be grouped together.

Pull Request: https://projects.blender.org/blender/blender/pulls/146958
2025-09-29 15:55:31 +02:00
Falk David
7ac7aadce5 Fix: File Browser: Filter for Annotations and Grease Pencil
The current filter was still using the legacy Grease Pencil
type (now Annotations).

Now this uses the correct `FILTER_ID_GP` and uses the
other filter for Annotations.

Pull Request: https://projects.blender.org/blender/blender/pulls/146978
2025-09-29 15:48:32 +02:00
Bastien Montagne
24a33045cd Fix #146763: Texture Paint Memory Leak.
Deletion of NTree IDs through custom code path using
`blender::bke::node_tree_free_tree` is fully by-passing standard ID
management code, and was missed when ID::runtime was made an allocated
pointer.

We should really spend some time at some point to get these custom temp
node IDs handling code under control, there should be little to no need
for all this custom allocation and deletion code anymore nowadays.
2025-09-29 15:05:40 +02:00
Bastien Montagne
1c64e403c4 Fix #146802: Py-defined property min/max handling is broken.
Regression from 469f54f484, somehow the clamping for default set of Int
properties was removed in this big refactor, merely add it back, and add
some unittests covering min/max handling.

Pull Request: https://projects.blender.org/blender/blender/pulls/146975
2025-09-29 15:01:08 +02:00
Lukas Tönne
8f8d267a69 Fix #146145: Fluid domain initialization uses face attribute without checking
Attribute VArray is only valid if there actually are faces in the geometry.

Pull Request: https://projects.blender.org/blender/blender/pulls/146974
2025-09-29 14:47:22 +02:00
Clément Foucault
23134124dc LOG: Change shader dependency printing to its own prefix
This avoid flooding the console when using --debug-gpu.
2025-09-29 14:06:33 +02:00
Philipp Oeser
1e92530aa2 Fix #146963: VSE compositor modifier Strip mask input field disappearing
Caused by 866fcd0a09

To search for strips, we do so on an `Editing` object or a `MetaStrip`
object.
Code from 866fcd0a09 got the `MetaStack` but then tried to use this
directly as a `MetaStrip`.
We should be getting its `parent_strip` though it seems.

For reference, this is what was done prior to 866fcd0a09

`sequences_object = ed.meta_stack[-1]`

Pull Request: https://projects.blender.org/blender/blender/pulls/146967
2025-09-29 14:04:13 +02:00