Commit Graph

105139 Commits

Author SHA1 Message Date
Hans Goudey
a86658a58a Fix #115856: Sculpt Face sets drawing sometimes uses wrong default
In some cases the value that defines which ID is displayed as white is
mismatched between the original and evaluated mesh. Use the original
as the source of truth, since that's the mesh that's actively edited.
2023-12-06 23:50:30 -05:00
Hans Goudey
f3dd1a3260 Sculpt: Refactor face sets storage and access
Similar to previous changes for masks and visibility, remove the mutable
pointer to face sets from the sculpt session. With implicit sharing,
this avoids a duplicate copy of face sets on the evaluated object when
face sets aren't edited.

Most retrieval of face sets now goes through the Mesh attribute API
instead of the pointer in sculpt session. This integrates sculpt code
with the rest of Blender, avoiding the need to reinvent things like
basic attribute access.

Similar to previous refactors to mask and visibility operators, refactor
the face set gesture and edit operators to be multithreaded and only
push undo steps and tag updates for actually changed nodes.

There is opportunity for more code deduplication in the future.
For now the aim is to reduce the number of confusing abstraction
levels though.
2023-12-06 23:50:30 -05:00
Hans Goudey
dc234c5d93 Cleanup: Add utility to compare non-indexed and indexed span values
This will be useful for other types in the future (similar abstractions
for editing face sets), and it makes more semantic sense as a templated
utility function.
2023-12-06 23:33:46 -05:00
Hans Goudey
184418b6d0 Fix: Incorrect use of Vector resize in mesh_fair
Wrong since c9b4d75336
2023-12-06 23:33:46 -05:00
Hans Goudey
4e7e539b33 Sculpt: Make hide poly pointer in sculpt session const
This avoids having to make the original data layer mutable when we
aren't going to modify it, meaning the memory can still be shared with
the evaluated mesh-- saving 1 byte per face in some situations. This was
made possible by previous commits that moved to using the Mesh attribute
API instead of the SculptSession pointer to edit this data. Eventually the
`hide_poly` pointer should be completely removed.
2023-12-06 23:33:46 -05:00
Hans Goudey
466dca07d5 Cleanup: Move mesh visibility and selection flushing to C++ namespace
Also rename the functions and move a sculpt function that depended on
the mesh functions to a more proper place. And also use references and
nicer variable names for meshes.
2023-12-06 23:33:46 -05:00
Hans Goudey
9f5878b628 Cleanup: Use enum class for some sculpt enums
Benefits are stronger type safety and prettier code.
2023-12-06 23:33:46 -05:00
Hans Goudey
251069ae5b Sculpt: Reimplement face sets visibility operator
Iterate over faces instead of vertices, and multithread the logic over
all PBVH nodes. The result is about 3 times faster in my tests;
noticeably snappier for large meshes. Add a new sculpt undo type for
face hide storage (as opposed to vertex storage), and use that only
when the data actually changed, which should reduce memory usage too.
Internally some code is shared with the other visibility operators,
since this operation always affects base mesh faces, most isn't.

Similar to 4e66769ec0
2023-12-06 23:33:46 -05:00
Hans Goudey
f6ef00a6f4 Cleanup: Move RNA enum definitions to smaller scope 2023-12-06 23:33:46 -05:00
Hans Goudey
8e03fa34f1 Cleanup: Avoid repeatedly retrieving object in sculpt undo nodes 2023-12-06 23:33:46 -05:00
Hans Goudey
d1d3207e33 Sculpt: Simplify and slightly improve undo update tagging
Mostly make logic more consistent with better variable naming,
early returns, and separated functions. But also avoid adding some
tags if the corresponding data hasn't changed. For example, don't
tag the mesh positions changed if the undo nodes only contained
color or face set information.
2023-12-06 23:33:46 -05:00
Hans Goudey
1e65ede8d9 Cleanup: Use C++ vector to store temporary sculpt undo update tags 2023-12-06 23:33:46 -05:00
Hans Goudey
1863533eb6 Cleanup: Move sculpt_face_set.cc to C++ namespace 2023-12-06 23:33:46 -05:00
Hans Goudey
f61b271458 Cleanup: Remove unused sculpt functions 2023-12-06 23:33:46 -05:00
Hans Goudey
53418fc3a1 Sculpt: Separate invert visibility operator from face sets
Remove "Invert Visible" from the face sets menu, since those concepts
are no longer tied together, except for some convenience features to
toggle visibility of some face sets.

