Commit Graph

145210 Commits

Author SHA1 Message Date
Habib Gahbiche
9dff507ca9 Fix #132893: Node Groups are broken
Caused by c8dbde8779.
The root cause is probably implicit cast from `VecBase<T>` to `T *`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132918
2025-01-10 20:25:33 +01:00
Julian Eisel
4b2a4341a7 Fix #130611: Grease Pencil: Airbrush affects material of other brushes
Don't change the object's active material when adding a material slot. This
active material will be used by brushes with no pinned material, while the
added slot is meant for the pinned material.

The if-statement in `BKE_grease_pencil_object_material_ensure_from_brush()`
would change the active unpinned material, even though it was only meant to
handle the pinned material. This was not a new issue, it was just unlikely to
run into it.

Before brush assets were introduced this if-statement would not be
executed when activating any of the default brushes. Afterwards it would
be, because the material was newly linked (because the brush asset was
linked) and so there was no material slot created for it yet.

Pull Request: https://projects.blender.org/blender/blender/pulls/132865
2025-01-10 18:09:30 +01:00
Sergey Sharybin
179c305a40 Cleanup: Type in the comment 2025-01-10 17:54:06 +01:00
Jeroen Bakker
6bcf34668a Fix #131474: Overlay: Image background
Overlay engine rendered the editor background incorrectly when no image
is present. It used to render an alpha checker background indicating
that an image was present. The cause for this was that the in front
depth texture was attached, but isn't used at all.

The second change is that the image prepass should only be drawn when
there is an image present in the image editor other wise external the
prepass would alter the depth texture indicating that there is an image
present.

Pull Request: https://projects.blender.org/blender/blender/pulls/132847
2025-01-10 16:25:21 +01:00
Nathan Vegdahl
4fd011675b Cleanup: improve documentation of Action C++ APIs
A pass at cleaning up / improving the code documentation for the layered action
C++ classes.

There is still more work to do here, but this should be good for an initial
first pass. I've focused on clarifying the behavior of and updating stale docs
of the methods in the action-related C++ classes.

Pull Request: https://projects.blender.org/blender/blender/pulls/131318
2025-01-10 15:13:38 +01:00
Pratik Borhade
eb57878bec Grease Pencil: Support Boolean property in modifier panel header
A separate function is declared/defined `uiLayoutPanelPropWithBoolHeader`,
it will add a boolean property to the panel.header.
Clear decorate and separator flag, otherwise they will offset the panel
header horizontally and also adds animate decorator on the right side.

Resolves #131623.

Pull Request: https://projects.blender.org/blender/blender/pulls/132726
2025-01-10 14:51:19 +01:00
Pratik Borhade
06a2617107 Fix #100786: Collection hide viewport in properties tab
Similar to other visibility properties, include "hide_viewport" in
collection properties tab. One issue is that, when collection is
disabled, automatically parent collection is selected or tab is gone
when parent collection does not exist. The check was added in
0a903e7ab1, it doesn't seem very useful so
removed that.

Pull Request: https://projects.blender.org/blender/blender/pulls/132107
2025-01-10 14:49:43 +01:00
Lukas Tönne
b9ec08b551 Fix #132861: Proportional edit broken due to uninitialized transform data
The `td->center` value is used to compute proportional editing distances,
but initialization order was broken in 9d86fada which sets every center
to zero.

Pull Request: https://projects.blender.org/blender/blender/pulls/132913
2025-01-10 14:41:25 +01:00
YimingWu
6a9b3183db Fix #131992: Grease Pencil: "Scale Stroke Thickness" behaviour fix
Previously there are two problems with grease pencil transformation:

1. Transform in Grease Pencil Opacity mode would change stroke thickness
    if "Scale Stroke Thickness" is enabled.
2. "Scale Stroke Thickness" is ineffective when scaling strokes in edit
    mode while in GPv2 implementation it will scale stroke thickness in
    sync with overall dimensions.

This patch fixes those problems by:

