Commit Graph

120055 Commits

Author SHA1 Message Date
Omar Emara
614e5ecf7d Fix #120857: Blender crashes for huge compositor images
Blender crashes when the user scales up an image into huge scales. This
is due to integer overflow when doing memory allocations. So we fix this
by using larger integers when doing math on memory allocations and
indexing.

Note that while this solves the random crashes, users scaling up images
to huge scales will face things like the OOM killer activating or at
best significant slow downs due to swapping.

It is not clear how to handle such cases, but something like a global
maximum size option that is set to 16k by default might be worth adding.

Pull Request: https://projects.blender.org/blender/blender/pulls/120921
2024-04-23 09:44:33 +02:00
Jeroen Bakker
191b4fea5b GPU: Better hash for specialization constants
Due to an error in the hash function the specialization constants hash
wasn't optimal. This PR fixes the hash function implementation by replacing
the addition with an xor.

Pull Request: https://projects.blender.org/blender/blender/pulls/120964
2024-04-23 09:44:08 +02:00
Jeroen Bakker
07dd09aa55 Vulkan: Add reset method to resource access info.
Resource access info contains lists in a future setup the resource access info
will be kept in the VKContext and reused. This requires a reset function to
cleanup the instance for reuse.

Pull Request: https://projects.blender.org/blender/blender/pulls/120962
2024-04-23 08:23:12 +02:00
Campbell Barton
edfba89d1e Fix potential buffer read overflow in the splash screen
Since [0], checking if the user preferences exists used an uninitialized
string in the unlikely situation that the users configuration directory
couldn't be found.

[0]: 0c62906a41
2024-04-23 16:09:46 +10:00
Campbell Barton
ce05eb98c9 Cleanup: use const pointer arguments 2024-04-23 16:09:45 +10:00
Campbell Barton
e082049dff Cleanup: use early return, avoids passing uninitialized argument
An uninitialized `msg` string could be passed into ED_area_status_text
however the argument wasn't used when the area was null.

Even though this isn't a bug it relies on the `area` check in the
implementation to ignore the uninitialized argument.

Simplify logic by returning early when area is null.
2024-04-23 15:44:16 +10:00
Campbell Barton
2a2579e69c Cleanup: use const pointers 2024-04-23 15:41:55 +10:00
John Swenson
cff532e134 VSE: Implement Snapping to Markers
This patch adds the ability to snap strips to markers. Previously, there
only existed options to snap to hold offsets and the current frame.

This snap type works identically to other snapping options by checking
for the relevant bit (here `SEQ_SNAP_TO_MARKERS`) and adding the marker
frame numbers to `snap_data->target_snap_points` within
`seq_snap_target_points_build()`.

To enable `seq_get_snap_target_points_count()` to have access to marker
information, the current Scene object is now passed to the function.

Pull Request: https://projects.blender.org/blender/blender/pulls/120450
2024-04-23 01:54:14 +02:00
Clément Foucault
5644a0c621 Fix: EEVEE-Next: Sphere probe disregard the custom parallax checkbox
Fixes #120782
2024-04-22 23:33:08 +02:00
Clément Foucault
8d740b6ea3 Cleanup: DRW: Remove unused legacy function 2024-04-22 23:23:04 +02:00
Clément Foucault
2babe2d678 Fix: EEVEE-Next: Volume objects gets incorrectly culled
Infinite projection matrices do not work with the
current culling pipeline. Since it is expected to have
relatively few volume objects per scene, disabling the
culling for now as fixing it is more involved.

Also only meshes producing fragments will actually
be computed.

Fixes #115595
2024-04-22 23:23:03 +02:00
Clément Foucault
f86135dc6e Fix: EEVEE-Next: GBUffer: Wrong normal layer load
This was because the normal layer code was assuming no missing
closure inside the GBuffer. Now use bin indexing and
fix `gbuffer_read_bin` and `gbuffer_pack`.

Also add test cases for this.

Fixes #120756

Pull Request: https://projects.blender.org/blender/blender/pulls/120779
2024-04-22 21:36:40 +02:00
Hans Goudey
cb639d5d1d Cleanup: Rename "is_mode_active" to "edit_mode_active"
"is_mode_active" doesn't really make sense because some mode
is always active technically. This always referred to edit mode anyway.
2024-04-22 15:31:55 -04:00
Clément Foucault
d44ee7bf11 EEVEE-Next: Make light clamping consistent
This adds clamping at the light combine stage for both direct
and indirect light.