On the code side, the `SCULPT_OT_face_set_invert_visibility` operator
is replaced by `PAINT_OT_visibility_invert`. It inverts vertex visibility
instead of face visibility, which mostly has the same results, except
for multires sculpting where it no longer "downgrades" visibility to
base mesh faces.
2023-12-06 23:33:46 -05:00
Campbell Barton
497600e49e Cleanup: spelling in comments, strings 2023-12-07 12:45:27 +11:00
Campbell Barton
bad4390663 Cleanup: format, function style cast 2023-12-07 11:42:12 +11:00
Campbell Barton
9d9764c1c9 Cleanup: remove redundant define checks
Also reformat checks to quiet warnings so they don't read as empty
define checks.
2023-12-07 10:39:03 +11:00
Campbell Barton
9898602e9d Cleanup: clarify #ifndef checks in trailing #endif comments 2023-12-07 10:38:54 +11:00
Jason Fielder
0113fb5f31 Metal: Remove old small-tiles optimization
Explicit use of small tiles for high BPP
renderpasses was added as an optimization
to resolve long fragment execution tails for EEVEE's
material graph evaluation pass.

EEVEE Next alters performance characteristics with
the split pass for material processing and lighting
evaluation and does not have the same long-running
fragment threads.

Removing to fallack to default tile sizes for better
performance in EEVEE Next.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/115747
2023-12-06 23:17:11 +01:00
Julian Eisel
c080604f63 Cleanup: Avoid unnecessary indentation level in region overlap function
Use `continue` top move pre-conditions for the iteration to the
beginning of the loop, rather than making the entire block conditional.
Reduces cognitive complexity since the pre-conditions are handled
clearly and early.
2023-12-06 21:07:41 +01:00
Julian Eisel
b4d6c231c5 Fix failing assert when hiding header with asset shelf available
Old code to prevent multiple overlapping regions at the same place,
wasn't handling the combination of bit flags and the alignment enum in a
single field correctly. Newly introduced flags for the asset shelf
exposed this.

Was asserting on startup for a Pets production file
(`010_0050.anim.blend`).

Steps to reproduce:
* Replace default cube with armature object
* Enter Pose Mode (makes asset shelf available for pose libraries)
* Hide 3D View header
2023-12-06 20:47:51 +01:00
Aras Pranckevicius
06370b5fd6 VSE: make Wipe effect 6x-20x faster
Wipe effect was completely single threaded. So multi-thread that.
Additionally, simplify math done in Clock wipe code; asin() + hypot()
+ some checks is just atan2() really.

Applying Wipe to 4K UHD sequencer output, on Windows Ryzen 5950X:
- Single/Double: 99.1 -> 9.3 ms (10.6x faster)
- Iris: 153.3 -> 12.3 ms (12.4x faster)
- Clock: 301.4 -> 14.5 ms (20.8x faster)

The same on Mac M1 Max:
- Single: 74.5 -> 13.4 ms (5.6x faster)
- Iris: 84.2 -> 14.3 ms (5.9x faster)
- Clock: 185.3 -> 18.8 ms (9.8x faster)

Pull Request: https://projects.blender.org/blender/blender/pulls/115837
2023-12-06 19:42:59 +01:00
Aras Pranckevicius
fc64f48682 VSE: make Glow effect 6x-10x faster
Glow effect was doing the correct thing algorithmically (separable gaussian
blur), but it was 1) completely single-threaded, and 2) did operations in
several passes over the source images, instead of doing them in one go.

