Commit Graph

119076 Commits

Author SHA1 Message Date
Clément Foucault
f2cfa822da Fix: DRW: Broken or non-deterministic tests
The test_draw_submit_only was broken because of the
empty pass optimization #135875. Making the passes
non-empty fixes the test.

`eevee_surfel_list` has non-deterministic result. This
should be investigated in the future.
2025-04-16 21:48:47 +02:00
Clément Foucault
0b2a178efc Fix: DRW: Uninitialized mutex in tests
Tests were calling the submission mutex without
init. Adding functions to expose only setting
up the submission mutex instead of the full
DRW context (which is uneeded here).
2025-04-16 21:38:19 +02:00
Clément Foucault
92496bbfaf Fix: DRW: Nullptr dereference in tests
This happens because there is no global context set
when running the draw tests. Removing the global
access fixes the issue.
2025-04-16 21:36:13 +02:00
Clément Foucault
70570e8571 Fix: GPU: Broken compilation on Mac 2025-04-16 21:34:18 +02:00
Clément Foucault
5bd572d4fd Cleanup: Overlay: Remove _next in overlay filename
These are not needed anymore since the legacy codebase
is gone.
2025-04-16 20:51:24 +02:00
Clément Foucault
2cc0dad451 Cleanup: Overlay: Remove overlay_private.hh and share uv line style enum 2025-04-16 20:46:14 +02:00
Clément Foucault
0f71bb6c71 GPU: Rename shader_shared.h files to .hh
This makes more sense now that everything is C++.
2025-04-16 20:26:48 +02:00
Clément Foucault
a6fa1b5969 DRW: Rename common_*_lib.glsl to follow module prefix 2025-04-16 20:19:09 +02:00
Clément Foucault
f2025f28e7 DRW: Move fullscreen vertex shader to gpu common
This makes no sense to have in the draw namespace.

Also take the opportunity for making the coordinates
a float2 and rename them to something more descriptive.
2025-04-16 20:09:28 +02:00
Hans Goudey
07333adc72 Cleanup: Make CustomData function private 2025-04-16 13:56:02 -04:00
Hans Goudey
63957cf541 Cleanup: Move CustomData_blend_write_prepare to proper section 2025-04-16 13:56:02 -04:00
Clément Foucault
6048a7a765 GPU: Preprocessor: Allow function argument to be references
Pull Request: https://projects.blender.org/blender/blender/pulls/137612
2025-04-16 19:42:27 +02:00
Clément Foucault
50dc6c0060 GPU: Preprocessor: Make source type extension convert to enum type
This allow to clearly define what type of preprocessing to
apply to which file type.
2025-04-16 19:41:51 +02:00
Clément Foucault
ac7e361f3d GPU: Expose preprocessor through API
This is needed to preprocess some source inside the
`intern` directory.
2025-04-16 18:50:10 +02:00
Habib Gahbiche
2d2de60655 UI: Compositor: use viewport icon to indicate active viewer
Viewer nodes in compositor now show the eye icon when they are active,
so after https://projects.blender.org/blender/blender/pulls/134949
both geometry nodes viewers and compositor viewers look the same.

The only remaining difference is that in geometry nodes, clicking on
the eye icon deactivates the viewer and the node tree output
is shown instead. This is not possible in the compositor currently,
because at least one viewer must be active in the node tree.

Pull Request: https://projects.blender.org/blender/blender/pulls/134417
2025-04-16 17:56:03 +02:00
Hans Goudey
ce8bfd6f8f Cleanup: Add comment with reasoning for edit mode object update tag 2025-04-16 11:53:02 -04:00
Pratik Borhade
7dea50e30d Fix #137466: Unable to assign shortcuts to 'weight' operators in Weightpaint Mode
Operators like smooth weights, or transfer weights are exposed in
weight mode. Their definition has `OBJECT_OT_*` prefix, this appends
shortcuts key on those operators to "object mode" keymap. Use
`WM_keymap_guess_from_context` instead. This will allow new shortcut
keys to relevant keymap when object operator is exposed in 3d view.

Pull Request: https://projects.blender.org/blender/blender/pulls/137519
2025-04-16 17:50:02 +02:00
Habib Gahbiche
535d9c63e1 UI: Improve default position of shader nodes
After creating a new shading material, the new node tree might become invisible and the user has to scroll down to see the nodes.

