Commit Graph

24689 Commits

Author SHA1 Message Date
Sean Kim
8a812e334d Fix #125375: Sculpt undo with duplicate object causes crash
Introduced with d527e3a6bd.

Cached values are tagged as dirty during the update step, this can cause
conflicts where we attempt to then flush then changes into the PBVH but
have not yet updated the mesh pointers and reinitialized them.

This commit forcibly initializes the underlying data to prevent such
cases from happening when flushing to the PBVH.

Pull Request: https://projects.blender.org/blender/blender/pulls/125396
2024-07-26 18:01:11 +02:00
Falk David
6f050fecfb GPv3: Python API for frame, drawing and drawing attributes
This is a PR that is built on top of #122094 (thanks to @SietseB
for the initial work).

Adds the following properties and functions:
* `layer.frames`,
* `layer.frames.new(frame_number)`
* `layer.frames.remove(frame_number)`
* `layer.frames.copy(from, to)`
* `frame = layer.get_frame_at(frame_number)`
* `frame.drawing`
* `frame.frame_number`
* `frame.select`: the selection state of the keyframe in the dope sheet
* `frame.keyframe_type`
* `drawing = frame.drawing`
* `drawing.type` (`DRAWING`/`REFERENCE`)
* `drawing.user_count`: The number of keyframes that use this drawing
* `drawing.attributes`: attribute read/write access to the drawing data

To be able to access attributes on drawings, a new
`AttributeOwnerType::GreasePencilDrawing` is added.
The API in `BKE_attributes.h` is updated to handle this type.

In `rna_attributes.cc`, there is a new
`rna_def_attribute_group_grease_pencil_drawing` that defines the
attribute group. For this to work, it also defines its own rna
callback functions.

Pull Request: https://projects.blender.org/blender/blender/pulls/124787
2024-07-26 16:29:59 +02:00
Julian Eisel
489a5e92b8 Cleanup: Remove now unused asset identifier files
Missed this in 693e590d9f.
2024-07-26 15:12:51 +02:00
Julian Eisel
693e590d9f Refactor: Assets: Remove unnecessary asset identifier class
This was just rather useless level of abstraction. I heard from other
devs that these helper classes caused confusion, so better to avoid
this.

Now the asset representation has all the needed bits to create its full
path, blend-file path and asset library relative path. In fact only the
asset library relative path needs to be stored to make all this
available, since the asset representation already stores a reference to
the asset library owning it, so the paths can be recreated easily.
2024-07-26 15:03:06 +02:00
Sybren A. Stüvel
c7bf1a697e Anim: forward compatibility for F-Curves in layered Actions
When writing a layered Action to disk, take the F-Curves from the
first keyframe strip and write that as `action.curves` as well. This
will make older Blender versions see those curves and load them
properly.

Only the curves for the first slot are written this way. This means
that any legacy Action that was converted to a layered Action will be
loaded again properly by older Blender versions. Of course this is
limited to a single layer, single strip, and single slot -- once the
newer features are used, older versions of Blender will not be able to
see this extra data.

When an Action contains multiple slots, so with animation for multiple
distinct objects, the forward compatibility becomes a bit iffy. Older
versions of Blender will just see a legacy Action, with its legacy
semantics, and thus all objects that use that Action will receive the
exact same animation data. I don't think there's a way around this.
(_Unless we start breaking up Actions into an Action per slot, alter
the assignments, and then store metadata so that modern Blenders can
reassemble them. I do not think this is a good idea._)

Ref: #124714

Pull Request: https://projects.blender.org/blender/blender/pulls/125065
2024-07-26 11:13:40 +02:00
Sean Kim
6568629520 SubdivCCG: Add to_index helper method
This commit adds a method to compute the position of a given
SubdivCCGCoord in an appropriately sized array.

