Commit Graph

120055 Commits

Author SHA1 Message Date
Lukas Tönne
95940e98e1 Fix #128071: GPv3 Fill tool has to compute texture space for new curves
This computes a texture space matrix for newly created strokes.

Pull Request: https://projects.blender.org/blender/blender/pulls/128077
2024-09-24 18:01:21 +02:00
Nathan Vegdahl
629b3ccd42 Anim: update collada export code for slotted actions
The collada export code was directly using `action->curves` in its
export code, which doesn't work with slotted actions. This commit
updates that code to use wrapper functions that provide access to the
correct fcurves regardless of whether the action is slotted or not.

Note that the import code has not yet been updated, and is left for
a future PR.

Ref: #123424
Pull Request: https://projects.blender.org/blender/blender/pulls/128061
2024-09-24 17:47:57 +02:00
Jacques Lucke
af0d417450 Geometry Nodes: hide checkbox in skip socket in simulation zone
It is too easy to accidentally enable skipping the simulation while moving the
node around without noticing. Now it is necessary to pass in a boolean value
from another node to modify the skip value. Existing files that had this
checkbox checked are updated by versioning code.

This implements #127506.

Pull Request: https://projects.blender.org/blender/blender/pulls/127988
2024-09-24 17:45:10 +02:00
Sybren A. Stüvel
3b87859204 Anim: Convert Grease Pencil conversion code to new Action API
Convert the Grease Pencil legacy converter code to the new layered
Action API.