1. Altering the logic of determining which attribute to feed into the
    TransData.
2. Swapping the arguments for fall off interpolation (Previously was
    inverted, causing the factor to always be zero hence appeared to be
    ineffective).

Pull Request: https://projects.blender.org/blender/blender/pulls/132274
2025-01-10 14:02:16 +01:00
Aras Pranckevicius
64f1f29a50 Audio: add AAC and Opus to Render Audio operator
There's a "Render -> Render Audio" operator that pretty much calls into Audaspace functionality directly. This PR adds two new options in there, that boThere's a "Render -> Render Audio" operator that pretty much calls
into Audaspace functionality directly. This PR adds two new options in
there, that both feel like an oversight:

- There's an option for AAC container, when someone wants to render
  into .aac file. Previously you could render AAC audio, but only in
  MKV (Matroska) container. This is a user request #131980.
- When using MKV (Matroska) or Ogg container, it did not list Opus as
  an audio codec that can be used. This felt like an oversight; both
  the rest of Blender and Audaspace can handle that, jus the option
  was not spelled out in the RNA enums.

Pull Request: https://projects.blender.org/blender/blender/pulls/132877th feel like an oversight:

- There's an option for AAC container, when someone wants to render into `.aac` file. Previously you _could_ render AAC audio, but only in MKV (Matroska) container. This is a user request #131980.
- When using MKV (Matroska) or Ogg container, it did not list Opus as an audio codec that can be used. This felt like an oversight; both the rest of Blender and Audaspace can handle that, jus the option was not spelled out in the RNA enums. Note however that without fix in #132872 the Matroska container continues to be useless in that it produces wrong result.

Upstream Audaspace PR for the 2nd point: https://github.com/neXyon/audaspace/pull/47 (was just merged!)

Pull Request: https://projects.blender.org/blender/blender/pulls/132877
2025-01-10 12:26:24 +01:00
Aras Pranckevicius
6a865a2265 Fix #132214: wrong Render Audio result when using Matroska container format
Matroska container really really wants to internally keep on using
milliseconds as a time base. Even if at initialization time both the
m_stream and m_codecCtx are set to use {1, sample_rate} timebase,
later during the avformat_write_header call the audio stream gets set
to {1, 1000}.

Doing av_packet_rescale_ts for each packet after receiving it but
before writing it seems to do all the correct work. This is what is
being done inside Blender movie_write_audio.cc, and in official ffmpeg
mux.c example.

Pull Request: https://projects.blender.org/blender/blender/pulls/132872
2025-01-10 12:25:01 +01:00
Omar Emara
6a1ac88b8e Fix: Crash when versioning node groups contain Glare
When running versioning for the Glare node, the code assumes the ID
given by the iterator belongs to the scene containing the node tree. But
this might not be the case, as the Glare node might be inside a node
group, in that case, the ID will be the node tree itself.

To fix this, recursively go over the node trees starting from the scene,
passing the scene down all the way. And for node groups not used by any
scene, assume the first scene, since this is better than not doing
versioning.

Pull Request: https://projects.blender.org/blender/blender/pulls/132869
2025-01-10 12:20:43 +01:00
Aras Pranckevicius
f355683e4b Fix #132216: no video (audio only) animation render produces broken file
Looks like this regressed in c1f5d8d023 (blender 3.1), basically
since then if there was no video, then no audio was ever written
either.

From what I can tell, the original change tried to fix the problem
that "file size autosplit" logic was after video, but before audio
data writing. So it moved audio writing to be before the split (good),
but also (not sure whether by accident) moved audio writing to
only happen if video is written.