Pull Request: https://projects.blender.org/blender/blender/pulls/125462
2024-07-26 04:35:34 +02:00
Hans Goudey
d24957450c Cleanup: Remove unused BMesh fairing function 2024-07-25 13:45:00 -04:00
Hans Goudey
88b6910d06 Cleanup: Sculpt: Remove unnecessary allocation, use references 2024-07-25 13:45:00 -04:00
Hans Goudey
4742fa7f40 Refactor: Sculpt: Remove BMesh custom data offset from BVH tree
Instead just compute the offsets as necessary. This avoids the need
to keep them in sync as the BMesh changes, though it requires passing
a few more arguments in the dynamic topology remeshing code.
2024-07-25 12:40:14 -04:00
Hans Goudey
6155c72237 Refactor: Sculpt: Remove PBVH BMesh log pointer
This log is owned by SculptSession, it's a bit misleading
to store a pointer to it in the sculpt BVH tree, and having
multiple mutable pointers to objects should generally be
avoided anyway. Now just pass it to the remeshing function
which is the oinly place it was needed anyway.
2024-07-25 12:40:13 -04:00
Hans Goudey
3199915f35 Cleanup: Switch to C++ API for 3D cursor transform
Replace the `BKE_scene_cursor` functions with member functions
of the `View3DCursor` DNA struct. This makes using the cursor's
transform simpler, especially in newer C++ code.

Pull Request: https://projects.blender.org/blender/blender/pulls/124903
2024-07-25 17:53:09 +02:00
Falk David
b1f747b19c Curves: Add explanation of magic number in calculate_point_handles
Add an explanation of the math for where the magic `2.5614f` comes from.

Pull Request: https://projects.blender.org/blender/blender/pulls/125302
2024-07-25 17:32:49 +02:00
Falk David
f34a4229e0 Fix: GPv3: Lineart: Conversion from 4.2 not working correctly
There were two issues:
* The target layer name was not copied over
* The thickness setting was being divided by two when it
resulted in thinner strokes.
2024-07-25 12:08:19 +02:00
Falk David
d2714dab7d Cleanup: GPv3: static function name for lineart conversion 2024-07-25 12:08:19 +02:00
Sybren A. Stüvel
651a7522a4 Refactor: Anim, rename leftover 'binding' references to 'slot'
Rename leftover references to action 'bindings' to 'slot':

- Two comments, and
- bunch of `bind_` variable prefixes, renamed to `slot_`.

No functional changes.
2024-07-25 12:04:05 +02:00
Sybren A. Stüvel
9427ec3f40 Fix #125063: Anim: layered Action data is still loaded in 4.2-release
Add `#ifdef WITH_ANIM_BAKLAVA` to the blend file reading/writing code,
so that the Action layers & slots are ignored when Blender is built
without experimental features.

This ensures that any loaded Action is just treated as 'legacy' (which
is the only kind of Action non-experimental Blender should have to deal
with), which will also properly deal with the forward compatible data
written by !125065.

This fix was committed on the `blender-v4.2-release` branch as
1b7485f20892523942752f81239807b2eab0f00b.

Pull Request: https://projects.blender.org/blender/blender/pulls/125068
2024-07-25 11:38:40 +02:00
Campbell Barton
c589634f73 Cleanup: use colon after parameters 2024-07-25 10:17:45 +10:00
Campbell Barton
2edc2393d2 Cleanup: spelling in comments 2024-07-25 10:17:42 +10:00
Omar Emara
40be124184 Fix #122253: Image saving ignores EXR color format
All image saving mechanisms in Blender ignores the color format for EXR
images, including Render Pipeline, Save Operator, and File Output nodes.

To fix this, we first allow EXR images to be BW for flexibility. Then we
adjust the EXR saving code to take into account the required number of
channels. This is only done for single layer EXR images. Multi-layer EXR
images correctly ignores the option.

Pull Request: https://projects.blender.org/blender/blender/pulls/124807
2024-07-24 14:20:59 +02:00
Hans Goudey
45e4fecf9b Refactor: Separate mesh and multires PBVH building
Though it results in more duplication currently, splitting these
could help to facilitate further performance improvements here
in the future, and it avoids passing a bunch of useless arguments
for the multires case.
2024-07-24 07:54:59 -04:00
Hans Goudey
aa0ea3cf8f Cleanup: Remove "using" statements
The proper solution is to move the relevant code to the Blender
namespace. It should look ugly until then because it is.
2024-07-24 07:54:59 -04:00
Hans Goudey
dca3d87052 Cleanup: Remove unhelpful PBVH debugging utilities
These were mostly getting in the way of refactoring this code.
If the referenced problems actually happen, there would be
more obvious ways to observe the issues anyway.
2024-07-24 07:54:59 -04:00
Hans Goudey
d4f824b5af Cleanup: Reorder functions to group PBVH building 2024-07-24 07:54:59 -04:00
Hans Goudey
9d1b230a55 Cleanup: Sculpt: Pass BVH nodes by reference 2024-07-24 07:54:59 -04:00
Hans Goudey
f9c6fe30db Sculpt: Extract bounds calculation from BVH build, parallelize
This applies the same change as the previous commit to the bounds
of every BVH node. The bounds calculation can be changed to use
the standard functions from the regular BVH deformation.