This allows for clamping direct and indirect light separately.
While direct light clamping might not be very desirable in
EEVEE, it might be wanted to reduce the flickering from distant
shiny bumpy surfaces, or for artistic reason.

This happens after applying the BSDF throughput just like cycles.
This is done in order to minimize the performance impact and
allows to split the clamp for direct light and indirect light.

The indirect light clamp value is still used in the ray-tracing
pipeline to clamp the ray intensity. But this differs from cycles
as we clamp the ray without the BSDF throughput here. Sphere probe
have the same issues. Some more energy loss is expected compared
to the direct light clamp.

Note that we still clamp the indirect light after applying BSDF
in case the BSDF is scaling the energy up above the threshold.

This also corrects the clamping for volume that now clamps after
applying the scattering term.

Also adds clamping to volume indirect lighting.

Since we use light probe volumes for both surface and volume
indirect lighting, we need to clamp them at sampling time.

Pull Request: https://projects.blender.org/blender/blender/pulls/120866
2024-04-22 21:19:00 +02:00
Habib Gahbiche
f1d4859e2a Compositor: implement bicubic spline for CPU compositor
Affected nodes:
- Rotate
- Translate
- Stabilize 2D node

Pull Request: https://projects.blender.org/blender/blender/pulls/120886
2024-04-22 20:58:43 +02:00
Jeroen Bakker
3f6e2ea915 Vulkan: Shader interface access mask
When building the resource access used when adding dispatch/draw commands
to the render graph, the access mask is required. This PR stores the
access mask in the shader interface. When binding the resources referenced
by the state manager, the resource access info struct is populated with
the access flags.

In the near future the resource access info will be passed when adding
a dispatch/draw node to the render graph to generate the links.

Pull Request: https://projects.blender.org/blender/blender/pulls/120908
2024-04-22 20:47:30 +02:00
Jacques Lucke
3bddde1b30 Cleanup: update comment regarding blend expand callback 2024-04-22 20:13:06 +02:00
Iliya Katueshenock
d1f26dad9b Fix #120874: Geometry Nodes: propagate attribute usage through muted node
For example, the `Bake` node generally does not propagate any anonymous
attributes. That's true regardless of whether it is baked or not. However, if it
is muted, the attributes should be propagated.

Pull Request: https://projects.blender.org/blender/blender/pulls/120887
2024-04-22 20:11:21 +02:00
Jesse Yurkovich
32ed9bb107 Collection Export: Enable STL and PLY exporters
Enables the STL and PLY formats for Collection export.

Changes
- Set the export operator on the File handlers
- Plumb through the `collection` property and make use of it while
  building the depsgraph
- Skip drawing the "Selection only" and "Batch" mode options when used
  with collections

Pull Request: https://projects.blender.org/blender/blender/pulls/120944
2024-04-22 20:05:34 +02:00
Harley Acheson
49bd285529 UI: Collapse XYZ Operations in Status Bar
Reduce the number of duplicated modal operator keymap entries by just
showing "XYZ Axis" rather than "X X Axis", "Y Y Azis", etc. This allows
more items to be shown on the status bar. Note this only does so if the
keymap contains all of X, Y, & Z.

Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/120148
2024-04-22 20:03:11 +02:00
Laurynas Duburas
3d9519544d Transform: support properly transforming implicitly shared curves positions
The issue was that the transform code kept non-const pointers into the
position arrays of `CurvesGeometry` for an extended period if time and
changed the positions through those pointers. This is not safe, because
the underlying position array may become shared (e.g. with the
corresponding evaluated object), in which case it's not allowed to change
the position array anymore without making a copy.

Generally, the scope at which some code has multiple access to data
should be as small as possible to avoid this kind of issue.

The solution is to store the positions that are modified by the transform
code in a new array and to copy those back into the `CurvesGeometry`
in one go. This way, the program scope in which the positions may be
modified is more obvious and much smaller.

