Commit Graph

29288 Commits

Author SHA1 Message Date
Jacques Lucke
60a416bea4 Geometry Nodes: improve socket shapes for bundle and closure nodes
Previously, the closure and bundle nodes were a bit restrictive when it comes to
socket shapes. Especially the bundle nodes did not support customizing the
socket shape at all, so they always worked with dynamic values. This was
problematic, because it meant that e.g. the outputs of the Separate Bundle node
looked like they couldn't be used as single values, and other similar issues.

With this patch, the following is supported (a few aspects were supported before
but now it all fits better together): * Support manually selecting socket shapes
in Combine Bundle, Separate Bundle, Closure Input, Closure Output and Evaluate
Closure nodes. * Automatic inferencing of shapes in all these nodes, as long as
the socket shape is set to "auto". * A new "Define Signature" option can be
enabled in the nodes. If enabled, linked nodes will also sync the socket shapes
from that node. In the future, we also want to add support for naming the
signature.

Pull Request: https://projects.blender.org/blender/blender/pulls/145550
2025-09-27 14:58:43 +02:00
Nika Kutsniashvili
3e51b449be UI: Per-camera composition guide colors
Currently cameras composition guide colors are defined in theme, and not even by an individual
property. They follow 3D Viewport -> View Overlay color, which also defines many other things,
such as world origin cursor. By default it's black and it's difficult to change, because then other
things stand out. But using default black for composition guides is impossible.

This PR, instead, adds new Composition Guide Color property on camera, and uses it in camera view.
This not only fixes the issue mentioned above, but also allows different cameras in one scene to
have different overlay colors. This is very handy when you have, for example, two cameras, one of
which looks at the black corner, and another at the lit-up white one. Using a single black or white color
in this case makes the other one more difficult to see. Now, each camera can have its own color.

This PR only changes color for Composition Guides, and NOT for Safe Areas and sensor. Reasons are:
- It's important to differentiate between different concepts, having everything one color is distracting
- Safe areas are per-scene and shared with Sequencer preview. The camera shouldn't dictate color there.
I have separate plans about handling safe areas in the future.

Images in the PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/143788
2025-09-27 13:25:34 +02:00
Jacques Lucke
b186e60759 Nodes: support node output visibility inferencing
Currently, only the visibility of input sockets can be changed dynamically based
on other menu inputs. However, under some circumstances, it can also be useful
to hide certain outputs. For example, the built-in Curve Arc primitive node does
that.

This patch adds support for automatic detection of unused outputs. How to detect
unused outputs is less straight forward compared to inputs. This patch uses the
rule that an output is unused if it always outputs a "fallback value" (typically
0) irrespective of the currently used inputs. If the output is independent of
all inputs, it stays visible though.

There is a new small utility node called "Enable Output". It replaces a value
with it's fallback value unless it is disabled. This simplifies setting up
unused outputs. In theory, a normal switch node can also be used, but that is
less usable and the user will have to hardcode the fallback value for each type
which is not something that is explicitly exposed yet.

Supporting dynamic output visibility is also a prerequisite for exposing some
menu node options as sockets (e.g. in the Arc node).

Pull Request: https://projects.blender.org/blender/blender/pulls/140856
2025-09-27 10:09:48 +02:00
Brecht Van Lommel
fff8d35e3f Color Management: Add option to control display emulation
In Render properties > Color Management > Display.

* Off: Directly output image as produced by OpenColorIO. This is not correct
  in general, but may be used when the system configuration and actual display
  device is known to match the chosen display.
* Automatic: Display images consistent with most other applications, to preview
  images and video for export. A best effort is made to emulate the chosen
  display on the actual display device.

The option is grayed out when the current OpenColorIO config and display/view
does not support emulation.

Ref #145022, #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146808
2025-09-26 17:05:18 +02:00
Sean Kim
9b5f23c7a3 BKE: Update default smooth curve preset
Updates the `CurveMapping` `CURVE_PRESET_SMOOTH` curve to more closely
approximate the smoothstep function (y = 3x^2 - 2x^3). This has the
implication of changing what happens when the curve is reset, but does
not change any existing curves already stored in blendfiles.

Notably, this change primarily affects three operators:
* brush.curve_preset (Mesh Sculpting)
* brush.sculpt_curves_falloff_preset (Curves Sculpting)
* render.shutter_curve_preset (Motion Blur)