In a simple test this makes building the sculpt BVH 64% faster.
I observed a change from 762ms to 464ms for a 1.9m vertex mesh.
2024-07-24 07:46:02 -04:00
Hans Goudey
8ab2a139ca Sculpt: Extract visibility calculation from BVH build, parallelize
This simplifies the BVH build process and potentially improves
its performance when parts of the geometry is hidden. The method
used to calculate whether a node is fully hidden is slightly different
too, vertex indices are used instead of triangle indices and a triangle
to face map.
2024-07-24 07:46:02 -04:00
Hans Goudey
0da90f05fe Cleanup: Sculpt: Simplify scratch array usage for BVH build 2024-07-24 07:46:02 -04:00
Hans Goudey
d40751c7b2 Cleanup: Sculpt: Clarify naming of BVH node field 2024-07-24 07:46:01 -04:00
Hans Goudey
2401a022ab Cleanup: Sculpt: Reduce indirection for painting data access
Remove unnecessary structs that just hold pointers to other data
2024-07-24 07:46:01 -04:00
Sean Kim
338140f1e6 Fix #125157: Sculpt multires crashes on box mask and duplicated stroke
Introduced in d527e3a6bd.

The change to update PBVH normals before destroying the PBVH to fix
shading on duplicate meshes issues had the unfortunate side effect of
causing crashes for multires due to a race condition. This commit
simply avoids performing this flushing for multires to allow for
further iteration in the future instead of reverting the offending
commit entirely.

Pull Request: https://projects.blender.org/blender/blender/pulls/125268
2024-07-23 22:56:26 +02:00
Hans Goudey
7daefd730b Refactor: Sculpt: Change PBVH and PBVHNode to public classes
Part of #118145.

These days we aren't really benefiting from making PBVH an opaque type.
As we remove its responsibilities to focus it on being a BVH tree and look
to improve performance with data-oriented design, that will only become
more true.

There are some other future developments the current header structure
makes difficult:
- Storing selections of nodes with `IndexMask` for simpler iteration, etc.
- Specialization of node type for each PBVH type
- Reducing overhead of access to node data as nodes get smaller
- General C++ cleanliness and consistency

This PR moves `PBVH` to `blender::bke::pbvh::Tree` and moves `PBVHNode`
to `blender::bke::pbvh::Node`. Both are classes visible to elsewhere in Blender
but with private data fields.

The difficult part about the change is that we're in the middle of a transition
removing data from PBVH. Rather than making some data truly private I
chose to just give it the `_` suffix, since it will ideally be removed later.
Other things should be class methods or implemented as part of friend
classes. But the "fake" private status is much simpler for now and avoids
increasing the scope of this PR too much. Though that's a bit ugly, there's a
straightforward way to resolve these issues-- it just looks like the sort of
inconsistency you'd expect in the middle of a large refactor.

Pull Request: https://projects.blender.org/blender/blender/pulls/124919
2024-07-23 22:31:27 +02:00
Falk David
ccc5922ece GPv3: Add "Set Curve Resolution" operator
Set the resolution of the selected curves.

Pull Request: https://projects.blender.org/blender/blender/pulls/125235
2024-07-23 15:23:35 +02:00
Falk David
752fad886a Fix #125312: Drawings not cleared after last layer is removed
In the case where the last layer is removed and all the drawings
have zero users, in the `remove_drawings_with_no_users` function
the `find_next_swap_index` lambda would return `false` on the
first call. Both `first_unused_drawing` and `last_used_drawing`
are `0` in this case. This meant that the `drawings_to_remove`
index mask would exclude the first drawing (because
`last_used_drawing` is the index of the first drawing) and not
remove it as it should.

To fix this, we check if `first_unused_drawing` is greater than zero.
If it is not, then we know all the drawings have to be removed.
Otherwise we only remove the drawings after
`last_used_drawing + 1`.

