Commit Graph

101863 Commits

Author SHA1 Message Date
Julian Eisel
e2cd2236ca Refactor: Avoid unsafe cast for Outliner sequence elements
Relying on the `TreeStoreElem.id` void pointer makes assumptions about
what code elsewhere sets to it (it's also misleading since it's actually
not an ID pointer), in this case we can easily avoid that.
2023-08-10 16:51:50 +02:00
Julian Eisel
c0065979a1 Refactor: Remove hack to store sequence type in Outliner tree element
`TreeElement.idcode` would be reused to store the sequence type. This is
risky if the field is assumed to actually contain a valid ID-code,
without further checks.
This was only accessed in one place, which I've refactored to a clean,
type-safe solution now.
2023-08-10 16:51:29 +02:00
Christoph Lendenfeld
b56fc47eed Fix: Wrong property name and description 2023-08-10 16:33:44 +02:00
Christoph Lendenfeld
a0aa5480b1 Animation: Blend Offset Slider
Adds an operator to the Graph Editor that moves the selected
segment up/down so it aligns with the keys before/after the segment.

Co-authored-by: Ares Deveaux <aresdevo@gmail.com>
Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/110544
2023-08-10 16:09:39 +02:00
Falk David
4f66031714 GPv3: Fix TreeNode::parent_group() for root group
For the root group, the parent is `nullptr` so calling `parent_group()`
would fail. This fixes the issue by adding a null check and returning
`nullptr` otherwise.
2023-08-10 16:05:21 +02:00
Julian Eisel
a995e16cd2 Fix incorrect type cast of Outliner view layer element data
The view layer "base" element (the parent that the individual layers are
nested in) does not point to any data in its `directdata`, definitely
not to a view layer. Don't cast it to one, this can cause undefined
behavior when the pointer is not null.
2023-08-10 15:44:12 +02:00
Christoph Lendenfeld
255818a569 Animation: Common curve drawing for FCurves
Before this patch, the drawing code iterated the FCurve to see if there are any
curve interpolation types that can't easily be drawn. (Sinusoidal, Bounce, etc)
If it found one, it would fall back to evaluating the FCurve.

That meant in the worst case scenario it would iterate the whole FCurve
before even starting to draw.

This PR unifies the drawing logic for FCurves no matter their interpolation type.
If it encounters a key type that it can't draw, it falls back to samples, but only
for the current key.

To clarify that it renames `draw_fcurve_curve_bezts` to `draw_fcurve_curve_keys`

Curves with modifiers are still drawn with samples.

## Performance
Test setup: 6000f of dense data on 62 bones.
Only measuring the average draw time **per curve**.
All measurements were done at the same zoom level.

| - | before | after |
| - | - | - |
| only beziers | 28μs | 13μs |
| only elastic | 90μs | 60μs |
| mix (~1/2 of the view with elastic) | 110μs | 24μs |

The performance boost with "only elastic" can be explained by the fact that per key I can skip 1 call to `evaluate_fcurve`.  That is because I always start at an existing keyframe so I can use its position.

Pull Request: https://projects.blender.org/blender/blender/pulls/110764
2023-08-10 15:33:22 +02:00
Iliya Katueshenock
43667b807e Nodes: move more geometry nodes rna code to node files
Continuation of f7c0ef1f73.
Only geometry nodes with inline (in function body) static enum array.

Pull Request: https://projects.blender.org/blender/blender/pulls/111004
2023-08-10 14:57:01 +02:00
Falk David
101abc6f6c Sim Nodes: Don't delete parent bake directory
The `OBJECT_OT_simulation_nodes_cache_delete` operator
would delete the parent bake directory. This could lead to catastrophic
loss of data if the user set their bake directory to a folder that
contains other files or folders.

This commit makes sure that only the "meta" and "bdata" folders get
deleted in the parent directory.

Pull Request: https://projects.blender.org/blender/blender/pulls/110999
2023-08-10 14:29:32 +02:00
Amelie Fondevilla
f1e4cd3f1f Fix: missing include in volume.cc
Pull Request: https://projects.blender.org/blender/blender/pulls/111005
2023-08-10 14:21:22 +02:00
Amelie Fondevilla
7f6196ccae GPv3: Display layer properties in animation channels
This patch adds layer widgets in the grease pencil layer channels of the grease pencil dopesheet.
It adds RNA + getter function for the `use_onion_skinning` at layer level.
It also sets the offset of the channel, and the color of grease pencil data-block channels.