Pull Request: https://projects.blender.org/blender/blender/pulls/132874
2025-01-10 12:20:32 +01:00
Lukas Tönne
d27e0fcbaf Fix #130855: RegionView3D matrices need to be reset before transforming points
- In "Surface" mode the depth buffer needs to be cached after constructing the base DrawingPlacement, otherwise there is no depth data for projection and the origin is used as a fallback.
- The DrawingPlacement relies on the RegionView3D matrices to project from the rendered image back into 3D space. Because the boundary projection is called while the rv3d matrices are still set up for the image render it will look up the wrong pixels from the depth buffer. The solution is to make sure the viewport reset happens before projecting the boundary, i.e. by making sure the reset function is called before `process_image`.
- The aspect ratio needs to be taken into account for the boundary-to-strokes transform, otherwise the placement is wrong depending on how much the region aspect deviates from square.

The code for computing the zoom factor and offset has also been cleaned up and documented somewhat better, and now uses the `Bounds<float2>` struct instead of old `rctf`.

Pull Request: https://projects.blender.org/blender/blender/pulls/131321
2025-01-10 12:17:38 +01:00
Aras Pranckevicius
1b322de0aa Fix #124588: Do not select strip handles when clicking inside time ruler
Inside sequencer_main_cursor, the logic for showing a custom cursor
was already ignoring the time scrub ruler area, and not showing
the strip edge resizing cursors. However confusingly enough, actually
clicking there was still going into the
ED_sequencer_pick_strip_and_handle which found a strip edge and
returned it. Modify ED_sequencer_pick_strip_and_handle to return empty
selection when mouse is inside the time scrub ruler.

Pull Request: https://projects.blender.org/blender/blender/pulls/132891
2025-01-10 11:57:31 +01:00
Habib Gahbiche
9b484b5251 UI: Add hint for snapping inversion in status bar
Followup to https://projects.blender.org/blender/blender/pulls/130379

Status bar now shows correctly that pressing `ctrl` while snapping will invert snapping.

Pull Request: https://projects.blender.org/blender/blender/pulls/131009
2025-01-10 10:12:27 +01:00
Lukas Tönne
fadde9da75 Fix: Regression of Grease Pencil arguments when caching depth buffer
Depth buffer caching was broken in 62897317bd. The `use_basic` parameter was removed but `use_gpencil`
should remain unmodified. This caused overlays to be included in the depth buffer for Grease Pencil.

Pull Request: https://projects.blender.org/blender/blender/pulls/132871
2025-01-10 10:11:26 +01:00
Lukas Tönne
9348d5ec05 Fix #132418: Joining Grease Pencil object creates invalid duplicate of nested layers
The `copy_layer_group_content` function was using the `LayerGroup::nodes()` API
for iterating over layers and inserting unique copies into the target geometry.
This function lists __all__ the layers inside a group, not just direct children.
A layer inside a group will be copied twice or more this way, once for the root
layer and for any of its parent groups. Looping only over directly child layers
and groups is the correct thing to do here.

Pull Request: https://projects.blender.org/blender/blender/pulls/132868
2025-01-10 08:56:07 +01:00
Pratik Borhade
905d6c435a Fix #132807: Grease Pencil: Joining strokes removes selection
Ensure selection attribute for last stroke after join operation.

Pull Request: https://projects.blender.org/blender/blender/pulls/132840
2025-01-10 08:05:45 +01:00
Jesse Yurkovich
75f3fab268 USD: Add test for the export_texture_mode option
Add tests covering the PRESERVE and KEEP export_texture_mode options.

Pull Request: https://projects.blender.org/blender/blender/pulls/132885
2025-01-10 06:34:27 +01:00
Campbell Barton
372ecb847f Fix #108658: Geometry with non-finite coordinates crashes bevel 2025-01-10 16:30:52 +11:00
Hans Goudey
c8dbde8779 Cleanup: Remove unused includes in space node folder
Pull Request: https://projects.blender.org/blender/blender/pulls/132882
2025-01-10 03:09:00 +01:00
Alaska
9f6d605743 Tests: Add render tests for a few missing simple shader tests
There are a few simple shader nodes that were missing test files.
This commit adds tests for those nodes:
- Camera data
- Fresnel
- Layer weight
- Hue/Saturation/Value
- Invert
- Normal
- Wavelength