Pull Request: https://projects.blender.org/blender/blender/pulls/125318
2024-07-23 15:22:14 +02:00
Omar Emara
c7fdd46e01 Cleanup: Missing BKE compositor include 2024-07-23 14:05:41 +03:00
Omar Emara
57ff2969b8 Compositor: Support multi-pass compositing for EEVEE
This patch adds support for multi-pass compositing for EEVEE. This is
done by copying the passes used by the compositor node tree to the DRW
view data, which can then be accessed by the viewport compositor.

The viewport compositor will fallback to the viewport texture or an
invalid output of the passes were not initialized, this is currently the
case for any render engine that is not EEVEE.

A future optimization that we can do is eliminate the film pass copy
shaders and only copy the data that EEVEE rendered, which can be a
subset of the viewport for border rendering. This is not done at the
moment because not all engines support passes at the moment, so the
compositor expects full viewport passes.

Depends on: #123685, #123817, #123815.

Pull Request: https://projects.blender.org/blender/blender/pulls/123378
2024-07-23 10:15:13 +02:00
Casey Bianco-Davis
73338c1553 GPv3: Render evaluated geometry
This allows Grease Pencil to render all the different curve types.
The PR changes the batch cache creation to use the evaluated points.

Pull Request: https://projects.blender.org/blender/blender/pulls/122985
2024-07-22 11:10:07 +02:00
Campbell Barton
e2bc41598d Fix drivers showing "Python restricted for security" when they weren't
Regression from [0], drivers were tagged as being disabled with a flag
that was never cleared. Causing the label to be displayed for files
where the expressions were enabled and in use.

Resolve by clearing this flag on file load and when re-compiling
expressions - since an expressions block flag may be cleared if it
becomes a simple expression.

[0]: 1a8053939b
2024-07-22 10:39:50 +10:00
Campbell Barton
d3fbc56021 Cleanup: various cppcheck warnings
Avoid shadowing, use const args & match function & declaration args.
2024-07-22 09:58:43 +10:00
Jacques Lucke
a0068f2b3b Curves: store active attribute index on curves geometry
When attempting to replace `AttributeOwner` with `AttributeAccessor`, we ran into
the problem that the active attribute index is not stored on the `CurvesGeometry`.

The index can be moved between the two places without breaking forward- or backward-compatibility.

Pull Request: https://projects.blender.org/blender/blender/pulls/125059
2024-07-21 09:35:37 +02:00
Bastien Montagne
8055b5d4f9 Core: PartialWriteContext: Fix handling of operations for dependencies.
Add an explicit mask in `IDAddOperations` for flags that are inherited
by default for dependencies of explicitely added data.

And refactor handling of per-id-usage flags returned by the
`dependencies_filter_cb` callback to also have a mask value defined in
`IDAddOperations`, as this is clearer and easier to maintain than a
constexpr hiddin in implementation code.
2024-07-18 15:59:44 +02:00
Christoph Lendenfeld
6ef77a0d22 Anim: Deselect Keys before inserting new keys
This commit changes the keying code to deselect keyframes when inserting new keys.
This has been discussed in the Animation & Rigging module meeting [1].
There is also an RCS post about that [2].
Doing this brings key creation in line with object creation,
where only the newly created object is selected.
There has been a previous attempt [3] to do a similar thing.

### Changes
When inserting keys by pressing `I` in the viewport or choosing a keying set,
all keys of the `Action` get deselected before inserting new keys.
New keys are selected by default.
Python RNA functions are **NOT** affected, meaning addons using
those functions will not deselect any keys by default.
The developer has to choose to do so.
To make that easier, there is a new RNA function on the action
`deselect_keys`

[1]: https://devtalk.blender.org/t/2024-05-02-animation-rigging-module-meeting/34493#patches-review-decision-time-5
[2]: https://blender.community/c/rightclickselect/K0hbbc
[3]: https://archive.blender.org/developer/D11623

Pull Request: https://projects.blender.org/blender/blender/pulls/121908
2024-07-18 14:48:00 +02:00
Bastien Montagne
7a87233c85 PartialWriteContext: add the 'clipboard mark' new operation option.
This is used by ID copy/paste code to detect which IDs from a copy/paste
buffer can be used as paste source.