- Adds multi-threading to Glow effect.
- Combines some operations, e.g. instead of IMB_buffer_float_from_byte
  followed by IMB_buffer_float_premultiply, do
  IMB_colormanagement_transform_from_byte_threaded which achieves the same,
  but more efficiently.
- Simplifies the code: removing separate loops around image boundaries is
  both less code and slightly faster; use float4 vector type for more
  compact code; use Array classes instead of manual memory allocation, etc.
- Removes IMB_buffer_float_unpremultiply and IMB_buffer_float_premultiply
  since they are no longer used by anything whatsoever.

Applying Glow to 4K UHD sequencer output, on Windows Ryzen 5950X:
- Blur distance 4: 935ms -> 109ms (8.5x faster)
- Blur distance 20: 3526ms -> 336ms (10.5x faster)

Same on Mac M1 Max:
- Blur distance 4: 732ms -> 126ms (5.8x faster)
- Blur distance 20:  3047ms -> 528ms (5.7x faster)

Pull Request: https://projects.blender.org/blender/blender/pulls/115818
2023-12-06 19:39:42 +01:00
Aras Pranckevicius
9cbc96194e VSE: make Gamma Cross effect 4x faster
Gamma Cross code seems to be coming from year 2005 or earlier, with complex
table based machinery to approximate "raise to power" calculations. Which,
for Gamma Cross, have always been hardcoded to 2.0 "since forever". So
simplify all that, i.e. replace all the table lookup/interpolation things
with just `x*x` and `sqrt(x)`.

Applying Gamma Cross on 4K UHD resolution, Windows Ryzen 5950X machine:
36.2ms -> 8.1ms

Pull Request: https://projects.blender.org/blender/blender/pulls/115801
2023-12-06 19:37:00 +01:00
Bastien Montagne
1e50987d94 LibOverride: Refactor some part of hierarchy handling code.
This commit is a preparation for an actual change in behavior of
automatic liboverride hierarchies creation. Although it may introduce
some minor changes (fixes) in behavior in some corner-cases, it is
not expected to have any noticeable end-user changes.

The main change is some refactor of the `LibOverrideGroupTagData` util
struct, to make it more clear and easy to manage data (IDs) from linked
reference, and data from liboverrides.

In addition, some minor changes in code logic, either optimizations or
hardened checks, e.g. to skip any processing of hierarchies when the
linked reference of its root is missing, or to ensure that libraries are
matching, etc.
2023-12-06 18:32:48 +01:00
Charles Wardlaw
b7fa45b68d Fix: USD import: Improve texture color space choice
Many assets with UsdPreviewSurface materials exist in which the textures
do not have authored color space settings.  Because of this, assets with
normal maps and other non-color data look incorrect on import because
these textures are marked as being sRGB instead of Non-Color.

This patch fixes the color space choices for these textures based on
connections to the PBR shader; if no color space is specified, non-Albedo
maps get an automatic Non-Color assignment.

Co-authored-by: Charles Wardlaw <kattkieru@users.noreply.github.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/113374
2023-12-06 18:17:53 +01:00
Bastien Montagne
d24a49da84 Fix (unreported) missing Viewlayer update in liboverride code.
In post-processing of objects & collections after liboverrides creation,
viewlayer could be accessed while tagged as dirty, since the
object/collection hierarchy may be modified several times during this
process.
2023-12-06 17:11:56 +01:00
Brecht Van Lommel
e06561a27a Build: replace Blender specific DEBUG by standard NDEBUG
NDEBUG is part of the C standard and disables asserts. Only this will
now be used to decide if asserts are enabled.

DEBUG was a Blender specific define, that has now been removed.

_DEBUG is a Visual Studio define for builds in Debug configuration.
Blender defines this for all platforms. This is still used in a few
places in the draw code, and in external libraries Bullet and Mantaflow.