Pull Request: https://projects.blender.org/blender/blender/pulls/146710
2025-09-26 16:43:22 +02:00
Sean Kim
0e2316c2bc Paint: Disable pressure sensitivity for certain brushes
A subset of brushes behave as "anchored" brushes, in that they do not
apply to the surface continually underneath the cursor, but have a
starting point and then are influenced by the mouse movement. These
brushes behave oddly with tablet pressure sensitivity, as they cannot
modulate over the course of the stroke without causing odd behavior.

Currently, the pressure is only sampled at the very beginning of the
stroke, which makes it difficult to control intuitively. Further work
can be done to improve this behavior (e.g. D6603).

The full list of brush types affected is below:
* Grab
* Snake Hook
* Elastic Deform
* Pose
* Boundary
* Thumb
* Rotate
* Cloth with Grab deformation

Resolves #83697

Pull Request: https://projects.blender.org/blender/blender/pulls/146825
2025-09-26 16:41:01 +02:00
Sean Kim
9c7ace059a Refactor: Add name for curve map slope preset enum
Names the formerly anonymous enum as `CurveMapSlopeType`, converts it to
`enum class` and adds a specific backing type for the variable.

Pull Request: https://projects.blender.org/blender/blender/pulls/146840
2025-09-26 16:40:16 +02:00
Sebastian Parborg
fcc1502146 Cleanup: Remove the now unused lzma and lzo libraries from extern
LZO and LZMA has been unused in Blender since #141461

Pull Request: https://projects.blender.org/blender/blender/pulls/146842
2025-09-26 15:55:47 +02:00
Sebastian Parborg
d86de2cde2 Fix #146640: Freeze when force cancelling a CLI render
When we directly call `exit()` from `sig_handle_blender_esc`, the
program will try to free up all static variables and terminate all
threads (and do some file handle cleanup).

The destuctor of the static sound `GlobalState` will hang if
`delayed_close_cv` is in use by other threads as it will wait for them
to let go of it before the destructor finishes.

To make sure that it can finish, the destructor now notifies all
potential threads that they should exit.

Pull Request: https://projects.blender.org/blender/blender/pulls/146665
2025-09-26 14:36:35 +02:00
Campbell Barton
9ebc02fc99 Cleanup: spelling, repeated words (make check_spelling_*) 2025-09-26 22:00:27 +10:00
Christoph Lendenfeld
b2653be057 Anim: Place Pose Bone Gizmo at Custom Transform
This PR adds an option "Affect Gizmo" for custom shape transforms to affect
the transform gizmos. If enabled, this will place the gizmo at the
location and orientation of the "Override Transform" (i.e. in its local space).

For Orientations: The gizmo mode *is* respected. I.e. global mode is aligned to the world etc.
There is a special case for "Gimbal" where it will not follow the orientation of the
"Override Transform" bone. I think it makes sense to keep it that way since this
is about the channels of the bone you are actually manipulating.

The other option is "Use as Pivot" with which the bone is actually rotated
around the override bone. This can be useful for rigs in which shapekeys and
armature deformation is combined

Taken over from #136468
For design task #135429

Co-authored-by: Wayde Moss <wbmoss_dev@yahoo.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/142847
2025-09-26 13:25:01 +02:00
Jacques Lucke
4e4976804e Core: Add packed linked data-blocks
This adds support for packed linked data. This is a key part of an improved
asset workflow in Blender.

Packed IDs remain considered as linked data (i.e. they cannot be edited),
but they are stored in the current blendfile. This means that they:
* Are not lost in case the library data becomes unavailable.
* Are not changed in case the library data is updated.

These packed IDs are de-duplicated across blend-files, so e.g. if a shot
file and several of its dependencies all use the same util geometry node,
there will be a single copy of that geometry node in the shot file.

In case there are several versions of a same ID (e.g. linked at different
moments from a same library, which has been modified in-between), there
will be several packed IDs.

Name collisions are averted by storing these packed IDs into a new type of
'archive' libraries (and their namespaces). These libraries:
* Only contain packed IDs.
* Are owned and managed by their 'real' library data-block, called an
  'archive parent'.

For more in-depth, technical design: #132167
UI/UX design: #140870

