Commit Graph

26334 Commits

Author SHA1 Message Date
David Murmann
ee51f643b0 Cycles: Ray Portal BSDF
Transport rays that enter to another location in the scene, with
specified ray position and normal. This may be used to render portals
for visual effects, and other production rendering tricks.

This acts much like a Transparent BSDF. Render passes are passed
through, and this is affected by light path max transparent bounces.

Pull Request: https://projects.blender.org/blender/blender/pulls/114386
2024-04-29 12:37:51 +02:00
Alaska
f8c0050a25 Shaders: Add Roughness to Subsurface Scattering Node
Matching the Principled BSDF.

Pull Request: https://projects.blender.org/blender/blender/pulls/114499
2024-04-29 10:54:29 +02:00
Campbell Barton
4ec93f73a5 Cleanup: spelling in comments 2024-04-29 09:09:44 +10:00
Bastien Montagne
f933dae207 BKE_lib_query: Add a partial ID usage iterator system.
The idea is to allow iterating over e.g. all ID usages of a node from a
whole nodetree, using the same generic handling as existing 'whole ID'
`foreach_id` code.

This is necessary in some cases wher a sub-data needs to processed
independently from any 'owner ID', e.g. in some copy/paste handling.

This is a pre-requirement for proper fix of nodes copy/paste (see
e.g. #120103).

Pull Request: https://projects.blender.org/blender/blender/pulls/121018
2024-04-28 17:35:02 +02:00
Hans Goudey
ce224fe401 Node Tools: Add mouse position node, wait for cursor option
Add a "Mouse Position" node that outputs the location of the mouse
cursor in region space and the overall size of the region, both in pixel
units. Both outputs are integers to help reflect their pixel units.
If there the mouse position is ever accessible in sub-pixels, they can
easily be changed to floats.

Also add a "Wait for Cursor" option similar to the one for some built-in
operators that delay's the operator's execution until there is a mouse
click in the viewport. That way the operator can be called from menus
even though it is interactive. This option is placed in the node editor
header. When there are more options, it will be part of an "Options"
popover panel similar to the existing "Modes" and "types" popovers.

Combined with the viewport transform node, and other nodes like Raycast,
these features can allow making tools that create geometry where you
click in the scene.

Pull Request: https://projects.blender.org/blender/blender/pulls/121043
2024-04-26 20:14:25 +02:00
Hans Goudey
83ed92d533 Geometry Nodes: Add Viewport Transform node
Add a node that outputs the transform of the viewport relative to the
self object's transform. This node can be used to build effects like
billboarding or aligning geometry to the current view. In combination
with the mouse position node in the future it will allow tools like
generating geometry at the mouse click position.

There are two output matrices. The first is the projection matrix
that takes positions in camera space and applies the final perspective
projection. The other is the "view" matrix which contains the location
and rotation of the camera. These are separate because though their
combination is useful, it isn't used like a typical rotation/transform matrix.

Pull Request: https://projects.blender.org/blender/blender/pulls/118680
2024-04-26 19:47:19 +02:00
Hans Goudey
e3894f0a07 UV: Remove UV sculpt use of brushes
For the brush assets project (#116337) all editors with brushes are
getting an asset shelf, and the brush tools are combined, with
individual brushes accessed in the shelf. That design seems way
overkill for UV sculpting which is just three very simple tools.

In order to avoid one editor with inconsistent use of brushes, which
would significantly increase the complexity of the system after the
brush assets merge, port the three UV sculpt tools to be regular
modal operators that don't use the brush or paint system at all.

To be clear, this is a compromise that doesn't feel ideal, but no
one could think of a better solution. Theoretically this removes
some flexibility from UV edit "sculpting", in practice it probably
won't be a noticeable change.

Pull Request: https://projects.blender.org/blender/blender/pulls/120797
2024-04-26 17:10:04 +02:00
Falk David
62151ffaeb Fix: GPv3: Thickness modifier conversion of "uniform thickness"
The "uniform thickness" was still in the legacy "pixel" space. The fix
makes sure that value is always converted to the right radius space.
We also convert the potentially animated property for the thickness
and scale the fcurves to be in the right space.

Pull Request: https://projects.blender.org/blender/blender/pulls/121128
2024-04-26 15:16:43 +02:00
Falk David
c0fc1fc938 Cleanup: GPv3: Remove wrap/unwrap macros for lineart 2024-04-26 14:49:54 +02:00
Falk David
c2504eb779 Cleanup: Use legacy radius conversion factor constant
This moves the seemingly arbitrary value of  "1 / 2000"
into a constant variable
(`bke::greasepencil::LEGACY_RADIUS_CONVERSION_FACTOR`)
so that it can be used in all the places where
legacy "thickness" values need to be converted.
This also expands the explanation of the factor a bit, so it's
clearer why it is needed.
2024-04-26 12:48:26 +02:00
Hans Goudey
fc1a4647cf Cleanup: Use C++ types for pose brush segments
Use unique_ptr, Array, float3, and references for stored pose brush segments.
2024-04-25 15:20:25 -04:00
Hans Goudey
5c70a64646 Cleanup: Use C++ matrix type for sculpt pose segment 2024-04-25 15:20:25 -04:00
Jesse Yurkovich
fea1d1d71f Fix: Unintentional move from constant in retrieve_attributes_for_transfer
Moving a constant variable results in a copy occurring instead. This
looks to have been an accidental change as part of ea937b304d.

A few tools will warn about this:
`Warning	C26478	Don't use std::move on constant variables. (es.56)`
`Warning	cpp:S5415	"std::move" should not be called on a const object.`

Pull Request: https://projects.blender.org/blender/blender/pulls/121063
2024-04-25 18:02:50 +02:00
Sietse Brouwer
5220caeabb GPv3: Weight Paint tools (Draw, Blur, Average, Smear, Sample weight)
This PR implements the Weight Paint tools for GPv3.

Tools:
- Draw, for assigning weight to stroke points
- Blur, smooths out weight using adjacent stroke point weights
- Average, smooths weight using the average weight under the brush
- Smear, like finger painting, drags weights in the direction of the brush
- Sample weight, sets the brush weight to the weight under the cursor

The weights are assigned to the active vertex group. When there is no
active vertex group, a group is automatically created.

When the Auto Normalize option is enabled, it is ensured that all
bone-deforming vertex groups add up to the weight of 1.0.
When a vertex group is locked, it's weights will not be altered by
Auto Normalize.

The PR already supports multi frame editing, including the use of a
falloff (defined by a curve).

The implementation is in accordance with the Weight Paint tools in GPv2.

Pull Request: https://projects.blender.org/blender/blender/pulls/118347
2024-04-25 15:21:14 +02:00
Falk David
fe0e2907b3 GPv3: Remove OB_MODE_PAINT_GREASE_PENCIL flag
This reverts part of 36cda3b3116acba3b895daf68689f8af01b62392
and replaces the use of `OB_MODE_PAINT_GREASE_PENCIL`
`OB_MODE_PAINT_GPENCIL_LEGACY` flag instead.
The `OB_MODE_PAINT_GREASE_PENCIL` is removed.

The `GREASE_PENCIL_OT_draw_mode_toggle` operator is removed
and the `GPENCIL_OT_paintmode_toggle`  operator is adapted to
work with GPv3.

Pull Request: https://projects.blender.org/blender/blender/pulls/121027
2024-04-25 14:23:46 +02:00
Bastien Montagne
679a05a02c Core: lib_query: Replace raw function pointer by FunctionRef for callback.
Besides using modern code, this also allows to use 'capturing' lambdas
as callbacks here.
2024-04-25 12:38:23 +02:00
Campbell Barton
bc7e7b80fc Cleanup: use const arguments & remove redundant check 2024-04-25 12:02:15 +10:00
Aras Pranckevicius
31e56797f0 VSE: indicate missing media in timeline/display
Sequencer timeline displays red tint & appropriate icons for strips that are
missing media file (images, movies, audio, or meta strips that contain such).

Sequencer preview and rendering displays missing media strips as magenta,
similar to missing textures elsewhere in Blender. This is on by default,
sequencer view settings have an option to turn it off.

Pull Request: https://projects.blender.org/blender/blender/pulls/116869
2024-04-24 19:54:44 +02:00
Hans Goudey
c60a1006e5 Asset Shelf: Add asset shelf region to image editor
As part of the brush assets project, the image editor needs an asset
shelf to display brush assets for texture paint mode. This commit adds
the unused asset shelf region, similar to the 3D viewport's region that
is currently just used for the pose library. For now, users will just
see an "Asset Shelf" toggle in the view menu.

Pull Request: https://projects.blender.org/blender/blender/pulls/121034
2024-04-24 17:55:37 +02:00
Brecht Van Lommel
1420c7bc60 Fix: Crash when ViewLayer.active_collection is invalid in blend file
Pull Request: https://projects.blender.org/blender/blender/pulls/121035
2024-04-24 17:42:18 +02:00
Brecht Van Lommel
9947111a19 Fix: Crash when curve mapping has zero points 2024-04-24 17:42:16 +02:00
Sergey Sharybin
88dd0be6fa Cleanup: Strict compiler warning about capturing constexpr value
Resolves the following error when compiling with Apple Clang:

```
lambda capture 'thickness_adjustement_factor' is not required to be captured for this use [-Wunused-lambda-capture]
```

Pull Request: https://projects.blender.org/blender/blender/pulls/121012
2024-04-24 17:35:39 +02:00
Hans Goudey
b3ecfcd77d Node Tools: Avoid depsgraph evaluation when possible
Currently for node tools we create and evaluate a temporary depsgraph
with all the selected object data-blocks and all data-blocks referenced
by the node tree.

Needless to say, this can be very slow when those data-blocks contain
arbitrary procedural operations. Re-evaluating all the selected objects
is particularly because it will give a slowdown even in very basic uses
of node tools.

Originally I hoped that geometry nodes could be made to work with
original as well as evaluated data-blocks. But that would require far
too many tricky changes and arguably isn't right design-wise anyway.
Instead of that, this commit makes node tools dependency graph
evaluation more fine-grained in a few ways.

1. Remove the evaluation of selected objects. These are always visible
   in the viewport and part of the active depsgraph anyway. To protect
   against cyclic dependencies, we now compare `orig_id` instead of the
   object pointer itself.
2. Evaluate the node group and its dependencies in a separate depsgraph
   used only when necessary. This allows using the original node tree
   without any copies when it doesn't reference any data-blocks.
3. Evaluate IDs from node group inputs (from the redo panel) in the extra
   depsgraph as well, only when necessary.

Pull Request: https://projects.blender.org/blender/blender/pulls/120723
2024-04-24 17:08:25 +02:00
Brecht Van Lommel
15b9ae5436 Refactor: Use typed functions for blend file data reading
This makes the read and write API functions match more closely, and adds
asserts to check that the data size is as expected.

There are still a few places remaining that use BLO_read_data_address
and similar generic functions, these should eventually be replaced as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/120994
2024-04-24 17:01:22 +02:00
Hans Goudey
3cd1c365c3 Geometry Nodes: Add Project point matrix node
With the matrix socket being introduced into geometry nodes, we
are starting to deal with more complex transforms like perspective
projection. For those matrices projecting a point is not as simple
as just matrix multiplication, there has to be an additional normalization
step after. To solve that in an intuitive way consistent with how it's
typically solved in code, add a new "Project Point" node.

The canonical use case for now is in combination with the mouse
position, viewport transform, and raycast nodes, to find where the
mouse clicked on the edited geometry.

Pull Request: https://projects.blender.org/blender/blender/pulls/120597
2024-04-24 15:56:33 +02:00
Lukas Tönne
3fac9df65f Fix #113925: GPv3: eval_frame needs to be updated for modifier result
Grease pencil runtime data stores the "current" frame in the
`eval_frame` property. This is updated before modifier evaluation, but
also used after modifiers, e.g. by the spreadsheet.

If the GeometrySet that is returned by the nodes modifier is created
during the nodes evaluation (as is the case with the Delete node) then
the resulting geometry set has `eval_frame == 0`. To fix this the
`eval_frame` is now also update _after_ modifier evaluation.

This will only set the correct `eval_frame` for the __top level__
geometry set. Other GeometrySets like instances may not have the correct
frame value. This is a more general problem with the design that is out
of scope here.

Pull Request: https://projects.blender.org/blender/blender/pulls/121022
2024-04-24 15:31:30 +02:00
Sean Kim
fd9de3ff7e Cleanup: Fix function comments in BKE_mesh.hh
This PR fixes the `mesh_select_*_flush` comments.

Pull Request: https://projects.blender.org/blender/blender/pulls/121000
2024-04-24 14:26:47 +02:00
Hans Goudey
9193f4554c Cleanup: Move more PBVH API functions to C++ namespace 2024-04-24 07:54:22 -04:00
Campbell Barton
1865776767 Cleanup: doxygen syntax, use colons after "param" arguments, not "note" 2024-04-24 10:55:44 +10:00
Campbell Barton
019d3ef939 Cleanup: spelling in comments 2024-04-24 10:48:45 +10:00
Brecht Van Lommel
29c3997c28 Fix: Crash reading some particular old blend files 2024-04-23 19:52:20 +02:00
Jacques Lucke
37da07e51a Geometry Nodes: support volume grid sockets in bake node
This adds support for baking volume grids directly without having to
put them into a geometry.

Pull Request: https://projects.blender.org/blender/blender/pulls/120981
2024-04-23 18:56:41 +02:00
Falk David
0a4a6ebadc GPv3: Use GPv2 object mode flag for weight painting
This mostly reverts bd22059752
and makes sure to use `OB_MODE_WEIGHT_GPENCIL_LEGACY` instead
of `OB_MODE_WEIGHT_PAINT`.

Pull Request: https://projects.blender.org/blender/blender/pulls/120983
2024-04-23 15:48:27 +02:00
Hans Goudey
0c3763ddda Geometry Nodes: Add SDF grid boolean nodes
Add a simple node to compute the intersection, difference, or union
between SDF grids. This should be the first new use case for the
new volume grid nodes that wasn't possible before.

For naming and multi-inputs, the node uses the same design as the
mesh boolean node. We considered splitting each operation into a
separate node, but though most users considered these different
"modes" of the same operation.

One thing to keep in mind is that it's important for the grids to
have exactly the same transform. If they have different transforms,
the second grid must be resampled to match the first, because the
OpenVDB CSG tools have that requirement. Resampling is expensive
(for SDF grids it means a grid -> mesh -> grid round trip) and should
be avoided.

Pull Request: https://projects.blender.org/blender/blender/pulls/118879
2024-04-23 14:48:59 +02:00
Brecht Van Lommel
05048f8115 Fix: GPv3: Wrong reading of GP drawing ID reference
Datablock pointers are resolved in lib linking stage, not here.

Pull Request: https://projects.blender.org/blender/blender/pulls/120946
2024-04-23 12:11:22 +02:00
Jacques Lucke
5f3ad33f38 Geometry Nodes: decentralize headers for some nodes
`NOD_zone_socket_items.hh` contained code for different nodes. It's better to
split this into headers per node, because that scales better. Also it helps to
keep the code for each individual node more closely together.

Pull Request: https://projects.blender.org/blender/blender/pulls/120945
2024-04-23 11:13:27 +02: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
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
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
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
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
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
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
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
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
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
Jacques Lucke
d02bab4c44 Fix #120707: invalid persistent modifier uid when creating liquid 2024-04-22 09:47:00 +02:00
Aras Pranckevicius
689fce50bd Fix #120789: Slowness when using image vectorscope opacity slider
Since image vectorscope RGB mode addition (567455124d), changing
the opacity was causing the scope to get recalculated from scratch,
because opacity value was put into vecscope_rgb data directly.

Instead of that, make vecscope_rgb data only contain RGB, and fill in
the GPU vertex buffer alpha values when creating the GPU batch.

Now tweaking the scope opacity slider feels at about the same
performance as in 4.0.

Pull Request: https://projects.blender.org/blender/blender/pulls/120854
2024-04-20 17:08:56 +02:00
Campbell Barton
fd589fdca4 Cleanup: various non functional C++ changes 2024-04-20 13:46:14 +10:00