The idea of this PR is to create nodes with x-positions centered around zero, such that they are always visible no matter the screen size or workspace setup. Ideally, the nodes' position should depend on the region's zoom and pan. However, the node creation code currently does not depend on `SpaceNode`, so such solution would complicate the code a bit. Also, this heuristic seem to work well enough for most cases.

Note: this only affects newly created materials. The material of the default cube and the default world material still have invisible nodes sometimes. This is because they are saved in the startup file, which will be addressed in a different patch.

Pull Request: https://projects.blender.org/blender/blender/pulls/136926
2025-04-16 16:25:20 +02:00
Habib Gahbiche
e8a66c0108 UI: Geometry Nodes: Use viewport icon for viewer node
For consistency with other parts of Blender, the geometry visibility in the viewport is controlled by the viewport icon. The compositor will still have the eye icon for previews, but viewer nodes will get the viewport icon, also for consistency reasons.

Pull Request: https://projects.blender.org/blender/blender/pulls/134949
2025-04-16 15:59:58 +02:00
Omar Emara
7f02fd3192 Compositor: Turn Pixelate node options into inputs
This patch turns the options of the Pixelate node into inputs.

Reference #137223.

Pull Request: https://projects.blender.org/blender/blender/pulls/137603
2025-04-16 15:34:50 +02:00
Aras Pranckevicius
fd52a005ec Fix compile warning 2025-04-16 15:57:09 +03:00
Omar Emara
55cc96b556 Compositor: Turn Inpaint node options into inputs
This patch turns the options of the Inpaint node into inputs.

The Distance options were renamed to Size for consistency with other
nodes.

Reference #137223.

Pull Request: https://projects.blender.org/blender/blender/pulls/137597
2025-04-16 14:56:00 +02:00
Philipp Oeser
c58d48d25f Assets: tag a brush for unsaved changes when its texture changes
Sort of a followup to d177388979

Resolves the limitation mentioned there "A known limitation with this
will be that changes to dependencies won't be indicated in the brush.
E.g. Changing the texture attached to a brush won't make
the brush be indicated as changed."

Part of #136895

Does not fully fix the report though, seems like deleting/relinking the
brush in `asset_reload` still need to do additional stuff to properly
revert the brush textures.

Pull Request: https://projects.blender.org/blender/blender/pulls/136988
2025-04-16 14:17:06 +02:00
Jacques Lucke
f301dfbb10 Cleanup: Nodes: deduplicate logic to get zone for node
Since nodes are not uniquely assigned to zones (some nodes are in two
zones at the same time), it's better not to expose this detail in multiple
APIs. This avoids having to explain the behavior multiple times.

Now one just has to use `get_zone_by_node/socket` and can then use
a seperate method to get the zone stack for that zone like before.
2025-04-16 14:09:48 +02:00
Endor H
4ee56b9b36 Fix: Crash when dragging assets between nodes area and status bar
The issue was a missing null check in a poll function.

Pull Request: https://projects.blender.org/blender/blender/pulls/137594
2025-04-16 13:39:05 +02:00
Campbell Barton
b37543a3de Fix: linking with only WITH_IO_FBX enabled 2025-04-16 21:22:14 +10:00
Omar Emara
e361054df4 Compositor: Turn Dilate node options into inputs
This patch turns the options of the Dilate node into inputs.

Reference #137223.

Pull Request: https://projects.blender.org/blender/blender/pulls/137593
2025-04-16 12:50:46 +02:00
Omar Emara
e7778593f8 Compositor: Turn Tone Map node options into inputs
This patch turns the options of the Tone Map node into inputs.

In the process, a few changes were made. Input ranges were adjusted to
remove artificial limits. The papers indeed mention those limits, but
they were only mentioned as typical values, not valid ranges.

- The Key option is no longer limited to 1.
- Gamma is no longer limited to a value of 3.
- Intensity is no longer limited to [-8, 8].
- Contrast is no longer limited to [0, 1].

A few renames were done to clarify options and match the reference
papers.

- Offset was renamed to Balance, since it is not really an offset, but
  balances between shadows and highlights. This can be looked up in the
  paper.
- Correction was renamed to Chromatic Adaptation, since it doesn't
  really correct anything.
- Adaptation was renamed to Light Adaptation to distinguish from
  Chromatic Adaptation and now default to global tone mapping, since
  this is more useful by default.