Co-authored-by: Bastien Montagne <bastien@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/133801
2025-09-26 10:53:40 +02:00
Omar Emara
73fcbaf7c4 VSE: Add Compositor modifier
This patch adds a new Compositor modifier that applies a compositing
node group on a sequencer strip. This patch also introduces the concept
of a compositor node tree space subtype, where we now have a Scene and a
Sequencer subtypes. Practically, this just means that node like the
Render Layers node will not be available in the node editor in the
Sequencer subtype.

Future improvements includes:

- The compositor context is recreated on every modifier application,
  while it should ideally be persistent somehow to make use of the
  compositor static cache. This might require work from the compositor
  side by moving the static cache outside of the context and make it
  thread safe if needed. See `Render.compositor` for an example on
  persistent context.
- GPU execution is not supported. This just needs a GPU context to be
  bound before execution, but the tricky part is getting a GPU context.
  See `render::Compositor::execute` for an example on bounding a GPU
  context and why it is less straight forward.
- Node inputs are not exposed on the sequencer modifier interface. An
  approach similar to Geometry Nodes modifier could be used, look at
  `update_input_properties_from_node_tree` for reference, but notice
  that Geometry Nodes naturally exempt the main Geometry socket because
  Geometry inputs can't be exposed, but for the compositor, we will have
  to exempt the main Color and Mask sockets manually. !145971

Co-authored-by: Aras Pranckevicius <aras@nesnausk.org>
Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/139634
2025-09-26 08:40:42 +02:00
Brecht Van Lommel
e91c8300a6 OpenEXR: Write colorspace metadata for multilayer EXR
Previously it was only working for the single layer case. For multipart
we write the colorspace in each part. For single part we write the first
non-data colorspace, and hope data passes will be identified based on channel
name like Blender does (e.g. XYZ instead of RGB).

Reading is unchanged and still the same as before, in that it only reads the
colorspace from the first part. There is only one color space per image
datablock, so we can not store anything more currently. In practice it
would be unusual for all passes in a file not to either have the same
colorspace or be data.

All the compositor file output test images were updated to include the
metadata, so that the test will check if the metadata is there.

Ref #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146809
2025-09-25 23:27:14 +02:00
Brecht Van Lommel
be1619f4ad OpenEXR: Multi-part writing
New "Interleave" option in image format settings, enabled by default in old
files and disabled by default in new files to write multi-part files.

By not storing all channels interleaved, it is possible for other applications
to load individual passes more efficiently. This might also work better with
compression.

We follow the OpenEXR docs in that the channel name is the full
Layer.Pass.Channel rather than just Channel. Some other renderers
(e.g. Houdini Karma) write just the channel and that is what our reading
code assumed so far.

I've verified that Nuke can read the multipart EXR files produced by Blender,
including multiview and cryptomatte.

Fix #123727

Pull Request: https://projects.blender.org/blender/blender/pulls/146650
2025-09-25 22:58:11 +02:00
Brecht Van Lommel
9851e34c71 Refactor: OpenEXR: Simplify multi layer read and write implementation
* Read directly into ExrChannel, eliminate intermediate MultiViewChannelName
* Pass multiple channels to EXR writer together in IMB_exr_add_channels
* Avoid various channel name parsing by passing components separately
* Simplify logic for writing multichannel and multiview metadata
* Remove unused global EXR handle storage
* No longer use void pointer for EXR handle.
* Use blender::Vector and std::string.
* Slightly reshuffle code so multipart support will have smaller diff.
* Add various comments.

Pull Request: https://projects.blender.org/blender/blender/pulls/146650
2025-09-25 22:58:09 +02:00
Brecht Van Lommel
78ae7ec392 Render: Rename render passes for clarity
In very old OpenEXR version there was a limit on the channel names, which meant
the pass names needed to be short like "DiffDir". Change them to be longer like
"Diffuse Direct".

* This breaks forward compatibility. Old Blender version will lose links when
  reading compositing node setups with such passes, but #146571 will fix it
  for 4.5 LTS.
* Add-ons, scripts and compositing setups in other applications that rely on these
  names will also break.
* The find_by_type function for render passes has also been removed, as this was
  already deprecated and replaced by find_by_name.
* We assume spaces in the name are ok, since we have passes with them already
  and have not seen reports about compatibility issues.