Ref: blender/blender-test-data!39
2025-01-10 02:44:13 +01:00
Harley Acheson
fe071cd076 Fix #124814: Correctly Collapse Long Non-Categorized Lists
Multi-column lists are supposed to collapse to single-column when they
are estimated to be wider than the available window width. However,
current code has two errors. First the calculation of the maximum
number of possible rows is based on entire screen height when the most
available is a bit less than half. This too-large value was used in
the calculation of widths, yet the maximum rows is actually clamped
to about 24 for uncategorized lists. Whenever the former is greater
than the latter this could cause collapsing to not occur. This issue is
only really noticeable for lists in Nodes as these can be shown much
smaller than regular size.  This PR fixes the max-row calculation and
uses this correctly when breaking lists without categories.

Pull Request: https://projects.blender.org/blender/blender/pulls/132881
2025-01-10 00:56:33 +01:00
Harley Acheson
e5e45dc140 Fix #132122: Default Value for Camera FOV Angle
In a Camera's properties you can "Reset to Default" on "Focal Length"
because "lens" is a direct member of Camera and it has "50.0f" as its
default value in DNA_camera_defaults.h. However change the "Len Unit"
to "Field of View" and what you are changing is "angle". This is not
a member of Camera but is a calculated value based on sensor size. So
"reset to default" makes this "0", which is invalid and otherwise not
possible to enter.  This PR uses RNA_def_property_float_default to set
a default value of 0.6911504f radians which is the 39.6° FOV for the
default 50mm lens.

Pull Request: https://projects.blender.org/blender/blender/pulls/132364
2025-01-09 21:52:10 +01:00
Pratik Borhade
60ac0421b3 Fix #132830: Regression: Cursor restores the update in GN input
For node region, `event_cursor` is true, it sends update to the cursor
every draw call, this restores the cursor `WM_CURSOR_X_MOVE`.
Issue is originally caused by e6d941cdf4 and it introduced couple other
issues. So best fix would be to revert the commit. And to fix #129178,
restore modal cursor after drawing context menu, i.e. execution of
`ui_popup_context_menu_for_button`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132848
2025-01-09 21:21:30 +01:00
Xavier Hallade
ce463bd6b1 Cycles: oneAPI: optimize device<->host copies
There is a large overhead when doing copies between a device and non-USM host memory.
Using the prepare/release API avoids it, as presented in the optimization guide:
https://www.intel.com/content/www/us/en/docs/oneapi/optimization-guide-gpu/2025-0/optimizing-data-transfers.html

This currently translates to a 4-5% overall rendering speedups on my Arc B580 in most scenes.

Pull Request: https://projects.blender.org/blender/blender/pulls/132859
2025-01-09 21:00:12 +01:00
Hans Goudey
954d708d99 Cleanup: Formatting 2025-01-09 14:29:47 -05:00
Hans Goudey
f2c9fccee0 Cleanup: Move legacy node integer types defines to separate header
Moving these defines to a separate header makes their "legacy" status
more obvious. This commit just adds the include wherever necessary.

Followup to 971c96a92c.

Pull Request: https://projects.blender.org/blender/blender/pulls/132875
2025-01-09 20:03:08 +01:00
Sean Kim
e2d6517109 Sculpt: Allow running performance test in 4.3 releases
Unfortunately, the tests as they are right now will likely not work with
4.2 and previous versions, as the brush asset changes will need to be
accounted for.

Pull Request: https://projects.blender.org/blender/blender/pulls/132827
2025-01-09 19:27:20 +01:00
Hans Goudey
7c775c6f57 Cleanup: Move some node editors functions to C++ namespace
Pull Request: https://projects.blender.org/blender/blender/pulls/132873
2025-01-09 19:19:06 +01:00
Hans Goudey
b44a86e281 Cleanup: A few clang tidy fixes in node_draw.cc
- Remove unused headers
- Use const arguments
- Add default case
- Remove unnecessary casts
2025-01-09 19:19:05 +01:00
Miguel Pozo
f005f4d562 FIx #132007: Overlay-Next: Center view to mouse sculpt flicker
Skip passes that draw to render_fb directly if is_depth_only_drawing.
2025-01-09 18:21:37 +01:00
Jacques Lucke
6ddebc0888 Fix #132831: memory leak when deleting simulation zone
The leak happened because the bake data of the removed zone was only partially freed.