Pull Request: https://projects.blender.org/blender/blender/pulls/110991
2023-08-10 13:55:14 +02:00
Aras Pranckevicius
d973355b3a Cleanup: reduce amount of math-related includes
Using ClangBuildAnalyzer on the whole Blender build, it was pointing
out that BLI_math.h is the heaviest "header hub" (i.e. non tiny file
that is included a lot).

However, there's very little (actually zero) source files in Blender
that need "all the math" (base, colors, vectors, matrices,
quaternions, intersection, interpolation, statistics, solvers and
time). A common use case is source files needing just vectors, or
just vectors & matrices, or just colors etc. Actually, 181 files
were including the whole math thing without needing it at all.

This change removes BLI_math.h completely, and instead in all the
places that need it, includes BLI_math_vector.h or BLI_math_color.h
and so on.

Change from that:
- BLI_math_color.h was included 1399 times -> now 408 (took 114.0sec
  to parse -> now 36.3sec)
- BLI_simd.h 1403 -> 418 (109.7sec -> 34.9sec).

Full rebuild of Blender (Apple M1, Xcode, RelWithDebInfo) is not
affected much (342sec -> 334sec). Most of benefit would be when
someone's changing BLI_simd.h or BLI_math_color.h or similar files,
that now there's 3x fewer files result in a recompile.

Pull Request #110944
2023-08-10 14:51:40 +03:00
Amelie Fondevilla
09d2108bf5 GPv3 : Transform action for grease pencil frames.
Implementation of the transform action for grease pencil frames, which enables translating and scaling grease pencil frames in the dopesheet.

This patch adds the following in the grease pencil API :
 - `move_frames`  to move a set of frames given a map of key transformations (with overwrite), and
 -  the structure `LayerTransformData` that stores in the layer runtime some useful data for the frames transformation.

Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/110743
2023-08-10 12:57:32 +02:00
Bastien Montagne
6a86dd5f34 LibOverride: Add ID pointer to operations over ID pointers.
In RNA collections storing ID references, the name of the collection
item may not always be unique, when several IDs from different libraries
are present.

While rare, this situation can become deadly to liboverride, by causing
random but exponential liboverride hierarchies corruptions.

This has already been alleviated by using preferably both name and index
in items lookup (a05419f18b) and by reducing the risk of name collision
in general between liboverrides and their linked reference (b9becc47de).

This commit goes further, by ensuring that references to items of RNA
collections of IDs stored in liboverride operations become completely
unambiguous. This is achieved by storing an extra pointer to the item's
ID itself, when relevant.

Lookup then requires a complete match `name + ID` to be successful,
which is guaranteed to match at most a single item in the whole RNA
collection (since RNA collection of IDs do not allow duplicates, and
the ID pointer is always unique).

Note that this ID pointer is implemented as an `std::optional` one
(either directly in C++ code, or using an new liboverride operation `flag`
in DNA). This allows to smoothly transition from existing data to the
added ID pointer info (when needed), without needing any dedicated
versioning. This solution also preserves forward compatibility as much
as possible.

It may also provide marginal performances improvements in some cases, as
looking up for ID items in RNA collections will first check for the
ID pointer, which should be faster than a string comparision.

Implements #110421.