Reference #137223.

Pull Request: https://projects.blender.org/blender/blender/pulls/137589
2025-04-16 11:59:04 +02:00
Aras Pranckevicius
cc741fbf99 IO: New FBX importer (C++, via ufbx)
Adds a C++ based FBX importer, using 3rd party ufbx library (design task:
#131304). The old Python based importer is still there; the new one is marked
as "(experimental)" in the menu item. Drag-and-drop uses the old Python
importer; the new one is only in the menu item.

The new importer is generally 2x-5x faster than the old one, and often uses
less memory too. There's potential to make it several times faster still.

- ASCII FBX files are supported now
- Binary FBX files older than 7.1 (SDK 2012) version are supported now
- Better handling of "geometric transform" (common in 3dsmax), manifesting
  as wrong rotation for some objects when in a hierarchy (e.g. #131172)
- Some FBX files that the old importer was failing to read are supported now
  (e.g. cases 47344, 134983)
- Materials import more shader parameters (IOR, diffuse roughness,
  anisotropy, subsurface, transmission, coat, sheen, thin film) and shader
  models (e.g. OpenPBR or glTF2 materials from 3dsmax imports much better)
- Importer now creates layered/slotted animation actions. Each "take" inside
  FBX file creates one action, and animated object within it gets a slot.
- Materials that use the same texture several times no longer create
  duplicate images; the same image is used
- Material diffuse color animations were imported, but they only animated
  the viewport color. Now they also animate the nodetree base color too.
- "Ignore Leaf Bones" option no longer ignores leaf bones that are actually
  skinned to some parts of the mesh.
- Previous importer was creating orphan invisible Camera data objects for
  some files (mostly from MotionBuilder?), new one properly creates these
  cameras.

Import settings that existed in Python importer, but are NOT DONE in the new
one (mostly because not sure if they are useful, and no one asked for them
from feedback yet):

- Manual Orientation & Forward/Up Axis: not sure if actually useful. FBX
  file itself specifies the axes fairly clearly. USD/glTF/Alembic also do
  not have settings to override them.
- Use Pre/Post Rotation (defaults on): feels like it should just always be
  on. ufbx handles that internally.
- Apply Transform (defaults off, warning icon): not sure if needed at all.
- Decal Offset: Cycles specific. None of other importers have it.
- Automatic Bone Orientation (defaults off): feels like current behavior
  (either on or off) often produces "nonsensical bones" where bone direction
  does not go towards the children with either setting. There are discussions
  within I/O and Animation modules about different ways of bone
  visualizations and/or different bone length axes, that would solve this
  in general.
- Force Connect Children (defaults off): not sure when that would be useful.
  On several animated armatures I tried, it turns armature animation
  into garbage.
- Primary/Secondary Bone Axis: again not sure when would be useful.

Importer UI screenshots, performance benchmark details and TODOs for later
work are in the PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/132406
2025-04-16 09:55:00 +02:00
Jason C. Wenger
7c79c303b8 BMesh: maintain the active face if the active face when joining faces
Whenever faces are merged, resetting the active face is bad.
Do it centrally instead of relying on each caller to fix it.

Ref !137535
2025-04-16 13:34:47 +10:00
Jason C. Wenger
486711d685 BMesh: skip recomputing custom-data when face join uses an existing face
If `f_new` is a double of an existing face and the existing face is
being reused, then the existing face already has custom-data and
multi-res data and etc.

There's also a good case to be made that custom or multireas data on the
existing face might be that way because it was hand-edited by the user,
and therefore it's superior to anything we'd interpolate or copy from
faces being removed.

Change BM_faces_join() to not waste time doing that.

Ref: !137537
2025-04-16 13:18:20 +10:00
Campbell Barton
58d80f281a Fix #137507: collection exporter shows relative paths unsupported
This error is technically correct when the operators path doesn't
support relative paths.

The collection exporter allows relative paths and expands them before
passing the value to the operator.

Resolve by suppressing the warning.

Ref: !137510
2025-04-16 01:16:32 +00:00
Hans Goudey
f445df26f7 Refactor: Mesh: Don't share code between "clear geomtry" and "free"
Clearing a mesh's geometry without freeing the mesh has the requirement
that the mesh remain initialized afterwards. Freeing the mesh doesn't
have that requirement and corresponds to a destructor rather than move
construction with the default value. Avoiding conflating the two
operations simplifies some future feature additions (including #122398).
2025-04-15 18:52:20 -04:00
Hans Goudey
26ed4eec96 Fix #137548: Assert propagating unsupported string attribute type
All users of `retrieve_attributes_for_transfer` don't support string
attributes. This needs a check similar to the other functions in this file.
2025-04-15 18:20:01 -04:00
Clément Foucault
a798c48d0d Fix: EEVEE: Shadow acnee caused by large objects in the scene
This was caused by the shadow map Z range loosing too much
precision on the large object.

This can be replicated by adding a very large object in the scene.
The normaly un-shadowed objects gets shadowed because the
float precision is not enough to represent their depth correctly.

To fix this, we bias the shadow depth by 2 ULP to make sure that
there is no self shadowing.

This bias has already been there, but was somehow removed because
of other fixes that simingly fixed this issue. But they did not.

Pull Request: https://projects.blender.org/blender/blender/pulls/137555
2025-04-16 00:13:48 +02:00
Lukas Stockner
160c5e7b44 Fix: Compositor: Crash in Movie Distortion node with extreme distortions (again)
Second version of 2dff457a7c, now without breaking negative deltas.
Thanks to @OmarEmaraDev for the suggestion.
2025-04-15 23:32:24 +02:00
Sean Kim
900b26181a Sculpt: Extract & refactor Clay Strips brush plane calculation
The Clay Strips brush calculates a brush plane and local matrix to use
for a cube distance test. This test is done based on the sampled plane
center, not the current cursor position.

To make the node mask match this brush area, this commit reworks the
node mask calculation similar to the Plane brush, also calculating the
plane normal and plane center to be used later.

Finally, the relative radius scale of the brush is fixed to be a
constant SQRT(3) to ensure that the cube influence area is fully
circumscribed by the spherical distance query.

Further work here can change the type of BVH distance query done to
reduce the number of nodes processed by the brush.

Resolves #123768

Related to #84169

Pull Request: https://projects.blender.org/blender/blender/pulls/137371
2025-04-15 23:10:18 +02:00
Harley Acheson
dd6b2e648e Fix #116937: Position and Size ICON_TYPE_VECTOR icons by float
We have an icon type called ICON_TYPE_VECTOR that are dynamically drawn
at runtime. These are created in icon_draw_size, which takes float
positions, but their callbacks all use integers instead. Truncating so
early in the process takes away flexibility to draw these at more ideal
sizes or to center them better.  The complaint is a situation where we
mix ICON_TYPE_VECTOR for the colored collections and ICON_TYPE_SVG_MONO
for the white ones. Even though they both ultimately just draw the same
SVG icon the former way truncates position and size so there are times
they won't exactly line up.

Pull Request: https://projects.blender.org/blender/blender/pulls/132338
2025-04-15 23:01:01 +02:00
Sean Kim
f29536931a Fix: object.voxel_remesh operator can crash with 0 for input
Similar to 6c05859b12

Allow a value of 0 to avoid the user input from being clamped to an
arbitrarily small value.

Pull Request: https://projects.blender.org/blender/blender/pulls/137377
2025-04-15 22:31:26 +02:00
Bastien Montagne
699d071414 Fix #137412: Make Local on liboverride can break hierarchy.
Making local an intermediate collection in a liboverride hierarchy e.g.
will likely break the link between the objects in that collection, and
their hierarchy root ID (typically the top overridden collection).

This is fixed by this commit, by:
* Adding a new util, `lib_override_root_is_valid`, that check whether a
  given liboverride ID is still 'connected' to its hierarchy root.
* Using this test in `BKE_lib_override_library_main_hierarchy_root_ensure`
  to strengthen the detection of invalid root hierarchy pointers.
2025-04-15 22:30:07 +02:00
Sean Kim
a49cb2777c Sculpt: Adjust inactive cursor display based on tilt
Part of #82877

This commit applies the same calculation used when tilting the normal to
the inactive cursor display inside sculpt mode, as a way to indicate to
users how the normal is affected by the current tilt settings and pen
orientation.

Pull Request: https://projects.blender.org/blender/blender/pulls/137250
2025-04-15 22:26:40 +02:00
Harley Acheson
e1e250aa84 UI: Consistent Pen Tilt Values
Pen tilt values come into Blender through ghost platforms and device
drivers with inconsistent and ambiguous directions. This PR codifies
that we consider tilt-x positive values to be rightward, negative
values as leftward. Similarly tilt-y positive is away from the user,
negative is toward the user. Comments are updated to make this clear.
This fixes Windows Ink (currently always returning left and away). This
also reverses the Wayland tily-y values to match. We might still have
to consider a user preference to swap directions if we find differences
within a platform.

Pull Request: https://projects.blender.org/blender/blender/pulls/137501
2025-04-15 20:23:32 +02:00
Hans Goudey
937358d58e Point Cloud: Enable object type without experimental option
In the past couple months, the basic operations needed for a new object
type were implemented, as well as basic edit mode tools. With that, the
object type is in a good enough state that it doesn't need to be hidden
behind an experimental option. That also resolves some inconsistency,
because the object type is already created by geometry nodes and used by
importers; it's weird that you can't add it manually as original data.

This also removes the "bounds" drawing flag for the object created from
the add menu. It's unnecessary now and there was even a TODO comment.

Pull Request: https://projects.blender.org/blender/blender/pulls/137546
2025-04-15 20:08:46 +02:00
Pratik Borhade
d330c1ec65 Fix #136998: Cannot assign shortcut to insert single keyframe operator
Shortcut is actually assigned to the operator but inside wrong keymap
("Animation"). When "add shortcut" is invoked for a property within
side panel or properties tab, add the new keyitem to "User Interface"
keymap.

Pull Request: https://projects.blender.org/blender/blender/pulls/137080
2025-04-15 19:42:55 +02:00
Hans Goudey
1332c21581 Point Cloud: Implement proportional editing for transform operator
This is very simple since there is no connectivity between points.
2025-04-15 13:24:32 -04:00
Hans Goudey
7b88604396 Fix: Missing point cloud bounds update when deleting points 2025-04-15 13:24:32 -04:00
John Kiril Swenson
7999f720c1 Fix #137321: Can't select handles on full-length scrollbars
Masks for scrollbars were properly shrunk to match their drawn
representation in #135021, however, click logic was not updated
alongside this change.

For one, `mouse_in_scroller_handle` incorrectly assumed that if the
slider filled up the entire scrollbar extents, we would only be able to
select the bar. This code never ran in practice since `scrollers` were
always smaller than their mask, but now that they're the right size,
it's being run. Fix by removing the case.

It is also guaranteed that the "scroller"/"bubble"/"thumb" is not out of
view of the scrollbar track itself because it is clamped at the end of
`view2d_scrollers_calc` (which always runs before
`mouse_in_scroller_handle`), so this is dead code that can be removed.

Finally, rename `mouse_in_scroller_handle` to `scrollbar_zone_get` to
better represent its function.

Pull Request: https://projects.blender.org/blender/blender/pulls/137437
2025-04-15 19:04:19 +02:00
Jacques Lucke
79d9e60076 Geometry Nodes: initial support for showing logged data in closures
This adds initial support for showing logged data in closures. This is more
tricky than the other zone types, because the zone content is evaluated
elsewhere. The main new thing here is a function that attempts to find where a
given closure is evaluated statically.

Finding this place statically is also important because we generally decide
which compute contexts we want to log before evaluation starts. That's because
we don't want to log everything (which is expensive), but just the places that
the user is currently looking at.

This also changed a bunch of CMakeLists.txt files so that these modules can
include NOD_* stuff, which is generally fine everywhere in editors code.

Pull Request: https://projects.blender.org/blender/blender/pulls/137403
2025-04-15 18:03:25 +02:00
Clément Foucault
846d88ed17 Fix #137475: Overlay: Empty point cloud crash with geometry nodes
This was caused by an emtpy VBO being bound as
a texture. This is undefined behavior on some implementation.
2025-04-15 17:56:00 +02:00
Bastien Montagne
436a7d0333 LibOverride: Ignore loopback relationships in hierarchies handling.
Not sure why it was not done before... But it should be fine to
completely ignore the loopback relationships (mainly liboverride
hierarchy root pointers themselves, and owners of embedded and
shape key IDs) when handling hierarchies.

Quick tests on complex production cases here also showed no obvious
issue (or even change at all) with this tweak, so think it's safe to try
it out in main.
2025-04-15 17:28:14 +02:00