Pull Request: https://projects.blender.org/blender/blender/pulls/132867
2025-01-09 18:19:53 +01:00
Falk David
6f46d5e439 Cleanup: Various C++ cleanups to BKE_material.hh
Pull Request: https://projects.blender.org/blender/blender/pulls/132870
2025-01-09 18:11:48 +01:00
Falk David
d413b0064f Cleanup: Move BKE_material.h to C++
The `BKE_material.h` is only renamed to `.hh` to preserve
the history of the file. Changes to the file are done in
the following commit.
2025-01-09 18:11:46 +01:00
Hans Goudey
b05ef8f739 Nodes: Avoid string copy drawing reroute nodes, use StringRef
Also return early to avoid adding an empty label button.
2025-01-09 12:07:53 -05:00
Hans Goudey
0816234d65 Refactor: Make BMesh normals draw extraction similar to Mesh
This creates more boilerplate code, but it's easier to extend,
it's follows the same structure as the mesh extraction, and
it's more aligned to planned future performance improvements.

Pull Request: https://projects.blender.org/blender/blender/pulls/132866
2025-01-09 17:45:54 +01:00
Philipp Oeser
50648c72d7 Fix #132784: Affect only Origins no longer displays an axis
Was missed in the move to Overlay Next.
Now bring it back in `class Axes: Overlay`

Thx @pragma37 making me aware chaging draw state (not writing depth)
can be done using a subpass!

Pull Request: https://projects.blender.org/blender/blender/pulls/132794
2025-01-09 17:40:40 +01:00
Jacques Lucke
038159e96b Refactor: Nodes: improve node tree update API
Main goals of this refactor:
* Make it more obvious which update function should be used.
* Make it more obvious which parameters are required by using references instead
  of pointers.
* Support passing in multiple modified trees instead of just a single one.

No functional changes are expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/132862
2025-01-09 17:00:05 +01:00
Jacques Lucke
259c98fa72 Nodes: add utility method to check node type
The `bNode.type_legacy` is still used in many places to check if a node is a
specific type. However, going forward it's better to rely more on the idname
than on this legacy integer type. Some more information is available in #132858.

The added utility method can be used like so:
`node->is_type("GeometryNodeMenuSwitch")`. Previously one would have written
`node->type_legacy == GEO_NODE_MENU_SWITCH`. The `is_type` method internally
checks that the passed in string is a valid node identifier to make it more
likely that we catch typos early.

Pull Request: https://projects.blender.org/blender/blender/pulls/132863
2025-01-09 16:59:47 +01:00
Julian Eisel
04f570a01f Refactor: UI: Move View2D files into directory
As proposed in #98518, this moves all `View2D` files into
a `source/blender/editors/inteface/view2d/` directory. This helps
keeping the `interface/` directory clean. In general I think we should
promote a more modular thinking, where coherent parts of the code form a
module or sub-module. The directory structure and its files can reflect
that nicely.

Pull Request: https://projects.blender.org/blender/blender/pulls/132853
2025-01-09 16:55:54 +01:00
Bastien Montagne
4032b853c3 RNA: Add basic tests for the path_from_id() function.
Simply load factory startup file, and recursively iterate over
all (valid) `POINTER` and `COLLECTION` properties of all IDs.

NOTE: A few cases are currently returning invalid rna paths (at least
from quick look), these are skipped for now.

