Commit Graph

24505 Commits

Author SHA1 Message Date
Hans Goudey
4919b5681d Merge branch 'blender-v4.2-release' 2024-06-24 15:39:02 -04:00
Hans Goudey
1b80125a67 Fix: Leak of initialized but not pushed undo step
In some cases, sculpt code currently creates undo steps that are stored
in `step_init` in the undo stack, but then skips actually pushing them.
That can happen when an operator is cancelled (like the transform
operator in #123172) or because pushes in "nested operator calls"
are currently explicitly disabled. That happens when calling the brush
operator from a script.

It turns out the undo code never freed the `step_init`, probably because
it assumed it would be pushed to be part of the stack afterwards.

Personally I'm not convinced that separating undo step creation into
two stages with `step_encode_init` and `step_encode` is a great design
or a necessary one, but I'm trying not to get into that deeper right now.

Fixes #123172

Pull Request: https://projects.blender.org/blender/blender/pulls/123331
2024-06-24 21:38:21 +02:00
Bastien Montagne
65c5721c5a Fix (unreported): MEM_new/MEM_freeN mistaches.
Calling `MEM_freeN` on data allocated with `MEM_new` is bad, since it
will not call a destructor matching the one invoked as part of
`MEM_new`.

While in practice cases fixed below were 'not a problem' currently, as
they are trivial Cpp types (and therefore their destructor is doing
nothing), `MEM_freeN` has no way to ensure it is dealing with such a
trivial data type, so allowing such mismatch is dirty and dangerous.

Note that almost all fixed cases look more like unintentional mistakes
(mis-usages of `MEM_new` instead of `MEM_cnew`).

NOTE: There is one more (known!) case in the asset code, which fix is
slightly less trivial, and will go through a separate PR.

NOTE: This is a by-product of some work to detect such invalid usages of
`MEM_freeN` on memory chunks allocated with `MEM_new`.

Pull Request: https://projects.blender.org/blender/blender/pulls/123691
2024-06-24 18:42:26 +02:00
Devashish Lal
3e28b6c7f1 Nodes: File path socket subtype for string sockets
This commit adds a new socket subtype for the string socket type
for file paths. Like other subtypes, this doesn't influence the data
stored in the socket or passed between nodes, it adds a file browser
popup operator to the socket button in the node.

From the file import nodes GSoC project:
https://devtalk.blender.org/t/gsoc-2024-geometry-nodes-file-import-nodes/34482

Pull Request: https://projects.blender.org/blender/blender/pulls/123250
2024-06-24 16:28:33 +02:00
Hans Goudey
e14d153edf Cleanup: Formatting 2024-06-24 08:42:07 -04:00
Bastien Montagne
9688462349 Merge branch 'blender-v4.2-release' 2024-06-24 13:34:48 +02:00
Bastien Montagne
a94798d31c Fix (unreported) assert in recursive 'foreach id' iterating code.
owner ID pointer needs to be reset after initial usage, for the
recursively processed 'children' IDs.
2024-06-24 13:33:21 +02:00
Campbell Barton
07de3d4499 Merge branch 'blender-v4.2-release' 2024-06-23 14:50:05 +10:00
Campbell Barton
52b63777a1 Extensions: use the full path for remote "file://" repositories
The logic to use a domain name was being applied to file:// paths,
causing only the first directory to be used.
2024-06-23 14:35:06 +10:00
Jesse Yurkovich
096ab60a9c Merge branch 'blender-v4.2-release' 2024-06-21 11:53:50 -07:00
Jesse Yurkovich
9d8a90d53c Fix: Disable collection export for linked collections
If a non-instanced collection is linked, any collection exporters on the
linked collection would be active and invokable. This is probably not
desired as it could inadvertently overwrite files from the original.
Disable the operators in this case.

See PR for how each of the various append/link scenarios behave.

Pull Request: https://projects.blender.org/blender/blender/pulls/123149
2024-06-21 20:52:18 +02:00
Jacques Lucke
197c03c633 Merge branch 'blender-v4.2-release' 2024-06-21 15:54:41 +02:00
Jacques Lucke
e72730d763 Fix: assert when switching to sculpt mode
This is an alternative fix to #123524.

This is necessary, because `sculpt_update_object` is run after
the mesh is evaluated, but before the geometry depsgraph operation
is done. Only after this depsgraph node is done, `DEG_object_geometry_is_evaluated`
will return true.

This approach of `unchecked` methods has been preferred for now
over moving the call to `BKE_sculpt_update_object_after_eval`
to a separate depsgraph node or after depsgraph evaluation.
2024-06-21 15:19:10 +02:00
Weizhen Huang
f26e84098a Merge branch 'blender-v4.2-release' 2024-06-21 15:09:47 +02:00
Weizhen Huang
23e497d1af Fix: Memory leak in volume with packed file
Pull Request: https://projects.blender.org/blender/blender/pulls/123556
2024-06-21 15:08:55 +02:00
Hans Goudey
89ba454fe8 Cleanup: Sculpt: Use const for original data undo nodes 2024-06-20 13:39:33 -04:00
Hans Goudey
385cc4fb3b Cleanup: Sculpt: Use references for SculptSession variables 2024-06-20 13:39:33 -04:00
Falk David
6226a66054 Fix: GPv3: Crash on conversion for files with editcurves
Blender would crash if it tried to convert a grease pencil
data-block with strokes that used the editcurve.

This was because of a wrong assertion that assumed
to work with a poly curve.

The fix moves the assertion to the correct place where
we handle the poly curves.
2024-06-20 16:01:25 +02:00
Jacques Lucke
a1a13bad06 Merge branch 'blender-v4.2-release' 2024-06-20 15:30:41 +02:00
Jacques Lucke
ada367a0e9 Fix #119589: use-after-free when accessing not-fully-evaluated object geometry
While the evaluated result is not well defined, we expect Blender to not crash
when there are dependency cycles.

The evaluation of one object often takes the evaluated geometry of another
object into account. This works fine if the other object is already fully
evaluated. However, if there is a dependency cycle, the other object may not be
evaluated already. Currently, we have no way to check for this and were mostly
just relying on luck that the other objects geometry is in some valid state
(even if it's not the fully evaluated geometry).

This patch adds the ability to explicitly check if an objects geometry is fully
evaluated already, so that it can be accessed by other objects. If there are not
dependency cycles, this should always be true. If not, it may be false
sometimes, and in this case the other objects geometry should be ignored. The
same also applies to the object transforms and the geometry of a collection.

For that, new functions are added in `DEG_depsgraph_query.hh`. Those should be
used whenever accessing another objects or collections object during depsgraph
evaluation. More similar functions may be added in the future.
```
bool DEG_object_geometry_is_evaluated(const Object &object);
bool DEG_object_transform_is_evaluated(const Object &object);
bool DEG_collection_geometry_is_evaluated(const Collection &collection);
```

To determine if the these components are fully evaluated, a reference to the
corresponding depsgraph is needed. A possible solution to that is to pass the
depsgraph through the call stack to these functions. While possible, there are a
couple of annoyances. For one, the parameter would need to be added in many new
places. I don't have an exact number, but it's like 50 or so. Another
complication is that under some circumstances, multiple depsgraphs may have to
be passed around, for example when evaluating node tools (also see
`GeoNodesOperatorDepsgraphs`).

To simplify the patch and other code in the future, a different route is taken
where the depsgraph pointer is added to `ID_Runtime`, making it readily
accessible similar to the `ID.orig_id`. The depsgraph pointer is set in the same
place where the `orig_id` is set.

As a nice side benefit, this also improves the situation in simple cases like
having two cubes with a boolean modifier and they union each other.

Pull Request: https://projects.blender.org/blender/blender/pulls/123444
2024-06-20 15:24:38 +02:00
Brecht Van Lommel
a18ab98785 Fix #122131: Image undo issues with editable linked images
Store library filepath so we can find the right datablock.

Tested to work with the brush assets project branch, as this
currently does not affect anything in main.

Pull Request: https://projects.blender.org/blender/blender/pulls/123449
2024-06-20 14:13:50 +02:00
Jacques Lucke
a9a047c0e3 Core: use implicit sharing for PackedFile data
Found this bottleneck when checking #122281. With this patch, `ED_undo_pop` in
the provided file speeds up from `132 ms` to `18 ms`.

Pull Request: https://projects.blender.org/blender/blender/pulls/123243
2024-06-20 14:09:29 +02:00
Jacques Lucke
d3157699e2 BLO: remove unused packedmap from read file data
I found that `packedmap` is effectively unused when I worked on #123243.
The only function that wrote to it was `blo_make_packed_pointer_map`
and that is never called. Packed data already used the normal `datamap` as fallback.

Pull Request: https://projects.blender.org/blender/blender/pulls/123244
2024-06-20 13:51:48 +02:00
Sybren A. Stüvel
4c0a77ee8f Anim: avoid logged warnings when visiting layered Action in NLA evaluation
Avoid logging actions about `action->idroot` not matching, when evaluating
the NLA and visiting a layered Action. Layered Actions are not limited to
a single data-block type, and so the code should ignore `action->idroot`.
2024-06-20 10:05:34 +02:00
Sybren A. Stüvel
aa0e5368e7 Anim: add layered Action support to BKE_action_frame_range_calc()
Add layered Action support to `BKE_action_frame_range_calc()`, by
looping over all F-Curves of all Bindings in the Action.

Introduce `animrig::fcurves_all(action)`, which returns a vector of all
F-Curves in the Action, both for legacy and layered Actions.

No functional changes for legacy Actions.
2024-06-20 10:05:34 +02:00
Sybren A. Stüvel
54ed2a927e Refactor: Anim, simplify BKE_action_frame_range_calc()
Simplify `BKE_action_frame_range_calc()` by returning early and replacing
`short` with `bool`.

No functional changes.
2024-06-20 10:05:34 +02:00
Hans Goudey
2639b1833c Sculpt: Avoid depsgraph evaluation when adding mask attribute
For base mesh sculpting, we already draw the original data instead of the
evaluated data, so the evaluated mesh doesn't have to be updated to
contain the new attribute. This is different from multires sculpting
because sculpt brushes and drawing only deal with the evaluated
SubdivCCG, not the original multires modifier data. Removing the
unnecessary update removes a noticeable pause when clearing and
adding a mask.
2024-06-19 13:56:47 -04:00
Falk David
bd67c3b8ef GPv3: Update names of layers in modifier filters when layer name changes
This adds additional logic to `GreasePencil::rename_node` to rename
the strings in the modifier influence data.

This is similar to how `ED_armature_bone_rename` handles renaming of
strings.

Resolves #123321.

Pull Request: https://projects.blender.org/blender/blender/pulls/123365
2024-06-19 18:57:09 +02:00
Jacques Lucke
5b572bd913 Merge branch 'blender-v4.2-release' 2024-06-19 12:18:07 +02:00
Jacques Lucke
934041e8d6 BLO: support overaligned types in SDNA
This fixes #121695. `float4x4` matrices are generally expected to be 16 byte aligned.
Currently, there is no mechanism (afaik) that allows allocating these overaligned types
when loading files from disk. This patch adds an array with alignment information for
 each type in `SDNA`. Currently, the alignment is just `__STDCPP_DEFAULT_NEW_ALIGNMENT__`
for all types and is manually set for the `mat4x4f` DNA type. The .blend file format is
not changed at all. The alignment information is purely runtime data.

In the future it would probably be good to generalize this a bit more instead of
hardcoding the alignment for `mat4x4f`, but would make it unnecessarily complex for
now because this is intended for the release branch.

Pull Request: https://projects.blender.org/blender/blender/pulls/123271
2024-06-19 12:16:24 +02:00
Jacques Lucke
1d4b4440d9 Curve: reduce overhead in debug builds 2024-06-19 12:08:27 +02:00
Hans Goudey
6bb978d07d Fix #123382: Subdivision surface crash with no faces
Caused by 31a67805fe.
2024-06-18 19:10:17 -04:00
Brecht Van Lommel
a26fd603b0 Merge branch 'blender-v4.2-release' 2024-06-18 21:19:24 +02:00
Nathan Vegdahl
295df94478 Anim: add "legacy behavior" option to Limit Rotation constraint
This adds a "Legacy Behavior" option to the Limit Rotation constraint that makes
it behave how Limit Rotation constraints did prior to
ed2408400d. Newly created constraints have this
option disabled, but versioning code enables the option on constraints from
older files to ensure that the behavior of e.g. existing rigs is not altered.

This is one part of a two-part fix for #123105. The other part is in PR
extensions/rigify#4.

Pull Request: https://projects.blender.org/blender/blender/pulls/123361
2024-06-18 18:29:25 +02:00
Clément Foucault
355c7b788e Fix: EEVEE: Remaining references to EEVEE-Legacy in codebase
Fix #123387
2024-06-18 18:17:34 +02:00
Falk David
f897d37f38 Fix: GPv3: Thickness adjustment conversion doesn't use object scale
To get the same visual result compared to GPv2, the thickness adjustment value
needed to be divided by the object scale.
2024-06-18 17:06:23 +02:00
Lukas Stockner
25d4d645cd UI: Add Color Temperature unit
The current temperature unit adjusts to Celsius or Fahrenheit based on
unit system, but specifically for color temperatures the convention is
to display them in Kelvin, and it'd be strange to e.g. see 11240°F when
opening the white balance panel.

Therefore, this adds a dedicated Color Temperature unit, and uses it
for the two existing blackbody temperature inputs in shader nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123337
2024-06-17 23:50:05 +02:00
Miguel Pozo
dde2aa5417 Merge branch 'blender-v4.2-release' 2024-06-17 18:56:59 +02:00
Alaska
274da96722 Render: Clamp minimum DOF focus distance
Clamp DOF focus distance to a minimum of 1e-5.
This is to primarily stop focus distances of 0 being used
which would lead to issues in future code changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123310
2024-06-17 17:42:38 +02:00
Bastien Montagne
dd3a1ec095 Fix (unreported) invalid behaviors when copying an ID in a library.
When copying a local ID into a library, or a linked ID into a different
library, the 'linked' tags would not be properly preserved or set, and
the relative file paths would not be properly remapped.

These issues were not currently exposed (no existing code could trigger
them), but some of these fixes are needed for upcoming refactor of the
partial write code.

NOTE: not very happy with the split in library handling between
`BKE_id_copy_in_lib` and `BKE_libblock_copy_in_lib`, this will have to
be solved at some point.

Pull Request: https://projects.blender.org/blender/blender/pulls/123247
2024-06-17 15:07:20 +02:00
Falk David
10af923eac Grease Pencil: Move GPv3 out of experimental
This removes the experimental flags related to the GPv3 project.

Note that this doesn't remove GPv2 code just yet.
It just exposes GPv3 by default now.

Pull Request: https://projects.blender.org/blender/blender/pulls/122723
2024-06-17 13:50:41 +02:00
Hans Goudey
31a67805fe Subdiv: Skip interpolating topology attributes to improve performance
Currently the corner_vert and corner_edge attributes go through the
generic custom data interpolation, only to be overwritten directly
afterwards. In a profile of the execution of the subdivision surface
modifier, 5% of the time was spent in `layerInterp_propInt`. To fix
this, first build a `CustomData` layout to be used just for face corner
attribute interpolation. Then allocate the topology attributes
separately and add them to the result mesh later. This requires a fair
amount of boilerplate right now, but it should be improved with various
changes to mesh attribute storage in the future.

In a file with many object with a subsurf modifier, this change
improved the overall execution time by between 5 and 10% in my tests.

Pull Request: https://projects.blender.org/blender/blender/pulls/123254
2024-06-15 00:53:22 +02:00
Jacques Lucke
7e399119dc Merge branch 'blender-v4.2-release' 2024-06-14 20:43:39 +02:00
Jacques Lucke
6edeae5c90 Fix #122601: unexpected scaling in Curve to Mesh node with custom curve normals
The issue was that we used `from_orthonormal_axes` which obviously expects that
the axes are orthonormal. However, with custom curve normals this is not always the
case. Math wise, an additional normalization is necessary because the cross product
is not automatically normalized anymore.

This change also means that `point_matrix` may have a shearing component. But I
think that's fine here because the matrix is only immediately applied on vertex positions.
This shouldn't affect any case where the normal and tangent are orthonormal.

Pull Request: https://projects.blender.org/blender/blender/pulls/123238
2024-06-14 20:42:50 +02:00
Brecht Van Lommel
9068ea6d45 Merge branch 'blender-v4.2-release' 2024-06-14 15:48:27 +02:00
Christoph Lendenfeld
7e9b580546 Fix #119360: Precision issue with cycle modifier
The issue was a floating point precision issue
between the number of the cycle and the time
within the cycle (`cycle` and `cyct`).
Due to that the `cycle` would advance to the
next whole number while the `cycle time`
is still slightly under that.

This is fixed by calculating the `cycle` with double precision.

This has a measurable performance
impact (for `fcm_cycles_time`)

| Before | After |
| - | - |
| 39ns | 44ns |

For fcurves with a cycle modifier,
this code is run at every evaluate call.
The only time when that would be an issue is
in the graph editor, where there is an evaluate
call for roughly every pixel for curves that have a modifier.
However even in that scenario the performance
is the same within run to run variance (for `graph_draw_curves`)

| Before | After |
| - | - |
| 91565ns | 91430ns |

Pull Request: https://projects.blender.org/blender/blender/pulls/123222
2024-06-14 15:43:34 +02:00
Jacques Lucke
55e3e6ab5b Merge branch 'blender-v4.2-release' 2024-06-14 12:46:38 +02:00
Jacques Lucke
f2a372b44e Fix #122870: quaternions not interpolated correctly in subdivision surface 2024-06-14 12:35:21 +02:00
Aras Pranckevicius
60d8802ffc Merge branch 'blender-v4.2-release' 2024-06-14 12:46:10 +03:00
Jacques Lucke
d088c3dfe5 Fix #123098: rotation attribute in baked data not loaded correctly 2024-06-14 11:27:36 +02:00