Pull Request: https://projects.blender.org/blender/blender/pulls/120824
2024-04-22 20:02:52 +02:00
Jacques Lucke
d7d8cefd72 Fix: incorrect safe float4x4 to quaternion conversion
The issue was that when a 4x4 matrix is normalized, it does not
always mean that any inner 3x3 matrix is normalized too.
2024-04-22 19:52:47 +02:00
Iliya Katueshenock
ed9921185a Geometry Nodes: more detailed socket tooltips for multi-input sockets
Tooltip for multi-input socket. This kind of inspection can help to
see what data are passed into a node. Any invalid, muted or dangling
link will not be taken into account. This feature reuse the already
existing tooltip formatting and just add column indentation in multi-line case.

Pull Request: https://projects.blender.org/blender/blender/pulls/104468
2024-04-22 19:48:57 +02:00
Hans Goudey
8c1bd99c28 Fix: Missing active layer assert in mesh tangent calculation
When there is no tangent layer with the active UV name we can't set
anything active. Better to do nothing than assert.
2024-04-22 13:27:47 -04:00
Falk David
cf59d2a385 GPv3: Expose Shader FX in the UI
Enables GPv3 in the UI poll functions for shader FX.
2024-04-22 18:26:00 +02:00
Clément Foucault
5f1faec6ff Fix: EEVEE-Next: Tangent normal map node affected by object scale
Use the same approach as Legacy EEVEE and normalize the
normal before interpolation.
Fix #120455
2024-04-22 16:38:13 +02:00
Sergey Sharybin
048c7da4e9 Fix: Difficult to LMB-click-drag motion tracking tracks
When using RMB selection and RMB-click-drag from a track border it
did not initiate translation of the track.

This i because the selection operator does not return PASSTHROUGH
for such selection. The code which was responsible for this has
been ported from the tools branch to minimize the code difference,
but it is not possible to detect condition under which the new
operator behavior is needed without modifying the keymap.

Simple solution: remove the code which was doing the wrong
assumption in the main branch.

Ref #119773

Pull Request: https://projects.blender.org/blender/blender/pulls/120940
2024-04-22 15:46:18 +02:00
Falk David
563ad616f0 Cleanup: GPv3: Improve readability in AnimDataConvertor
The class `AnimDataConvertor` was implementing `operator bool`
to indicate "if this AnimDataConvertor is valid, i.e. can be used to process animation data from source ID".
The cleanup replaces this with a `is_vaild` function, making the
code easier to read and allowing to jump to the function definition
of `is_valid`.
2024-04-22 15:30:43 +02:00
Clément Foucault
3182ce2393 DRW: Add asserts for nullptr binding
These will crash at submission time anyway and will
be hard to track back to the actual resource causing
the issue. Better fail earlier.
2024-04-22 15:26:48 +02:00
Bastien Montagne
fc08f7491e Fix: GPv3: Conversion of 'thickness adjustment' not clamping radius to 0
Legacy GPv2 code seems to clamp the final computed radius to `0` (at
least in some cases, see e.g. line 3992 in
`gpencil_stroke_perimeter_ex`).

Add a clamping node to the generated geometry node used to mimmic the
legacy thickness adjustment in GPv3 converted data.

NOTE: There are still some artifacts in testfile used to investigate
this issue (`(Anim) 10 Picknick by Susanne Weise.blend`), that looks
like invalid radius handling on some curves ends... Clamping _may_ be
needed in other places maybe?

Pull Request: https://projects.blender.org/blender/blender/pulls/120840
2024-04-22 15:03:06 +02:00
Jeroen Bakker
cfaa91296f Fix #120918: EEVEE-Next world volume on iGPU HD530
When using world shaders with volume, older hardware could create
errors when the world background wasn't behind a surface. The reason
is that the world volume shader had a color attachment attached, but
none were defined by the shader interface. This lead to undefined
behavior.

This PR fixes this by attaching the occupancy frame buffer. This
framebuffer only contains a depth attachment.

Pull Request: https://projects.blender.org/blender/blender/pulls/120927
2024-04-22 14:59:30 +02:00
Sybren A. Stüvel
910360637b Fix #120574: Broken animation when saving file with NLA tweak mode entered
Fix linking & library-overriding with NLA Tweak Mode enabled. This is a
two-pronged approach:

- When linking an animated ID from a library file, and it happens to be
  in NLA Tweak Mode, it is forced out of tweak mode. This ensures that
  the correct Action is loaded, and that all the NLA flags are set
  correctly to display the NLA animation (instead of only the tweaked
  strip).
- For library overrides there is now a post-process step that runs after
  all 'apply' functions have been run. This is necessary to ensure that
  all the flags and pointers that NLA Tweak Mode depends on are actually
  set correctly and consistently.

This also adds one utility function `BKE_nla_debug_print_flags()` that
is by now unused. It was very useful in debugging this, though, and I
think it'll be useful in the future as well.

Design task: #120573

Pull Request: https://projects.blender.org/blender/blender/pulls/120830
2024-04-22 14:56:05 +02:00
Sergey Sharybin
a48f685e2e Fix tracking slide zones are not intuitive under certain UI scale/zoom
This is a regression caused by some previous refactor of the code,
which was preparing it for transition to a tool-based tracking
workflow. Some of the hot zones got tweaked, and a change in the
behavior was done so that when click happens far away from any
slidable marker "widget" all markers gets de-selected (which
matches behavior in 3D viewport).

The pixel tolerance did not apply UI scale factor, and applied
zoom level after squaring (which is wrong calculation of pixel
space in screen space).

Ref #119773

Pull Request: https://projects.blender.org/blender/blender/pulls/119971
2024-04-22 14:44:42 +02:00
Aras Pranckevicius
91f0368fe2 Fix #120871: VSE crashes when sound strip has hold start offset larger than start
Caused by addition of new code in 4e10aa6e71, which was not guarding
against negative frame values. The only other place that called
BKE_sound_set_scene_sound_pitch_constant_range guarded against negative
frames (added in 1fb692e896 + 49a0502f35), but generally it looks like
negative frames are a "no no" in audaspace, so just move the value
sanitization into BKE_sound_set_scene_sound_pitch_constant_range itself.

Pull Request: https://projects.blender.org/blender/blender/pulls/120891
2024-04-22 14:44:05 +02:00
Sietse Brouwer
4fbef3dc6b GPv3: Cutter tool
This PR implements the Cutter Tool for GPv3. The Cutter tool deletes
points in between intersecting strokes. New points are created at the
exact intersection points, so as a result the cutted strokes will fit
perfectly.

For feature parity, the tool follows the GPv2 behavior:

- The cutter tool works on all editable layers.
- Intersections are only detected for curves on the same layer,
so intersection of curves on _seperate_ layers are not handled.

Technical notes
The implementation uses the `compute_topology_change` function
created for the Hard Eraser. So at intersection points, point
attributes will be interpolated.

Pull Request: https://projects.blender.org/blender/blender/pulls/113953
2024-04-22 14:05:22 +02:00
Jacques Lucke
ed111e1907 Fix: assert when opening debug build with OpenGL backend
Can't use `GPU_type_matches` there, because it requires `GPG.init` to be called beforehand.

Pull Request: https://projects.blender.org/blender/blender/pulls/120928
2024-04-22 13:57:18 +02:00
Jacques Lucke
1609541bbf Fix #120875: crash when deleting all group output nodes
This didn't take `geometry_nodes_default_cpp_value` into account properly.
2024-04-22 13:29:51 +02:00
Jeroen Bakker
0c2085a316 GPU: Remove GPU_compute_shader_support
Compute shaders are required since 4.0. There was one occasion where
an older AMD driver failed and support was turned off. This driver
is now marked unsupported.

This PR includes:
- removing the check in viewport compositing
- remove properties from system info
- always construct draw manager.
- remove unused pass logic in draw hair/curves
- add deprecation warning when accessed from python

Pull Request: https://projects.blender.org/blender/blender/pulls/120909
2024-04-22 13:28:10 +02:00
Lukas Stockner
cc541f2c07 UI: Add Wavelength unit for scene-independent nanometer-scale inputs
Currently this is only used for the Wavelength node, but it will also be relevant for the Thin Film Interference support in the Principled BSDF.

Pull Request: https://projects.blender.org/blender/blender/pulls/120900
2024-04-22 13:10:16 +02:00
Pratik Borhade
f4894c098f Fix #120920: Can not edit strokes/points when materials array is empty
Return entire points/curves range if object has no material.