Pull Request: https://projects.blender.org/blender/blender/pulls/132809
2025-01-09 16:46:37 +01:00
Nathan Vegdahl
2d1d4000c7 Fix: invalid memory access in animrig::versioning unit tests
The issue was that we were passing a pointer-to-a-pointer to
`BLI_addtail()`, which expects a pointer to something castable to a
`Link`. This in turn led to an invalid memory access when trying to
access the fields of the supposed `Link`.

This fixes the issue by passing a pointer to a zero-initialized `Link`
instead.

This also takes the opportunity to more simply zero-initialize the
`bAction` structs used in the tests as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/132860
2025-01-09 15:57:33 +01:00
Sybren A. Stüvel
c104fa95d9 Fix: don't use nullptr for std::optional<StringRefNull>
`StringRefNull` cannot reference a `nullptr` string, and so
`uiDefAutoButR()` should get a `std::nullopt` instead of `nullptr`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132852
2025-01-09 15:37:36 +01:00
Jacques Lucke
971c96a92c Nodes: rename integer type of nodes to type_legacy
The new description for `bNode.type_legacy`:
```
  /**
   * Legacy integer type for nodes. It does not uniquely identify a node type, only the `idname`
   * does that. For example, all custom nodes use #NODE_CUSTOM but do have different idnames.
   * This is mainly kept for compatibility reasons.
   *
   * Currently, this type is also used in many parts of Blender, but that should slowly be phased
   * out by either relying on idnames, accessor methods like `node.is_reroute()`.
   *
   * A main benefit of this integer type over using idnames currently is that integer comparison is
   * much cheaper than string comparison, especially if many idnames have the same prefix (e.g.
   * "GeometryNode"). Eventually, we could introduce cheap-to-compare runtime identifier for node
   * types. That could mean e.g. using `ustring` for idnames (where string comparison is just
   * pointer comparison), or using a run-time generated integer that is automatically assigned when
   * node types are registered.
   */
```

Pull Request: https://projects.blender.org/blender/blender/pulls/132858
2025-01-09 15:28:57 +01:00
Jacques Lucke
2f04f2184c Nodes: remove unused NOD_static_types.h file
In various previous commits all the remaining usages of this file were removed
(b1d7e8fcb1, b1d7e8fcb1, 2afd946ba, b43e2168e3). Now this file is finally
completely unused, which means we can remove it.

The main reason why we don't want this file is that it heavily relied on the
preprocessor and makes it hard to decentralize implementation details of
individual nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/132855
2025-01-09 14:05:48 +01:00
Alaska
2874da3f25 Tests: Add Cycles test for baking from selected object
This scene consists of two spheres (shade flat and shade smooth)
having their normals baked onto a plane using the "Bake from selected"
option.

Ref: blender/blender#132716
Ref: blender/blender-test-data!37
2025-01-09 13:38:51 +01:00
Lukas Tönne
fd83be0fa5 Fix: Grease Pencil: Strokes are locked when material index is out-of-range
When the material index of a stroke is out-of-range of the material slots, the
strokes are never editable. This makes it hard to even re-assign the material or
otherwise remove such strokes. A negative index can happen when curves are added
while a Grease Pencil object has no material slots (see #123887).

Since `material_index` is a generic attribute and should be allowed any value,
strokes with out-of-range indices should be considered editable by default.
This patch slightly changes the `get_editable_material_indices` function for
tools, such that only __valid__ materials with the "Locked" flag set are
considered non-editable.

Pull Request: https://projects.blender.org/blender/blender/pulls/132806
2025-01-09 13:34:31 +01:00
Falk David
b4d5e256cb Fix #132828: Grease Pencil: "Smooth Stroke" smooths end points of ranges
The `smooth_curve_attribute` function smoothes individual
ranges of points that are selected within a stroke.

When smoothing a single range, the `gaussian_blur_1D` function
shouldn't treat this range as cyclic.

Instead, we check if the entire curve is selected and only use
the `cyclic` boolean in this case. For ranges, we always
treat them as non-cyclic.

Pull Request: https://projects.blender.org/blender/blender/pulls/132850
2025-01-09 13:19:37 +01:00