Also slightly refactor implementation to handle both fake/extra ID user,
and clipboard mark in the same utils function.
2024-07-18 12:52:45 +02:00
Bastien Montagne
3d3fb3dcce Fix: BKE: PartialWrite: Wrong define used in masked-in values.
`DUPLICATE_DEPENDENCIES` was wrongly used instead of `ADD_DEPENDENCIES`,
the former should be considered a non-modifiable option for a whole
'add' operation. But the per-ID-usage callback should be able to force a
dependency to be added or cleared.
2024-07-17 17:46:54 +02:00
Sergey Sharybin
a2f825fde5 Cleanup: Strict compiler warning in release mode
Fixes warning: unused variable 'no_resync_recurse_max' [-Wunused-const-variable]
2024-07-17 14:31:48 +02:00
Bastien Montagne
8df93cd751 BKE: id_delete: Do not forbid layer collection resync in non-Main case.
There is no reason to deal with layer collections resync in non-main
case, deletion code should never trigger it anyway.

This will avoid quite a lot of the non-main-thread calls to
`BKE_layer_collection_resync_forbid` (detected and 'fixed' in previous
commit).
2024-07-17 12:57:47 +02:00
Bastien Montagne
9b8001f370 BKE Layers: make 'no_resync' flag re-entrant and thread-safe.
This commit allows re-entrant calls to
`BKE_layer_collection_resync_forbid` and
`BKE_layer_collection_resync_allow`, such that higher-level code can
block layer collections updates while calling lower-level code that does
the same thing.

E.g. `BKE_id_delete` blocks and then re-allows such updates. However,
such code can also be called from other pieces of code that also need
to prevent these updates in their own, broader scope.

In addition, realized that this call had concurrency issues since BKE
code using it is called from non-main thread too (e.g. from depsgraph
evaluation).

So made the counter atomic to ensure all calls to
`BKE_layer_collection_resync_forbid` is matched by a call to
`BKE_layer_collection_resync_allow`. Also added a cap to max amount of
're-entrant' calls (has to be quite high, due to potential concurrent
calls too).

This is required to fix #124777.
2024-07-17 12:57:47 +02:00
Clément Foucault
c72a1d698e EEVEE: Improve Pixel Size Upscaling
This fixes a few issues and clear up some confusion
in the code.

Note that this changes the behavior of render region;
they now reduce the internal render size. This is
matching the new design documentation.

- Data passes have correct accumulation.
- Adhere to naming conventions for extents, film and render pixels.
- Jitter over final pixels first before doing random sampling
  in order to speed up convergence.
- Ensure enough sample to cover at least all the film pixels once.
- Always include the four neighbor pixels in case one is nearer.
- Fix projection matrix computation to align overscan pixels.

Pull Request: https://projects.blender.org/blender/blender/pulls/124735
2024-07-16 16:59:00 +02:00
Sybren A. Stüvel
cf2dcc792c Anim: change DNA name channelbags_array to singular channelbag_array
All the arrays in the new Action DNA are named singularly (`layer_array`,
`fcurve_array` etc). `channelbags_array` was the only plural one. For
consistency, this is now also singular.

Note that this is a backward-incompatible change, and will effectively
erase all animation from layered Actions. No effort is taken to handle this
rename as the feature is still in its experimental phase.

Action and slot assignments are not affected by this change.

Apart from the lack of backward compatibility, no functional changes are
expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/124768
2024-07-16 13:24:23 +02:00
Julian Eisel
21aeb9e454 Fix: Duplicating brush asset wouldn't display it as active
Was using the old, not the modified name of the brush to build the brush
asset reference, that is used to identify the active brush asset.

The new brush was actually activated, but some of the UI like the asset
shelf would display it as such.
2024-07-16 11:57:26 +02:00
YimingWu
5a60e3f439 Fix #124297: GPv3: Build modifier natural drawing speed fix
The fix contains two parts:

1. Grease Pencil v3 now stores stroke `init_time` as a float attribute,
   it's not enough precisiton for unix timestamp. Now the time value is
   truncated to allow better precision. It's still stored in seconds.
2. The previous logic for calculating stroke gap time of the build
   modifier isn't correct, it used to only count two starting times as
   gap time. Now it's fixed with correct delta time.

Pull Request: https://projects.blender.org/blender/blender/pulls/124350
2024-07-16 10:26:31 +02:00