Pull Request: https://projects.blender.org/blender/blender/pulls/142731
2025-09-25 18:04:14 +02:00
Bastien Montagne
00dbb53131 UserPreferences: Enable Blendfile Compression By Default.
IMPORTANT: This will force-enable this option in user preferences, as
part of the 5.0 versioning process. Users that do want to keep saving
uncompressed blendfiles will have to edit their user preferences
accordingly, and re-save them.

This commit does _not_ change the setting for an existing blendfile:
uncompressed blendfiles will keep being saved as uncompressed.

Implements #135735.

Pull Request: https://projects.blender.org/blender/blender/pulls/146172
2025-09-25 17:57:31 +02:00
Pablo Vazquez
b74e696acc UI: Theme: Add Curve widget theme settings
Add theme settings for the Curve and CurveProfile widgets.

Even though the curve widget is used all over Blender, it never had its
own theme settings. It was using a mix of colors from the “regular”
toggle widget with text colors inherited from the editor.

Thanks to the recent cleanup and removal of so many redundant theme
options, we can now add new/missing settings without overwhelming
the theme.

See PR for details and screenshots.

Pull Request: https://projects.blender.org/blender/blender/pulls/146274
2025-09-25 17:44:33 +02:00
Hans Goudey
5ccbfbb4bc Geometry Nodes: Support grid inputs to viewer node
Display the grid in the 3D viewport (internally just create a volume
geometry so this case doesn't spread into any rendering code), and add
very basic data in the spreadsheet for the grid. I had to store the geometry
in the viewer node log as a cache so the lifetime of the temporary volume
grid was long enough.

Pull Request: https://projects.blender.org/blender/blender/pulls/146780
2025-09-25 16:51:31 +02:00
Brecht Van Lommel
689f182792 Cycles: Make adaptive subdivision a non-experimental feature
* Add adaptive subdivision properties natively on the subdivision surface
  modifier, so that other engines may reuse them in the future. This also
  resolve issues where they would not get copied properly.
* Remove "Feature Set" option in the render properties, this was the last
  experimental one.
* Add space choice between "Pixel" and "Object". The latter is new and can
  be used for object space dicing that works with instances. Instead of
  a pixel size an object space edge length is specified.
* Add object space subdivision test.

Ref #53901

Pull Request: https://projects.blender.org/blender/blender/pulls/146723
2025-09-25 16:18:50 +02:00
Nika Kutsniashvili
28b97afda2 UI: Theme: Generalize geometry attribute properties
This PR generalizes properties for geometry (currently mesh only) attributes
found in 3D Viewport theme, namely:

- Combine "Edge Bevel" and "Vertex Bevel" into one "Bevel" property.
- Combine "Freestyle Edge Mark" and "Freestyle Face Mark" into one "Freestyle" property.
- Remove word "Edge" from Crease, Sharp, and Seam properties, to match others.
- Group all of the above together in the UI.

This is a breaking change (that will be handled with others in migration),
but doesn't introduce any visual changes in the default theme (and almost any theme).

Pull Request: https://projects.blender.org/blender/blender/pulls/146732
2025-09-25 14:02:46 +02:00
Brecht Van Lommel
d290ff16c8 Color Management: Simplify image format initialization
No need to have a not for render case, these settings are only used when
Save as Render or Override are on and in that case it make sense to match
the default render view transform.

Ref #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146487
2025-09-25 13:50:20 +02:00
Brecht Van Lommel
239706c6b9 Color Management: Perform display emulation using display colorspaces
Rather than relying on an untonemapped view, use the OpenColorIO v2
display color spaces. This provides a generic way of converting between
display referred color spaces using the cie_xyz_d65_interchange role
as the intermediate display linear space.

On older configs without such display color spaces, display emulation
will be disabled.

Ref #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146487
2025-09-25 13:50:20 +02:00
Sean Kim
327a1925cf Paint: Rename curve and curve_preset
This commit renames the following DNA fields and corresponding RNA
properties to better represnt usage:

* `Brush.curve` to `Brush.curve_distance_falloff`
* `Brush.curve_preset` to `Brush.curve_distance_falloff_preset`

Pull Request: https://projects.blender.org/blender/blender/pulls/146254
2025-09-25 11:54:53 +02:00
Sean Kim
b279e74889 Texture Paint: Ensure new catalogs are visible by default
Follow up to 06e391b5e4

Pull Request: https://projects.blender.org/blender/blender/pulls/146757
2025-09-25 11:40:44 +02:00
Brady Johnston
c010bab779 Nodes: Reorder socket data types list
Currently there is a difference in the assigned accelerator keys for
Boolean attribute type for Store Named Attribute and Named Attribute.
For Named Attribute it is assigned <kbd>B</kbd> as a user would expect
but in the Store Named Attribute it is assigned <kbd>o</kbd> as it comes
after _Byte Color_ which leads to confusion when using lots of each node.

This PR changes the order of the socket types so simpler types come
first, and updates the attribute types to reflect this same ordering.

This fixes the issue with the accelerator keys and improves overall
consistency. The more specialised subtypes such as 8-Bit Integer, Byte
Color and 2D Vector all appear at the end of the menu in the same order.

This ordering will also be reflected in other nodes such as Sample Index,
Sample Curve etc.

Pull Request: https://projects.blender.org/blender/blender/pulls/146722
2025-09-25 09:34:36 +02:00
Campbell Barton
84559f8bd4 Fix: trailing zeros added to the rounded value with split units
When units were split into larger and smaller values, the larger
value is rounded and should not show trailing zeros.
Trailing zeros should only be used for the smaller unit.

Ref !140790
2025-09-25 13:55:21 +10:00
Campbell Barton
a69dede3f1 Cleanup: minor changes to unit comments 2025-09-25 13:53:10 +10:00
Habib Gahbiche
b33250f799 Nodes: Forward compatibility for World
Implement forward compatibility for World by always writing
`use_nodes=true` when saving blend files.

This was missed in #142342

Pull Request: https://projects.blender.org/blender/blender/pulls/146628
2025-09-24 14:49:47 +02:00
Omar Emara
5462d90fa8 Compositor: Make Bokeh Blur size input in pixels
This patch makes the Size input of the Bokeh Blur node defined in
pixels as opposed to being relative to 0.01 the greater dimension of the
image.

Pull Request: https://projects.blender.org/blender/blender/pulls/146367
2025-09-24 14:45:54 +02:00
Omar Emara
92be913a2a Compositor: Remove XY scale from Displace node
This patch removes the XY scale inputs from the Displace node. The
inputs were redundant since they were just multiplied by the vector.
This simplifies the node and improves performance slightly.

Additionally, the Vector input was renamed to Displacement since it no
longer specifies a direction.

Pull Request: https://projects.blender.org/blender/blender/pulls/146356
2025-09-24 13:33:24 +02:00
Bastien Montagne
0224d3083b Fix writefile making all linked IDs directly linked.
Regression from 435b6743fd, when considering UI ID usages to define
if IDs are weekly direclty linked, cases where this should not be the
case (e.g. Outliber ID pointers) ended up making them directly linked.

So essentially, all linked data became directly linked when writing the
blendfile on disk!

Fixed by adding a new `IDWALK_CB_WRITEFILE_IGNORE`, to tell the
writefile code that it can ignore this ID usage (similar to the existing
`IDWALK_CB_READFILE_IGNORE` one).

Pull Request: https://projects.blender.org/blender/blender/pulls/146667
2025-09-24 11:55:53 +02:00
Hans Goudey
6daf1dd2f2 Fix: Grain size calculation for setting custom normals
Recent change 3a6a663a15 has some logic issues.
First, the grain size was clamped to be never lower than 256, which
doesn't make sense since the size of the array is never greater than
the number of threads. The numbers used in the division were also large
enough that multithreading wouldn't be used in many realistic cases
anyway. There's no need to cap the grain size at 1024, and also
`safe_divide` doesn't make sense in this scenario.

Pull Request: https://projects.blender.org/blender/blender/pulls/144872
2025-09-23 22:11:01 +02:00
Omar Emara
9a2c7f334b Compositor: Clarify Alpha Over input names
This patch renames the input of the Alpha Over node to use Background
and Foreground instead of just Image.

Pull Request: https://projects.blender.org/blender/blender/pulls/146352
2025-09-23 18:08:06 +02:00
Bastien Montagne
f7c01e8076 Fix (unreported) Invalid clearing handling in IDP_ResizeIDPArray.
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
2025-09-23 12:10:28 +02:00
Jesse Yurkovich
12cdfb5856 Image: Log errors during image write when using OpenImageIO
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
2025-09-22 20:26:55 +02:00
Brecht Van Lommel
f8e03daf37 Fix: Generated image checkboard colors too saturated with working space
Convert from Rec.709 to scene linear when generating these, to
match results in the default working space.

Pull Request: https://projects.blender.org/blender/blender/pulls/146603
2025-09-22 19:06:32 +02:00
Jacques Lucke
5ffc5df4f6 Geometry Nodes: support viewing non-geometry data with viewer node
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
2025-09-22 18:08:45 +02:00
Bastien Montagne
849aba1ccf Core: Make ID::runtime an allocated pointer.
Will avoid having to reshuffle all ID types' DNA alignement when
modifying runtime data, avoid writing garbage data in blendfile, allow
usage of non-trivial C++ data in that runtime struct, etc.

NOTE: Trigger for this refactor was this commit in the upcoming packed
data PR (!133801):
https://projects.blender.org/blender/blender/commit/34a2ad81fbdcf7f

Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/146046
2025-09-22 18:02:32 +02:00
Brecht Van Lommel
fdc9412b9d Fix: Appending a workspace appends scene data along with it
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
2025-09-22 17:40:38 +02:00
Bastien Montagne
a6d2b21f3e Refactor: Minor changes to 'non-allocated' ID copying and related Depsgraph code.
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
2025-09-22 16:40:38 +02:00
Brecht Van Lommel
bb57ab3598 Fix #146448: Object copy/paste has wrong colors with working space
Write proper colorspace information into copy buffer blend files.

Pull Request: https://projects.blender.org/blender/blender/pulls/146450
2025-09-22 13:17:49 +02:00
Philipp Oeser
e2c3bfde4f Fix #146535: 3d Text selection is broken
Typo in 6d92bf00a6

Pull Request: https://projects.blender.org/blender/blender/pulls/146561
2025-09-22 11:50:19 +02:00
Hans Goudey
ef08810493 Cleanup: Remove unused data transfer argument
Pull Request: https://projects.blender.org/blender/blender/pulls/146544
2025-09-21 22:13:13 +02:00
Hans Goudey
113d91aba8 Mesh: Restructure join operator for simplicity, speed, consistency
Previously the joining code put the final data into temporary mesh
data, which meant more complexity because it couldn't use the slightly
higher level APIs more commonly used for transferring data.

The process can be simplified by just merging into the active mesh
directly (though some care must be taken when that is used by
multiple selected objects).

This process avoids iterating over attribute data twice, by processing
values at the same time as copying them. Also some of the inner hot
loops are parallelized. There is more opportunity for trivial multi-
threading in the future.

Mismatched attribute types and domains will now choose the higher
complexity type and domain, which should help avoid information loss.

There was a bug with the existing face set processing which would
modify the source meshes. That is now fixed.
2025-09-21 19:11:19 +02:00
Brecht Van Lommel
c2e5622d50 Revert "Shaders: Remove old Preetham and Hosek sky texture models"
These are causing quite a big difference in existing files, which is not
easy to address in versioning. Since the goal of removing this was to
simplify things for us and that's not the case, just revert this change.

This reverts commit ab21755aaf.

Ref #139923

Pull Request: https://projects.blender.org/blender/blender/pulls/146336
2025-09-20 16:52:23 +02:00
Campbell Barton
4a6268e092 Cleanup: various non functional changes for C++ 2025-09-20 16:28:02 +10:00
Nick Alberelli
439fe8a1a0 PyAPI: support logging for Context.temp_override
Adds comprehensive logging system for temp_override context manager to
help developers debug "context is incorrect" operator poll failures.
The logging tracks all context member access during temp_override
sessions and provides detailed summaries to identify context
availability issues.

Features:
- Command-line logging: `./blender --log-level trace --log "context" `
- Python programmatic control: `temp_override_handle.logging_set(True)`
- C-level API: CTX_temp_override_logging_set/get() functions
- Tracks individual member access
- Uses CLOG logging infrastructure

The logging helps identify which context members are accessed during
temp_override sessions and whether they return valid data, making it
easier to debug operator poll functions that fail with context errors.

Ref !144810
2025-09-19 06:48:07 +00:00
Campbell Barton
c2766d2058 Cleanup: use a typed enum for context data type
Ensure all types are handled in switch statements (see !144810).
2025-09-19 08:21:30 +10:00