Pull Request: https://projects.blender.org/blender/blender/pulls/115774
2023-12-06 16:05:14 +01:00
Brecht Van Lommel
fc863c63e6 BMesh: don't make threading threshold dependent on debug/release build
While it may be useful to detect threading issues for low poly meshes in debug
builds, it can also cause confusion when one breaks but not the other.

Further, having this logic for just a handlful bmesh functions while everything
else does not makes little sense.
2023-12-06 16:05:12 +01:00
Hans Goudey
2609f16fc8 Cleanup: Resolve inconsistent struct vs. class declaration warning
Also add a missing include in a header
2023-12-06 10:00:25 -05:00
Hans Goudey
79552f87f2 Fix: Protect against access of empty geometry bounds optional 2023-12-06 09:12:09 -05:00
Philipp Oeser
79ed05b29f Fix #115830: Poly Build tool crash with clipping borders
Since 02ee5a7693 we cant call `ED_view3d_win_to_ray_clipped_ex` with
null `r_ray_end`, `ED_view3d_clip_segment` relies on it.

To fix this, just pass a dummy from `ED_view3d_win_to_ray_clipped`.

Pull Request: https://projects.blender.org/blender/blender/pulls/115840
2023-12-06 14:13:07 +01:00
Campbell Barton
6af92e1360 PyAPI: support overriding the "screen" with Context.temp_override()
Previously it was checking the actually active screen - it was leading
to the issue where it's no longer possible to override context.screen
(#108763) which was possible with old context override method.

Now the screen can be overridden, keeping the window & workspace
consistent.

Ref !114269.

Co-authored-by: Andrej730 <azhilenkov@gmail.com>
2023-12-06 20:45:36 +11:00
Campbell Barton
6bb875db93 Cleanup: minor correction to exception message, add doxy section 2023-12-06 20:45:35 +11:00
casey bianco-davis
773d5745e8 Fix: GPv3: Strokes with hidden materials are editable
Makes it so that strokes and fills of hidden materials are not editable.

Note: this does not make strokes of hidden materials invisible.

Pull Request: https://projects.blender.org/blender/blender/pulls/115777
2023-12-06 10:37:49 +01:00
Philipp Oeser
94defad5f1 Fix #115662: Outliner slows down many geometry operations in big scenes
This was reported for UV editing but also e.g. some modeling operations
were affected.

In 295bc1249a, a listener for `NC_GEOM` > `ND_DATA` was added to the
Outliner in order to update when renaming bones (c4622c405e).
Since we are only interested in the naming part (no need to update the
Outliner otherwise), the notifier/listener combo was made more specific
by including the `NA_RENAME` action here.

Since this was a very general thing to listen to, other operations might
have relied on this to properly update, but having checked many things,
I could spot only one case where an Outliner update was missing after
the initial change and that was adding images.
This case was added separately now.

Pull Request: https://projects.blender.org/blender/blender/pulls/115799
2023-12-06 10:22:54 +01:00
Hans Goudey
865b806811 BMesh: Use simpler element copy within the same mesh
After previous commits, there is a new function to copy a BMesh
custom data block that doesn't go through the "find common layers
between two formats" code. This is *much* faster when there is a
large amount of layers with the same type, since that code is
quadratic currently. It may not be noticeable in many simpler
setups though.

Related to #115776
2023-12-05 22:09:37 -05:00
Hans Goudey
fc4d29e08a Cleanup: Simplify common logic for BMesh attribute copy
Overload the attribute copy function for each element type, avoiding
the switch of different abstraction levels. The two extra arguments
besides the meshes and elements were constant, so the resulting
logic can be inlined as well.
2023-12-05 22:09:37 -05:00
Hans Goudey
66da875488 BMesh: Improve performance when copying attributes in same mesh
When the BMesh source and result arguments are the same, restore
performance lost by 9175d9b7c2, which made copying layers
have quadratic time complexity. When we know the custom data format
is the same between the source and result, the copying can be much
simpler, so it's worth specializing this case. There is still more
to be done, because often we only know that the two meshes are the
same at runtime. A followup commit will add that check.

The quadratic runtime means performance is fine for low layer counts,
and terrible with higher layer counts. For example, in my testing with
47 boolean attributes, copying 250k vertices went from 2.3 seconds to
316 ms.

The implementation uses a new CustomData function that copies an entire
BMesh custom data block, called by a function in the BMesh module
overloaded for every BMesh element type. That handles the extra data
like flags, normals, and material indices.

Related to #115776
2023-12-05 22:09:37 -05:00
Hans Goudey
cc7080b8b0 Cleanup: Remove unnecessary size argument to CustomData free function
The size of the data is already known, there's no need to pass it
to the type's callback.
2023-12-05 22:09:37 -05:00
Hans Goudey
353d000f15 Cleanup: Remove unusd custom data function 2023-12-05 22:09:37 -05:00
Hans Goudey
32776880a0 Cleanup: BMesh: Add function for copying within the same BMesh
For now it has the same implementation as the function that allows
passing separate source and destination custom data formats. But
copying to the same format can potentially be much simpler.
2023-12-05 22:09:36 -05:00
Campbell Barton
3eaf2b2e50 Fix #115253: NDOF zoom-speed depends on selected objects
Recent refactor to viewport navigation caused a regression where
"Orbit Around Selected" logic to impacted "Free" NDOF navigation logic.

Resolve by disabling orbit around selection with "Free" navigation.
2023-12-06 13:17:10 +11:00
Campbell Barton
8b26ad0a8a Fix sequencer modifier operators crashing with no active strip set 2023-12-06 13:17:10 +11:00
Harley Acheson
27992034f2 Fix #115815: Include Category name in Enum Row Calculation
Report #115815 shows a time where our calculation of rows and columns
should also include the category name lines. The code was calculating
where to break not including these and is too short if it has a
category.

Pull Request: https://projects.blender.org/blender/blender/pulls/115822
2023-12-06 01:37:04 +01:00
Hans Goudey
7a96c4672c Cleanup: Move BMesh headers to C++
Pull Request: https://projects.blender.org/blender/blender/pulls/115817
2023-12-05 23:01:12 +01:00
Germano Cavalcante
383db31556 Fix asserts is last commit
These asserts need to be placed before incrementing the parameters.
2023-12-05 18:42:19 -03:00
Germano Cavalcante
7f626e08e1 Fix #115813: Handles get broken when scaling annotation keyframes in Dope Sheet
Apparently this problem has existed at least since b6b61681ef.

When converting pointers to generic structs in
`transform_convert_action.cc`, elements of type `TransData` and
`TransData2D` must align by maintaining synchronized indices within
their respective arrays.

Despite both arrays having equivalent lengths, some `TransData2D`
instances were omitted when they come from types `ANIMTYPE_GPLAYER` or
`ANIMTYPE_MASKLAYER`.

This misalignment resulted in `TransData` elements not properly
corresponding with their `TransData2D` counterparts.

A potential fix could be incrementing `td2d++` for each
`ANIMTYPE_GPLAYER` or `ANIMTYPE_MASKLAYER` occurrence. This approach,
while introducing blank `TransData2D` entries, would preserve index
alignment with `TransData`.

However, I opted for a less workaround-centric approach by converting
`tGPFtransdata` elements into `TransData2D`.This solution, albeit
slightly fragile due to the lack of a dedicated member in `TransData2D`
for integer value flushing, appears better than allowing blank
`TransData2D` fields.
2023-12-05 18:37:23 -03:00
Miguel Pozo
7ec59b05ff Fix #115786: EEVEE-Next: Texture paint delayed redraw 2023-12-05 17:06:35 +01:00