Pull Request: https://projects.blender.org/blender/blender/pulls/110773
2023-08-10 12:41:20 +02:00
Christoph Lendenfeld
e119089928 Animation: Right align slider unit text
The text used to be centered around a point left of the slider line
with the assumption that it displays a number from 0-1 and "%"
With the ability to set the unit name,  this assumption is no longer true,
and if setting a long name (like "Frames" in #110540) the text overlaps the slider line

By right aligning the text on the left side of the slider, this overlap cannot happen anymore.

| Before | After |
| - | -  |
| ![image](/attachments/9d245773-3256-4ea7-a0b9-6b635956068d) | ![image](/attachments/2968c364-36ea-4d77-af0a-80499e72c8d8) |
| ![image](/attachments/31f13a7e-08f5-42bf-b687-b6ccc839f39d) | ![image](/attachments/6e9832e8-6644-493f-a791-e1b29718a0e4) |
| ![image](/attachments/7cabc3e2-585b-4725-8bde-f05aabb46e46) | ![image](/attachments/da5a4389-1cb1-422f-98b0-8881d8614356) |

Pull Request: https://projects.blender.org/blender/blender/pulls/110586
2023-08-10 12:27:28 +02:00
Christoph Lendenfeld
598af45459 Fix #110789: Apply NLA mapping when jumping to keys in the Graph Editor
The new keyframe jumping code for the graph editor did not respect the NLA strip offset.
This patch fixes that by applying `ANIM_nla_mapping_apply_fcurve`

Technical side note: `FCurve *` lost its constness due to that

Pull Request: https://projects.blender.org/blender/blender/pulls/110790
2023-08-10 11:03:01 +02:00
Campbell Barton
23cd37de25 Cleanup: redundant checks 2023-08-10 17:11:24 +10:00
Campbell Barton
a087790938 Cleanup: declare ReadEWAData const in struct and callbacks 2023-08-10 16:02:53 +10:00
Campbell Barton
a52c904c7b Fix annotation tool getting "stuck" with IC-Keymap
The annotation tool only exited on LMB or RMB mouse buttons,
now check for all mouse buttons with special behavior with RMB.
2023-08-10 15:46:21 +10:00
Campbell Barton
5763993098 License Headers: use SPDX-FileCopyrightText 2023-08-10 15:16:58 +10:00
Campbell Barton
dfc7edfe72 Build: set the encoding in discover_nodes.py
The encoding is platform dependent, ensure utf-8 is always used.
2023-08-10 13:12:06 +10:00
Campbell Barton
8cea7519ca Cleanup: wrap long lines in CMake 2023-08-10 11:28:25 +10:00
Campbell Barton
49064a96bc Cleanup: quiet warning on MSVC 2023-08-10 09:29:06 +10:00
Campbell Barton
931f69b57b Fix missing include in NOD_rna_define.hh 2023-08-10 09:28:02 +10:00
Jacques Lucke
868ae1092c Cleanup: move some node rna definitions to node files
This is a continuation of f7c0ef1f73.

Pull Request: https://projects.blender.org/blender/blender/pulls/110987
2023-08-10 00:01:21 +02:00
Jacques Lucke
08a8825827 Cleanup: use actual function type instead of void* in declaration
This updates the signature of `RNA_def_property_update_runtime`
which previously just has a `const void *` input. This made it difficult
to know what function signature is expected and also does not result
in compile errors when a wrong function is provided.

There is one case which required a different signature, so now there
is a separat function for that case.
2023-08-09 22:40:39 +02:00
Jacques Lucke
19912457c6 Nodes: use auto registration for nodes
The goal here is to reduce the number of files that need to be edited when
adding a new node. To register a node, one currently has to add a line to
`node_geometry_register.cc` and `node_geometry_register.hh` (for geometry
nodes). Those files can be generated automatically.

There is a new `NOD_REGISTER_NODE` macro that nodes can use to register
themselves. The macro is then discovered by `discover_nodes.py` that generates
code that calls all the registration functions. The script also works when the
register functions are in arbitrary namespaces. This allows simplifying the node
code as well.

In the past I tried a few times to get auto-registration working without resorting to
code generation, but that never ended up working. The general idea for that would
be to use non-trivial initialization for static variables. The issue always ends up
being that the linker just discards those variables, because they are unused and it
doesn't care if there are side effects in the initialization.

Related discussion regarding using Python for code generation:
https://devtalk.blender.org/t/code-generation-with-python/30558

Pull Request: https://projects.blender.org/blender/blender/pulls/110686
2023-08-09 22:01:03 +02:00
Germano Cavalcante
262b67d61d Fix Weld modifier generating invalid mesh
Bug identified in #110942.

In cases where the last corners of a polygon are out of context, the
`weld_iter_loop_of_poly_next` iterator skips these corners.

This means that some corners of the resulting mesh do not have the
value set, which can even result in infinite loops.

The solution was not simple. The iterator had to be practically redone
to not use the `loop_end` member (which caused the problem).

Fortunately the code is more simplified with this change.
2023-08-09 15:38:37 -03:00
Bastien Montagne
a37ff68334 Fix (partially) wrong RNA path for 'ViewShading' data.
This commit fixes the RNA path reported from the struct owned by the
Scene.display data. Paths generated for the View3D space remain
completely broken (but whole 'space' paths are broken anyway).
2023-08-09 20:18:25 +02:00
Clément Foucault
15124fe490 GPU: Avoid silent errors during shader compilation
To this end, replace some printf by std::cerr.
2023-08-09 18:15:36 +02:00
Clément Foucault
4d74b91d5c Fix EEVEE-Next: Shadow: Missing shadow on first frame
This was caused by the free unused data pass in the
init phase that would reset the clip data of the first
tilemap.

Uploading and checking for an invalid index fixes the
issue.
2023-08-09 18:15:36 +02:00
Amelie Fondevilla
d5b2960a07 GPv3: Include summary and datablock keyframes in the grease pencil dopesheet
This patch includes keyframes for both the summary channel, and grease pencil data-block channels.
It also includes selection in these channels, in the same modes as the ones implemented for grease pencil keyframes.

Pull Request: https://projects.blender.org/blender/blender/pulls/110962
2023-08-09 17:07:31 +02:00
Falk David
9e172b9e2e Cleanup: GPv3: Use int64_t for indices
Instead of `int` use `int64_t`.
2023-08-09 16:47:25 +02:00
Sergey Sharybin
ba81908a2d Color management: Improve no-op color space detection
Make it so transform between color spaces which is a no-op does not
peroform any calculations.

This was initially found when working on #110941, but the issue can
be replicated easily by renaming "Linear" to "Linear Rec.709" and
adding alias as "Linear".

Doing so would result in a failure of the compositor_matte_test.
The reason for that is due to the image data-block still referring
to the "Linear" color space, the name-based comparison not detecting
that "Linear" and "Linear Rec.709" are the same spaces, and that the
cryptomatte requires bit-perfect floating point values.

Pull Request: https://projects.blender.org/blender/blender/pulls/110959
2023-08-09 16:24:49 +02:00
Falk David
5eef5b0d61 Fix #110447: Curves random selection is reversed
In edit mode, the "Select Random" operator selected the inverse.
For a probability of 1, no elements were selected and vice versa.

This was because the selection actually deselects elements, but used a
mask of elements that was not inverted.

The fix takes the complement of the mask of elements, so the deselection
now does the right thing.

Pull Request: https://projects.blender.org/blender/blender/pulls/110963
2023-08-09 16:14:33 +02:00
Falk David
827a71fe7e GPv3: Refactor: replace remove_frame_at function
Instead of removing frames one by one, the `GreasePencil::remove_frames`
function now expects a span of frame numbers, replacing the
`GreasePencil::remove_frame_at` function.
Now, when drawings need to be deleted, we shrink the array only once.

Pull Request: https://projects.blender.org/blender/blender/pulls/110957
2023-08-09 16:12:45 +02:00
Aras Pranckevicius
3bf2757b47 OBJ: fix import of files with really large polygons (e.g. 7000 vertices in one poly)
Bug report #110948: a file with a polygon so large that a single line
is 140 kilobytes. The previous limit was 64kb, increase the read file
chunk limit to 256kb. Still not fully robust, would need a more
complex fix to support arbitrarily large line length limits.
2023-08-09 17:06:37 +03:00
Lukas Tönne
63115218d8 Nodes: Fixed accidental typo. 2023-08-09 16:04:59 +02:00
Lukas Tönne
063294932a Nodes: fix for silenced variable, used the wrong name. 2023-08-09 16:00:30 +02:00
Lukas Tönne
f1ec9f7190 Silence unused variable warning, from an intermediate PR.
The first part of the node panels PR has an unused API call that will be
reenabled with the next stages (#110885).
2023-08-09 15:58:23 +02:00
Jason Fielder
2367ed2ef2 macOS: Enable support for EDR rendering
Add a High Dynamic Range option in the Color Management > Display panel.
This enables display of extended color ranges above 1.0 for the 3D
viewport, image editor and render previews.

This requires a monitor that can display HDR colors, and a view
transform designed for HDR output. The Standard view transform works,
but Filmic does not as it was designed to bring values into the 0..1
range for SDR displays.

This patch is limited to allowing the display to visualize extended
colors, but does not include future looking work to better integrate HDR
into the full workflow.

It is implemented by rendering to high bit-depth texture formats for
the user interface, and uncapping the color range in color management.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/105662
2023-08-09 14:25:15 +02:00
Colin Marmond
c63bcbf906 Nodes: Hide the node preview button when the overlays are disabled
When the overlays are hidden or the previews overlays are hidden, it is
more consistent to have the preview toggle button hidden than shown.

This patch also removes the preview rendering when the previews are
hidden.

Pull Request: https://projects.blender.org/blender/blender/pulls/110949
2023-08-09 14:04:11 +02:00
Sergey Sharybin
6afbb66a53 Cleanup: Noisy warnings caused by different defines for sse2neon
The issue is visible on Apple Silicon when building Cycles.

Cycles includes sse2neon.h via two code paths: own CPU headers and
Blender's headers. The Blender headers will request higher precision
defines and Cycles does not need it (not for the kernel anyway, as
it has measurable performance penalty).

The solution is to wrap defines in the BLI_simd.h with check, so
that the flags are not re-defined.

The Blender's integration in Cycles does not really care if those
operations are precise or not, as the actual computations are done
elsewhere.

Pull Request: https://projects.blender.org/blender/blender/pulls/110953
2023-08-09 13:12:53 +02:00
Jacques Lucke
f7c0ef1f73 Nodes: define rna of nodes in node file instead of rna_nodetree.cc
The goal is to be able to define a node in as few files as possible. Currently,
RNA definitions for nodes are put in `rna_nodetree.cc`. However, it seems
surprisingly simple to move them from there to the node files. Of course this
means that `makesrna.cc` won't generate these properties and their accessor
functions anymore. Fortunately, C++ lambdas and the preprocessor make it
fairly straight forward to generate those without the `makesrna` preprocessor.
Using the preprocessor here is not great of course, but I'd argue that it feels
less magical than it was before, so it's an improvement.

This patch changes a few files to test the feasibility of this approach. Eventually,
this approach should be used by all nodes. It can't be used for shader nodes for
now, because cycles still relies on the C++ API generated by RNA.

Right now, only properties are defined the node files. The `StructRNA` is still
generated by `makesrna`. It seems feasible to generate it at runtime as well
though with potentially minor RNA API changes. This is related to #75724.

Pull Request: https://projects.blender.org/blender/blender/pulls/110840
2023-08-09 12:47:58 +02:00
Campbell Barton
f940eb7739 Cleanup: quiet compiler warnings, also correct typo & pep8 formatting 2023-08-09 20:24:24 +10:00
Campbell Barton
31cb31d736 PyAPI: add-on name-spacing for extension repositories
Support name-spaced add-ons, exposed via user configurable extension
repositories.

Directories for add-ons can be added at run-time and are name-spaced to
avoid name-collisions with Python modules or add-ons from other
repositories.

This is exposed as an experimental feature "Extension Repositories".

Details:

- A `bUserExtensionRepo` type which represents a repository which is
  listed in the add-ons repository.

- `JunctionModuleHandle` class to manage a package with sub-modules
  which can point to arbitrary locations.

- `bpy.app.handlers._extension_repos_update_{pre/post}` internal
  callbacks run before/after changes to extension repositories,
  callbacks are used to sync the changes to the Python package that
  exposes these to add-ons.

- The size of an add-on name has been increased so a user-defined package
  prefix can be included without enforcing shorter add-on names.

- Functionality relating to package management has been left out of this
  change and will be developed separately.

Further work:

- While a repository can be renamed, enabled add-ons aren't renamed.
  Eventually we might want to support this although we could also
  disallow renaming repositories with add-ons enabled as the name isn't
  all that significant.

- Removing a repository should remove all the add-ons located in this
  repository.

- Sub-module names are currently restricted to `[A-Za-z]+[A-Za-z0-9_]*`
  we might want to relax this to allow unicode characters (we might
  still want to disallow `-` or any characters that would prevent
  attribute access in code).

Ref !110869.

Reviewed By: brecht
2023-08-09 20:24:24 +10:00
Pratik Borhade
ffafc183ba GPv3: Include other channel selection modes
Support extend and extend range channel selection.

Some channeltype don't have active channel and they don't support
`extend range`. This is done in `animchannel_has_active_of_type`.
Add switch case for new GPv3 channels in above `ANIM_is_active_channel`
to detect active channels and support `extend range`

Part of #110056

Pull Request: https://projects.blender.org/blender/blender/pulls/110791
2023-08-09 12:23:58 +02:00
Sergey Sharybin
8141ee90f4 Fix #109201: Consistent mapping boundaries of brush textures
This fix makes it so the circular brush is fitted into the square
texture. This seems to be the most straightforward way to resolve
confusion of the inter-dependencies between different brush and
texture options.

Pull Request: https://projects.blender.org/blender/blender/pulls/110896
2023-08-09 11:39:58 +02:00
Bastien Montagne
23835a393c Remove compatibility code for blendfiles from early 2.80 development era.
Remove the 'SceneCollection' structure definition from DNA, and the
compatibility code converting it to the 'modern' viewlayer system.

'SceneCollection' was part at some point of the new collection system
during 2.80 development, but was never in any published Blender release.
So this code was only ensuring compatibility with a few potential
Blender files saved from in-development builds over four years ago.

Implements #110918.

Pull Request: https://projects.blender.org/blender/blender/pulls/110926
2023-08-09 11:15:27 +02:00
Sergey Sharybin
db4f926c92 Cleanup: LIST_SWAP re-definition warning
Happens on Apple M2 platform. Caused by indirectly included queue.h
via tbb, which has its own LIST_SWAP.

Rename our macro to `LISTBASE_SWAP` to avoid conflicts.

Pull Request: https://projects.blender.org/blender/blender/pulls/110943
2023-08-09 10:23:08 +02:00