Unfortunately this cannot just work on legacy Actions (and then rely on
the versioning to layered Actions we'll land soon), as the GP conversion
runs as the final step of the versioning process. This cannot be helped,
as the usual versioning is not allowed to create new IDs and this does.

Ref: #123424

Pull Request: https://projects.blender.org/blender/blender/pulls/128064
2024-09-24 17:28:35 +02:00
Falk David
dddcc3f378 GPv3: Parent to armature with automatic weights
This ports the armature parenting with automatic weights from GPv2.

Pull Request: https://projects.blender.org/blender/blender/pulls/128073
2024-09-24 17:12:46 +02:00
Lukas Tönne
23cd299ba7 GPv3: Selection support in Sculpt mode
Supporting selection operators and overlays in sculpt mode is necessary
to support masking operations.
This enables selection drawing in the overlay in sculpt mode,
and ensures all the necessary operators (pick, lasso, circle, box)
handle the differences in modes correctly.

The selection code so far was expecting object mode, so the `vc->obedit`
object was used without further checks. Now the selection code can be
called outside of edit mode, in which case the `vc->obact` object must
be used instead. Similarly edit mode and sculpt mode have separate
`selectmode` flags, so the correct mode property must be used from the
tool settings depending on the object mode. These changes require some
refactoring of unrelated selection code.

Pull Request: https://projects.blender.org/blender/blender/pulls/128040
2024-09-24 16:27:06 +02:00
Brecht Van Lommel
b74dfa8cfc Build: Changes for make deps to work on Linux arm64 again
This is not an officially supported platform, but it was working before
so might as well keep it up to date.

* Tweak logic for various BLENDER_PLATFORM_ARM checks
* Use linux_arm64 name for folders, matching Windows and macOS
* CUDA is enabled, SYCL and HIP are not
* Tested to work on Rocky Linux 8
2024-09-24 15:54:47 +02:00
Sybren A. Stüvel
0c9ef75df8 Fix #127976: Actions created via Python can't be used in action constraints
The Action Constraint would only allow actions that were once assigned
to objects, i.e. with `action->idroot == ID_OB`. This did not take into
account the equally valid `0` case, which is what indicates that this
Action has never been assigned to anything yet.

Pull Request: https://projects.blender.org/blender/blender/pulls/128072
2024-09-24 15:36:24 +02:00
Julian Eisel
892ba12bc9 Fix #128027: Last used brush not remembered correctly
Order of operations was wrong: First, the new tool has to be activated
(or at least identified) before we can tell which tool (or more precise,
which brush type) to update the brush binding for.
2024-09-24 15:31:10 +02:00
casey bianco-davis
a0021ed862 GPv3: Move layer operator.
Add `move layer` operator and move UI to match the legacy Grease Pencil's UI.
This will also move groups when selected.

Pull Request: https://projects.blender.org/blender/blender/pulls/127999
2024-09-24 14:59:11 +02:00
Sybren A. Stüvel
5a79c8f31d Refactor: modern API for getting FCurves in Legacy Grease Pencil anim code
No functional changes.

Ref: #123424

Pull Request: https://projects.blender.org/blender/blender/pulls/128069
2024-09-24 14:50:08 +02:00
Sahar A. Kashi
26ed4d3892 Cycles: Linux Support for HIP-RT
This change switches Cycles to an opensource HIP-RT library which
implements hardware ray-tracing. This library is now used on
both Windows and Linux. While there should be no noticeable changes
on Windows, on Linux this adds support for hardware ray-tracing on
AMD GPUs.

The majority of the change is typical platform code to add new
library to the dependency builder, and a change in the way how
ahead-of-time (AoT) kernels are compiled. There are changes in
Cycles itself, but they are rather straightforward: some APIs
changed in the opensource version of the library.

There are a couple of extra files which are needed for this to
work: hiprt02003_6.1_amd.hipfb and oro_compiled_kernels.hipfb.
There are some assumptions in the HIP-RT library about how they
are available. Currently they follow the same rule as AoT
kernels for oneAPI:
- On Windows they are next to blender.exe
- On Linux they are in the lib/ folder

Performance comparison on Ubuntu 22.04.5:
```
GPU: AMD Radeon PRO W7800
Driver: amdgpu-install_6.1.60103-1_all.deb
                       main         hip-rt
attic                  0.1414s      0.0932s
barbershop_interior    0.1563s      0.1258s
bistro                 0.2134s      0.1597s
bmw27                  0.0119s      0.0099s
classroom              0.1006s      0.0803s
fishy_cat              0.0248s      0.0178s
junkshop               0.0916s      0.0713s
koro                   0.0589s      0.0720s
monster                0.0435s      0.0385s
pabellon               0.0543s      0.0391s
sponza                 0.0223s      0.0180s
spring                 0.1026s      1.5145s
victor                 0.1901s      0.1239s
wdas_cloud             0.1153s      0.1125s
```

Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Co-authored-by: Ray Molenkamp <github@lazydodo.com>
Co-authored-by: Sergey Sharybin <sergey@blender.org>

Pull Request: https://projects.blender.org/blender/blender/pulls/121050
2024-09-24 14:35:24 +02:00
Sybren A. Stüvel
dfa25d3f05 Fix: Anim, avoid nullptr deref when deleting the last key of an Action
Deleting the last key on an F-Curve also deletes that F-Curve, and if
that happened to be the last F-Curve of the Action, the entire Action is
deleted (only for legacy Actions).

Tagging the depsgraph is now only done when the Action itself survives.

Pull Request: https://projects.blender.org/blender/blender/pulls/128067
2024-09-24 13:57:50 +02:00
Sybren A. Stüvel
022f4641b8 Refactor: Anim: action_foreach_fcurveforeach_fcurve_in_action_slot
Rename `action_foreach_fcurve` to `foreach_fcurve_in_action_slot`. This
matches the functionality better, and opens up the floor for an iterator
that actually does loop over all F-Curves in an Action.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/128065
2024-09-24 13:44:27 +02:00
Pratik Borhade
c08a71d5a2 Fix #128056: Crash when ctrl click on Outliner collection toggles
Caused by e494a44024
Missing null check.

Pull Request: https://projects.blender.org/blender/blender/pulls/128058
2024-09-24 13:34:18 +02:00
Aras Pranckevicius
64feb05089 VSE: Multi-threaded video proxy downscaling
When building proxies at lower than 100% resolution, the video frame
downscaling step was single threaded, as found via #127956.

Make it use the same threaded sws_scale machinery that the usual video
decoding/encoding uses. Video encoding/decoding was only using it for
RGB<->YUV conversions, so source and destination sizes were always matching;
here it needs to have different source and destination sizes though.

Time taken to rebuild 50% proxy for a 4K resolution 1440 frames (1 minute)
long video file, on Ryzen 5950X (Win10/VS2022):

- Blender 4.2: 20.1 sec, CPU usage 30-40%.
- Blender 4.3 main: 13.1 sec (ffmpeg build has been fixed to use SIMD),
  CPU usage still 30-40% though.
- This PR: 8.3 sec, CPU usage ~95%.

Pull Request: https://projects.blender.org/blender/blender/pulls/128054
2024-09-24 12:47:41 +02:00
Bastien Montagne
e44fc3df06 Refactor: Modernize BlendfileLinkAppendContext and related link/append BKE code.
Mainly remove usages of BLI memarena and bitmap, and use owninh C++
containers instead. And replace pointers by references in some of the
internal functions parameters.

Pull Request: https://projects.blender.org/blender/blender/pulls/128041
2024-09-24 12:00:54 +02:00
Falk David
37458329e2 Refactor: GPv3: Arguments to ensure_active_keyframe function
This does some changes to the ed::greasepencil::ensure_active_keyframe` function.
* The context was only needed to get the scene, pass the scene directly
* Don't use the active layer by default but pass a reference to a
  layer instead. This makes it also possible to create keyframes
  on multiple layers using a loop.
2024-09-24 11:58:36 +02:00
Jacques Lucke
6e5e01e630 Geometry Nodes: new For Each Geometry Element zone
This adds a new type of zone to Geometry Nodes that allows executing some nodes
for each element in a geometry.

## Features

* The `Selection` input allows iterating over a subset of elements on the set
  domain.
* Fields passed into the input node are available as single values inside of the
  zone.
* The input geometry can be split up into separate (completely independent)
  geometries for each element (on all domains except face corner).
* New attributes can be created on the input geometry by outputting a single
  value from each iteration.
* New geometries can be generated in each iteration.
    * All of these geometries are joined to form the final output.
    * Attributes from the input geometry are propagated to the output
      geometries.

## Evaluation

The evaluation strategy is similar to the one used for repeat zones. Namely, it
dynamically builds a `lazy_function::Graph` once it knows how many iterations
are necessary. It contains a separate node for each iteration. The inputs for
each iteration are hardcoded into the graph. The outputs of each iteration a
passed to a separate lazy-function that reduces all the values down to the final
outputs. This final output can have a huge number of inputs and that is not
ideal for multi-threading yet, but that can still be improved in the future.

## Performance

There is a non-neglilible amount of overhead for each iteration. The overhead is
way larger than the per-element overhead when just doing field evaluation.
Therefore, normal field evaluation should be preferred when possible. That can
partially still be optimized if there is only some number crunching going on in
the zone but that optimization is not implemented yet.

However, processing many small geometries (e.g. each hair of a character
separately) will likely **always be slower** than working on fewer larger
geoemtries. The additional flexibility you get by processing each element
separately comes at the cost that Blender can't optimize the operation as well.
For node groups that need to handle lots of geometry elements, we recommend
trying to design the node setup so that iteration over tiny sub-geometries is
not required.

An opposite point is true as well though. It can be faster to process more
medium sized geometries in parallel than fewer very large geometries because of
more multi-threading opportunities. The exact threshold between tiny, medium and
large geometries depends on a lot of factors though.

Overall, this initial version of the new zone does not implement all
optimization opportunities yet, but the points mentioned above will still hold
true later.

Pull Request: https://projects.blender.org/blender/blender/pulls/127331
2024-09-24 11:52:02 +02:00
Julian Eisel
ebc4759df5 Fix #128053: Crash when using Ctrl for eraser in grease pencil draw mode
Default eraser wasn't initialized, mistake in a38c96b92c.
2024-09-24 11:46:49 +02:00
Lukas Tönne
182efd7ad9 Fix: Build error due to Grease Pencil layer dereference (API change). 2024-09-24 11:44:41 +02:00
Aras Pranckevicius
c67a9528af VSE: Faster timeline drawing by avoiding repeated SEQ_render_is_muted calls
SEQ_render_is_muted is a fairly expensive, since it has to walk
a linked list of channels to find the one with the given index.
During timeline drawing, this was called for each strip multiple times.
Instead, get that value once per visible strip.

Viewing Sprite Fright Edit v135 whole timeline on Ryzen 5950X
(Win10/VS2022): timeline repaint 7.7ms -> 7.5ms

Pull Request: https://projects.blender.org/blender/blender/pulls/128057
2024-09-24 11:40:35 +02:00
Lukas Tönne
bf2f4e54cc GPv3: Take layer transform into account when using clipboard
This affects the edit-mode copy/paste operators as well as the sculpt
mode _Clone_ tool. These copy and paste to/from the clipboard, but were
not applying the layer transform in the process. All curves were stored
in their respective local layer space. Since everything gets merged
these transforms get lost when storing to the clipboard.

Pasting curves from the clipboard was also not applying the target layer
transform. Also the clipboard content was getting pasted into every
editable drawing.

Now clipboard curves are always stored in world space. Pasting only
happens on the active layer, and the active layer inverse transform is
applied so visual transform of curves shouldn't change through copy and
paste.

Pull Request: https://projects.blender.org/blender/blender/pulls/127917
2024-09-24 11:35:07 +02:00
Christoph Lendenfeld
6ea0b8cdb2 Fix #127758: Resorting keys in the Graph Editor with multiple actions failed
When having two objects selected that use the same action,
the Graph Editor would effectively show the same FCurve on 2 channels.
When building the `TransData` array the code would iterate
all channels though not checking for duplicate FCurves.
As a result when transforming keys, the `TransData`
array would contain the same entry twice.

That would break the logic introduced in c6c7d3d8c4 which
builds a Map of the `float *` that needs
updating and the index of that data in the array.
Only the first index of the `TransData` array would be updated since the
Map can only contain a certain value once.

The fix is to ensure that entries in the `TransData` array are unique.
This is done in the construction of the array.

Pull Request: https://projects.blender.org/blender/blender/pulls/127911
2024-09-24 11:34:41 +02:00
Sybren A. Stüvel
2286868298 Anim: support layered Actions when symmetrizing Action Constraint
The Symmetrize Action operator also updates Action Constraints, and even
alters its Action to have identical (but mirrored) F-Curves for the bones.
This now uses the new API for layered Actions, (hopefully) correctly
storing the F-Curves and Action Groups.

I suspect there is still a bug in there, but that's now equally there for
legacy & layered Actions.

Pull Request: https://projects.blender.org/blender/blender/pulls/128039
2024-09-24 11:26:10 +02:00
Sybren A. Stüvel
82e757e61d Replace BKE_fcurves_filter() with the new slotted Actions API
`BKE_fcurves_filter()` was only used by the Symmetrize Armature
operator, when dealing with Action Constraints on the bones.

`BKE_fcurves_filter()` is now removed, and has been replaced by the new
`animrig::fcurve_find_in_action_slot_filtered()`. It's functionally
pretty much the same, except that it returns a `Vector<FCurve *>`
instead of manipulating a `ListBase` parameter.

Because it's now implemented using an iterator in
`ANIM_action_iterators.hh` it didn't feel right to keep the function in
BKE.

No functional changes.
2024-09-24 11:26:09 +02:00
casey bianco-davis
1b6220a4ba GPv3: Fill gradient tool
This adds a gradient tool allowing the user to specify a gradient by dragging from a start to a end point.
This behaves the same as most gradient tool in other softwares.

Pull Request: https://projects.blender.org/blender/blender/pulls/120121
2024-09-24 11:25:28 +02:00
Falk David
5eeb5cd164 Fix: GPv3: Crash on loading file with layer parents
The issue was that the `grease_pencil_foreach_id` did not walk
the parent object pointers which meant they were pointing
to garbage memory.

The fix makes sure to walk all the parent pointers.
2024-09-24 11:22:43 +02:00
Sybren A. Stüvel
6d8e3959b0 Anim: Fix legacy/layered choice in action_fcurve_ensure()
Fix the code that decides whether to create a new F-Curve in a legacy or
layered style. The old code went for layered if:

- The experimental feature is enabled AND the Action is already layered.

The new code goes for layered if:

- The experimental feature is enabled AND the Action is empty, OR
- The Action is already layered.

Pull Request: https://projects.blender.org/blender/blender/pulls/128036
2024-09-24 11:21:21 +02:00
Sybren A. Stüvel
4a1bf5f172 Refactor: replace BKE_fcurve_find() calls when searching in an Action
Replace those calls to `BKE_fcurve_find()` that are searching in the
curves of an Action with their corresponding call in `animrig`:

- `animrig::fcurve_find_in_action()` when it should really search
  through the entire Action,
- `animrig::fcurve_find_in_action_slot()` when only the F-Curves for a
  specific slot should be searched, or
- `animrig::fcurve_find_in_assigned_slot()` same as above, searching
  through the action slot that is assigned to the given ADT.

This also makes `animrig::fcurve_find_in_action()` compatible with both
layered and legacy Actions.
2024-09-24 11:21:20 +02:00
Sybren A. Stüvel
038eb3ed53 Refactor: Anim: rename animrig::action_fcurve_find to fcurve_find_in_action
This makes the naming a bit closer to the `BKE_fcurve_find()` function,
and opens op the naming for two upcoming functions
`fcurve_find_in_action_slot` and `fcurve_find_in_assigned_slot`.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/128036
2024-09-24 11:21:20 +02:00
casey bianco-davis
559c39c889 GPv3: Sculpt mode: Use shift for smoothing
This makes holding shift do a smooth operation in sculpt mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/128046
2024-09-24 10:45:41 +02:00
Vitalijs Komasilovs
2e11331dfc Fix #127286: fixing memory release after light probe bake
GPU resources created during Light probe bake job were added to discard pool, but the pool itself was never notified by worker thread to release resources.
Bake job creates dedicated `GPUContext` for its needs and later deletes it within the same thread.

Pull Request: https://projects.blender.org/blender/blender/pulls/127977
2024-09-24 10:19:49 +02:00
Sybren A. Stüvel
bc1375a014 Cleanup: Anim: remove declaration of non-existing function
Remove the declaration of `blender::animrig::legacy::action_has_fcurves()`.
Its implementation was never committed to `main`, and the declaration also
shouldn't have.

No functional changes.
2024-09-24 10:09:13 +02:00
Jeroen Bakker
13fa6d6ae1 Vulkan: Refactor of descriptor set
Removes two levels of indirection when updating descriptor sets.
These are the easy ones to remove. Others will be removed in
a future PR.

This is part of reworking of how descriptor sets are used.
This PR Mostly reduces complexity.

Pull Request: https://projects.blender.org/blender/blender/pulls/127915
2024-09-24 10:03:16 +02:00
Nathan Vegdahl
4bfa0de388 Anim: update some uses of listbases of fcurves
Because we're moving to layered actions, which don't store their
fcurves in a list base, we need to update the places that assume the old
listbase-based structure.

This commit addresses the low-hanging fruit where code was previously
using the `LISTBASE_FOREACH` macro on a listbase of fcurves and it was
fairly obvious how to correctly update the code with minimal changes.
Other cases that either weren't immediately obvious or required
non-trivial code changes (or both) have been left for future PRs.
Additionally, uses of the list base that didn't use `LISTBASE_FOREACH`
were not investigated as part of this PR, whether trivial to update or
not.

Ref: #123424
Pull Request: https://projects.blender.org/blender/blender/pulls/127920
2024-09-24 09:59:48 +02:00
Campbell Barton
22397ad819 Fix #128012: disabling "Load UI" makes nodes unselectable
Resolve regression in [0] which caused the tool not to refresh
when loading a file without it's UI.

[0]: 83fe5712ab
2024-09-24 17:41:53 +10:00
Campbell Barton
5b5576993e Transform: skip hidden edges when checking an vertices edge is visible 2024-09-24 15:36:06 +10:00
Campbell Barton
ed2d131887 Transform: use deformed geometry when checking edge visibility 2024-09-24 15:36:03 +10:00
Campbell Barton
a13513ab25 Fix #125646: Resolve edge-slide performance regression when snapping
Partially revert [0] which replaced BMBVHTree with SnapObjectContext.

While SnapObjectContext is a comprehensive method of performing
ray-casts, the purpose of edge-slide visibility checks is mainly to
exclude back-facing vertices.

Using SnapObjectContext has some down-sides that include iterating
over all dupli-instances for every vertex, details in code-comments.

Resolve be restoring simpler self-occlusion check.

[0]: 2d50a41d77

Ref !128016
2024-09-24 15:36:02 +10:00
Campbell Barton
2ab800b685 Cleanup: pass const arguments to BMBVHTree related functions 2024-09-24 15:36:00 +10:00
Campbell Barton
1ceab37693 Cleanup: use blender::float3 for BKE_bmbvh_* API 2024-09-24 15:35:59 +10:00
Pratik Borhade
ccb1865925 Fix #126006: UI: Few id operators appears in nested context menus
lib override and add asset operation appears in nested context menu.
They are incorrectly exposed when right clicked on an operator in
context menu. So don't expose then when opening nested context menu on
operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/126927
2024-09-23 23:29:54 +02:00
Jesse Yurkovich
e1a44ad129 Cleanup: various non-functional changes when reading usd attribute data
- Use `lookup_or_add_for_write_only_span` in more places
- Use `copy_from` when reading in positions for the few readers where
  this wasn't already being done
- Remove manual memory management when processing corner normals

Pull Request: https://projects.blender.org/blender/blender/pulls/128043
2024-09-23 21:16:44 +02:00
Jesse Yurkovich
bd841a92e2 Cleanup: move some constants inside the usd namespace and use constexpr
Pull Request: https://projects.blender.org/blender/blender/pulls/128042
2024-09-23 20:39:59 +02:00
Lukas Tönne
cbe2bb6755 Fix #127856: GPv3 sculpt mode delta projection (lock axis) without DrawingPlacement
Sculpt mode in Grease Pencil should not use the origin point of
`DrawingPlacement` and only apply the plane projection to relative
offsets.

A new variant of the `foreach_editable_drawing` function is introduced
that provides a `DeltaProjectionFunc` instead of `DrawingPlacement`.
This projection callback takes a layer-space position and a screen-space
delta and returns a layer-space position with the constrained delta
applied. The projection function is based on the tools settings'
"lock axis", like `DrawingPlacement`, but ignores the origin point.

Exception is the smoothing tool, which does not restrict movement along
the lock axis. This can be implemented if desired, but for a
non-directional tool it seems the lock axis isn't very meaningful.

Pull Request: https://projects.blender.org/blender/blender/pulls/128022
2024-09-23 19:46:22 +02:00
Hans Goudey
3f6e36bdda Fix #127994: Stack use after scope constructing sculpt BVH
Caused by c2dd238ba1.
Moving the BVH (and sadly returning it by value currently)
causes issues in debug builds because the `prim_indices_`
references in the nodes becomes invalid. The simplest fix
is to just not use an inline buffer so the array's data pointer
doesn't change when `Tree` moves.
2024-09-23 13:37:31 -04:00
Richard Antalik
8da413877b Fix: VSE: hang after making meta strip
Caused by incorrectly using mutable `ListBase` iterator, which caused
adding same strip to meta twice. This caused `next` and `prev` fields
to be set to same value resulting in infinite loop in next iterator.

Since multiple strips can be removed from list in one iteration, collect
these into `VectorSet` and move them in separate for loop.

Also do cache invalidation while strips are in original `seqbase`,
otherwise it can skip invalidation of strips downstream.

Pull Request: https://projects.blender.org/blender/blender/pulls/127951
2024-09-23 18:51:54 +02:00
Jacques Lucke
c31893ed87 Fix: inconsistent socket identifiers in reroute nodes 2024-09-23 18:44:16 +02:00
Jesse Yurkovich
9be3c356d1 Fix: allow use of UDIM tile 1100 in USD
The UsdPreviewSurface spec was recently[1] updated to version 2.5 where
they now specify a full 10x10 grid as being supported. This just makes a
minor change on our side to accommodate this adjustment (as rare as it
may be).

[1] Looks to have been added as part of USD 23.11
https://openusd.org/release/spec_usdpreviewsurface.html#version-2-5-current-head

Pull Request: https://projects.blender.org/blender/blender/pulls/127989
2024-09-23 18:22:15 +02:00