Pull Request: https://projects.blender.org/blender/blender/pulls/120923
2024-04-22 13:04:15 +02:00
Sybren A. Stüvel
43cd394832 Anim: Slider operators, prevent pass-through of Tab key
When a slider operator has only a single 'slider property', disregard
Tab keyboard events.

This fixes an issue where the Tab key would make the slider operator
misbehave in a way that required cancelling the operator and re-starting
it.

Context: Depending on the specific operator, Tab can be used to toggle
between different parameters. The generic handler for modal slider
operators didn't take this into account, though, and passed through the
Tab key to the rest of Blender, when it wasn't handled by the specific
operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/120922
2024-04-22 12:51:16 +02:00
Bartosz Kosiorek
a36d7774cc Physics: Enable liquid mesh generation by default
Previously mesh generation was disabled by default. This meant it was
only visible for wireframe or x-ray in the viewport, and not visible
in renders.

Pull Request: https://projects.blender.org/blender/blender/pulls/120832
2024-04-22 12:26:12 +02:00
Pratik Borhade
b153b25876 GPv3: Delete strokes not working from menu
This fails due to wrong/unnecessary invoke callback. Since this operator
does not have any property, `WM_menu_invoke` fails to call exec()
- - -
Steps to Reproduce:
- Add gpv3 stroke -> switch to edit mode
- Topbar -> Grease Pencil menu -> Delete -> Delete

Pull Request: https://projects.blender.org/blender/blender/pulls/120819
2024-04-22 12:12:34 +02:00
Chao Li
74b9c6a8a0 GPv3: Copy/Paste Keyframes
This commit implements Copy and Past Keyframes for GPv3.
The copy operator copies the selected GPv3 keyframes and the paste
operator paste the keyframes from the clipboard.
See #113110.

Pull Request: https://projects.blender.org/blender/blender/pulls/117388
2024-04-22 12:06:21 +02:00
Sietse Brouwer
f4a1095245 Fix: GPv3: Non-edit mode tools unaware of stroke positions changed by modifiers
All tools in Draw Mode, Sculpt Mode and Weight Paint Mode didn't work
correctly when the position of strokes was changed by modifiers.

In technical terms this was caused by
`get_evaluated_grease_pencil_drawing_deformation()`: when not in Edit
Mode, it effectively always returned the original position of stroke points
instead of the modified ones. In this PR there is a little fix for that.

Pull Request: https://projects.blender.org/blender/blender/pulls/120672
2024-04-22 11:41:31 +02:00
casey bianco-davis
2df13ce4a3 GPv3: Primitive Tools: Line, Polyline, Arc, Curve, Box and Circle Tool
Adds the primitive tools in draw mode to GPv3.

This also adds rotation and scale sub-operators with `r` and `s` keybinds.
Also all control points are editable after extruding.

Pull Request: https://projects.blender.org/blender/blender/pulls/119039
2024-04-22 10:48:03 +02:00
Jacques Lucke
d02bab4c44 Fix #120707: invalid persistent modifier uid when creating liquid 2024-04-22 09:47:00 +02:00
Jacques Lucke
1ad633187e Fix #120805: crash when using multiple curves attributes in shader
Currently, `cache.eval_cache.final.attributes_buf[i] != nullptr` is used as
high level check to see if attributes need to be recomputed. However, this
buffer was not freed when a related buffer was freed that has to be
recomputed.
2024-04-22 09:39:30 +02:00
Sietse Brouwer
7b7e9f224c GPv3: Fix incorrect multi-frame falloff factor due to miscalculation in frame range
The multi frame falloff factor was calculated incorrectly due to a
`min`/`max` typo in the function that established the frame range.

Pull Request: https://projects.blender.org/blender/blender/pulls/120870
2024-04-22 08:38:00 +02:00
Jeroen Bakker
6106bb3d3b GPU: Remove Compute test from test cases
Test cases that uses compute shaders were exited when run on platforms
not supporting compute shaders. Since 4.0 Blender requires a platform
that supports compute shaders.

We should eventually phase out `GPU_compute_shader_support` as it
would always return true. Note that in OpenGL a platform is mentioned
that doesn't support compute shaders, but that is from an old driver
and should be save to remove as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/120907
2024-04-22 06:55:09 +02:00