Commit Graph

4927 Commits

Author SHA1 Message Date
Hans Goudey
c01d4a4ee6 Refactor: Deduplicate position transform utilities
The pattern of transforming many position vectors at once is quite
common, both with separate source and result arrays, and when modifying
an array in place. In some cases at least we used a separate function
with a consistent name across files, but there were also many duplicate
parallel transform implementations.

This commit adds these utilities to the BLI_math_matrix.hh API and uses
them where many positions from contiguous arrays are transformed at
once. While there might be a more ideal location for these utilities,
it's consistent with 3936d7a93e, and certainly better
than duplicating them.

This also reduces binary size of my build by 15 KB.

Pull Request: https://projects.blender.org/blender/blender/pulls/145352
2025-08-28 19:27:17 +02:00
Hans Goudey
fbaf6d42f0 Grease Pencil: Avoid repeated attribute lookup in origin set operator
Don't look up the position attribute for every single point.
2025-08-28 19:27:16 +02:00
Julian Eisel
450f428434 Fix #143699: Pose library asset shelf does not apply poses
This was quite involved to get to work. Basic idea is to make
`bl_activate_operator` work for the pose library asset shelf, and
introducing a `bl_drag_operator` for blending poses.

- Make pose asset operators take an asset reference, which is how
  `bl_activate_operator` usually gets the asset to operate on. This way
  poses references can be assigned to a shortcut, identified by asset
  library and relative asset path within the library. Falls back to
  getting the asset from context.
- Trigger `bl_activate_operator` on every click, instead of only when
  an un-active item becomes active. Needed so poses can be re-applied
  as before.
- Fix button context not passed to the `bl_activate_operator` when
  force-activating, e.g. on right-click events.
- Allow registering a `bl_drag_operator` in the asset shelf definition.
  Executed when dragging an asset in the shelf.
- When dragging an asset, highlight it as active, without calling the
  `bl_activate_operator`. This is important feedback to the user.
- Activate/select view items on click instead of drag, so dragging is
  possible.
- Let pose applying operators handle the Ctrl key to apply poses
  flipped. There's no simple way to attach such alternative behaviors
  to `bl_activate_operator`/`bl_drag_operator`
- Remove keymap items that were there for the previous "hacky" solution
  to apply & blend poses.

Pull Request: https://projects.blender.org/blender/blender/pulls/144023
2025-08-28 12:04:31 +02:00
YimingWu
a623efe42a Fix #145287: Don't touch original mesh when converting to grease pencil
Previously `BKE_id_material_clear` is used on the original mesh data for
clearing mesh array when converting mesh objects into grease pencil,
this is not desired because:

1. It damages original mesh data block, if the mesh is shared across
   multiple objects, this can lead to unwanted changes.
2. Converting multiple mesh objects that shares one mesh can crash
   because the now-modified mesh data block is not fully evaluated and
   subsequent conversions aren't able to get a valid mesh.

By removing the `BKE_id_material_clear` call we can make the conversion
work as expected. Since we replace the object data and reset material
count in the object, the material array in the original mesh shouldn't
pose any influence on the result of the conversion.

Pull Request: https://projects.blender.org/blender/blender/pulls/145288
2025-08-28 08:16:49 +02:00
Sean Kim
fee064e524 Multires: Add 'Conform Base' functionality
This commit modifies the `OBJECT_OT_multires_base_apply` operator to
take in a new parameter which determines whether the final heuristic of
adjusting for a subdivision surface modifier applies.

Resolves #124553

Pull Request: https://projects.blender.org/blender/blender/pulls/145055
2025-08-27 01:39:23 +02:00
Campbell Barton
39990303a0 Cleanup: pass "Curve" as a const reference for font evaluation
Remove a redundant `const_cast`.
2025-08-26 20:56:19 +10:00
Sergey Sharybin
a020907844 Multires Bake: Implement vector displacement baking
Supports baking to object and tangent space.

Compatible with Cycles Vector Displacement node which has the
(tangent, normal, bitangent) convention.

The viewport situation is a bit confusing: seems that Eevee
does not handle vector displacement properly and rips all faces
apart. Cycles renders the displaced object correctly.

Not entirely happy with the UI, as displacement space does not
really belong to the Output, but so doesn't Low Resolution Mesh.
Perhaps the best would be to have a separate pass to revisit the
settings, and also make it more clear what the Low Resolution Mesh
actually does.

Pull Request: https://projects.blender.org/blender/blender/pulls/145014
2025-08-25 14:23:35 +02:00
Campbell Barton
dae9bed968 Refactor: move the evaluated font size into EditFont
Avoids manipulating the Curve when evaluating fonts.
2025-08-25 06:20:10 +00:00
Sergey Sharybin
628f53a28c Refactor: Consolidate baking settings into BakeData
Almost all settings were duplicated between BakeData and RenderData.
The only missing field was the bake type, which is stored as a custom
property in Cycles.

This change:
- Removes unused bake_samples and bake_biasdist.
- Migrates settings like bake_margin to BakeData.
- Switches multires baker to use bake_margin.
- Introduces bake type in the BakeData, the same way how it was
  defined in RenderData::bake_mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/144984
2025-08-22 19:18:03 +02:00
Sergey Sharybin
e0154de320 Rework Bake from Multires
The main idea is to switch Bake from Multires from legacy DerivedMesh
to Subdiv. On the development side of things this change removes a lot
of code, also making it easier easier to rework CustomData and related
topics, without being pulled down by the DerivedMesh.

On the user level switch to Subdiv means:

- Much more closer handling of the multi-resolution data: the derived
  mesh code was close, but not exactly the same when it comes to the
  final look of mesh.

  Other than less obvious cases (like old DerivedMesh approach doing
  recursive subdivision instead of pushing subdivided vertices on the
  limit surface) there are more obvious ones like difference in edge
  creases, and non-supported vertex creases by the DerivedMesh.

- UV interpolation is done correctly now when baking to non-base level
  (baking to multi-resolution level >= 1).

  Previously in this case the old derived mesh interpolation was used
  to interpolate face-varying data, which gives different results from
  the OpenSubdiv interpolation.

- Ngon faces are properly supported now.

A possible remaining issue is the fact that getting normal from CCG
always uses smooth interpolation. Based on the code it always has been
the case, so while it is something to look into it might be considered
a separate topic to dig into.
2025-08-22 17:59:27 +02:00
John Kiril Swenson
5a0c0826b7 VSE: Support adding multiple images
Before, trying to add multiple strips would always create an image
sequence. This patch allows images to be added in bulk, just like movie
& sound strips.

A new "Image Sequence Detection" property has been added which works
like the image editor. Toggling it off will always import individual
images and never create image sequences.
If it's on, you can also optionally "Use Placeholders" to fill in gaps,
which exhibits the same behavior as before (placeholders will show as
pink in the preview until you have the files on your system in the right
folders).

You can even add both image sequences and regular images at the same
time. Only caveat is that this doesn't work if the regular images are
interspersed within sequence frames in the file browser view when you
add them. I.e., all frames of a sequence should be listed without any
regular frames in between (but the sequence frame numbers don't have to
be in order). This can usually be ensured on all sort types (like date,
name).

NOTE: This patch also replaces the "end_frame" property on image /
effect strips with "length," to support behavior when multiple strips
are involved. This is a breaking change for the API, but is a fairly
small change and will be included in the release notes.

The "length" property allows one to adjust all image strips' lengths at
once. It does nothing for image sequences, however, since their lengths
are defined by their image count.

Pull Request: https://projects.blender.org/blender/blender/pulls/143974
2025-08-19 00:09:04 +02:00
Hans Goudey
178eca9427 Refactor: Move various window manager runtime pointers out of DNA
All of these pointers were cleared on file read. It's clearer to just
move them to the runtime struct.

Pull Request: https://projects.blender.org/blender/blender/pulls/144729
2025-08-18 20:44:44 +02:00
Pratik Borhade
e297fb4f14 UI: Tree View: Operator to delete with X key
Tree view elements can be deleted by the remove operator located on the
right side with `-` icon. But these operators are different for every
type. Now introduced `UI_OT_view_item_delete`. With that it is possible
to delete elements with X key when mouse is over tree view. In future
maybe we could remove type specific operators (for example: `GREASE_PENCIL_OT_layer_remove`).

See video in PR description

Pull Request: https://projects.blender.org/blender/blender/pulls/144045
2025-08-16 08:21:49 +02:00
Casey Bianco-Davis
859431727d Fix #144170: Use Lights defaults to false on newly created objects
This makes it so that newly created Grease Pencil object and layers default
to being affected by lights. This match legacy Grease Pencil.

Pull Request: https://projects.blender.org/blender/blender/pulls/144277
2025-08-11 10:44:34 +02:00
Pratik Borhade
a55e0b9516 Fix: Avoid drag-drop above basis key
As mentioned in !141930, prevent shape key from dropping above the
basis, so it remains the first.

See video in PR description

Pull Request: https://projects.blender.org/blender/blender/pulls/143050
2025-08-08 17:44:18 +02:00
Sergey Sharybin
8e9c68f6a3 Cleanup: Bake from multires code
This PR contains the following incremental changes:
- Remove dead code of AO multires baker
- Use C++ primitives in multires baker (and cleanup some comments and naming)
- Remove unused bake user scale

Pull Request: https://projects.blender.org/blender/blender/pulls/143707
2025-08-08 12:43:01 +02:00
Bastien Montagne
d5bc0fb4bb Fix #144065: Do not transfer special user count (e.g. the fake user) when duplicating. 2025-08-08 12:30:04 +02:00
Campbell Barton
53cae68ee8 Cleanup: hyphenate the term data-blocks in strings/doc-strings 2025-08-08 08:47:13 +10:00
Christoph Lendenfeld
a43359eb88 Anim: Store pose bone visibility flag on pose bone
This PR adds a flag to the pose bone that determines its visibility.
Doing so allows to hide a pose bone and
* don't affect other instances of the same armature
* save the visibility even if the rig is linked

The visibility of the bone in object mode is now also determined by the
pose bone whereas before it was the `Bone`.

**This breaks backwards compatibility** on the Python API since the visibility property,
on the `Bone` behaves differently now as it hides the edit bone instead of the pose bone.

In order to remove all active uses of `BONE_HIDDEN_P` the changes in `armature_skinning.cc` are required.

Part of #138482

Pull Request: https://projects.blender.org/blender/blender/pulls/139167
2025-08-07 15:54:58 +02:00
Pratik Borhade
0f8f9057a9 UI: Shape key right click context menu
Invoke context menu for shape key with right click.
Added `MESH_MT_shape_key_tree_context_menu`, this include operators
that takes action on selected/active tree items:
- Make Basis
- Duplicate
- Move to Top -> Move After Basis
- Move to Bottom -> Move to Last

See Video in PR description

Pull Request: https://projects.blender.org/blender/blender/pulls/143444
2025-08-07 12:41:26 +02:00
Campbell Barton
5b78323450 Cleanup: use RNA_def_enum_flag 2025-08-07 18:10:50 +10:00
Hans Goudey
21cbdab34a Cleanup: Pass ReportList instead of wmOperator
This is more flexible and doesn't include unnecessary information.
2025-08-06 17:47:32 -04:00
Damien Picard
5998795aa6 UI: Replace contractions with long-form text
Avoid using contractions for can't, aren't, doesn't, and shouldn't.
Following the writing style guide in the Human Interface Guidelines.

Pull Request: https://projects.blender.org/blender/blender/pulls/143852
2025-08-05 11:16:22 +02:00
Nika Kutsniashvili
7158e02aed Modeling: Set shape key default value to 1.0
When adding a shape key, set its blend value to 1.0 / 100%.

There is no practical use case where user wants to add shape key but
not work on it. New shape keys at value 0 have no purpose. Adding
shape key should be interpreted by Blender as user wanting to
sculpt/model on it. Also, being at 1.0 initially doesn't change
anything visually, because key isn't edited yet and it doesn't deform
mesh.

The default value of the shape key is also set to 1.0. When using
right-click to reset values, user most often wants to return to 1
(which is "correct" state of deformation without multiplication)
rather than 0 (which is no deformation at all).

Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/133399
2025-08-01 15:43:31 +02:00
Sybren A. Stüvel
bd7b8bbeaf Shape Keys: expand tooltip of Make Basis Key operator
Expand the tooltip of the "Make Shape Key the Basis Key" to clarify that
the chosen shape key will be applied at 100%, and not at the current
blend value.

Pull Request: https://projects.blender.org/blender/blender/pulls/143466

Pull Request: https://projects.blender.org/blender/blender/pulls/143466
2025-08-01 12:54:50 +02:00
Sybren A. Stüvel
abb0c49870 Shape Keys: let Make Basis Key also update the "relative to" fields
When a shape key is made the new basis key, also update the "Relative
To" setting on the old & new basis keys. Both are made relative to the
new basis shape key.

Without this, the old basis key would still be relative to itself, which
effectively disables it. By making it relative to the new basis key, you
can increase its blend value to invert the effect of the new basis key.

Pull Request: https://projects.blender.org/blender/blender/pulls/143466
2025-08-01 12:54:46 +02:00
Damien Picard
f6771d8e21 UI: Improve running jobs labels
Use the form "Processing something..." (gerund, sentence case,
ellipsis) for running jobs progress label, according to Blender's
Human Interface Guidelines.

Pull Request: https://projects.blender.org/blender/blender/pulls/141573
2025-07-31 16:32:41 +02:00
Pratik Borhade
3f338f923d Shape Key: Move multiple selected elements
Similar to !141881, add support to move selected elements in the list
Now basis shape key is fixed at the first location. It cannot be moved
up/down. Other keys cannot be moved either above shape key.

Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/141930
2025-07-30 11:42:37 +02:00
Campbell Barton
f281f5a500 Cleanup: header grouping
Group includes, this is mostly being done already but had become mixed
up in some areas.
2025-07-30 14:22:06 +10:00
Campbell Barton
d13540fe7d Cleanup: rename locked interface setting functions
Follow the convention of using terms such as get/set as a suffix.
2025-07-30 13:01:43 +10:00
Sybren A. Stüvel
301a86d700 Modeling: new shape key operator Make Basis
Add a new operator "Make Shape Key the Basis Key", shown in the Shape
Key menu as "Make Basis". Effectively this does the same thing as moving
the active shape key to the top of the list of shape keys: applying it
to the mesh.

This operator is added now, because !141930 will prevent moving shape
keys to the top of the list. This hopefully prevents accidentally making
other keys the basis key, which can cause issues that are hard to
recover from.

Pull Request: https://projects.blender.org/blender/blender/pulls/143200
2025-07-28 15:28:21 +02:00
Campbell Barton
e8f9e2d1d1 Cleanup: use UTF8 string functions in editors & related logic
Use UTF8 aware functions unless raw bytes are expected.
2025-07-27 16:41:19 +10:00
Campbell Barton
649b89781e Cleanup: ensure UTF8 string copy for DNA & screen data
Use `BLI_strncpy_utf8` & `BLI_snprintf_utf8` for fixed size buffers in
DNA and screen data structures such as panels, menus & operators.

This could be considered a fix as copying a UTF8 string into a smaller
buffer without proper truncation can create an invalid UTF8 sequence.
However identifying which of these users are likely to run into would
be time consuming and not especially useful.
2025-07-26 12:33:15 +00:00
Campbell Barton
0531230a35 Fix: incorrect sizes of fixed size buffers, ensure valid UTF8
Correct code that was likely to truncate when copying strings and
correct the the size of fixed sized buffers.
2025-07-26 12:07:27 +00:00
Pratik Borhade
df75d3e664 Fix: Delete basis removes all shape key
Caused by 29b90af679
When deleting the first/basis shape key, all successive keys are
deleted. `shapenr` remains 1 during entire iteration and `BLI_findindex`
returns 1 for every keyblock as first element is deleted. This
eventually clears the entire list. To fix this, change `shapenr` value to 0
when deleting the first element.

Pull Request: https://projects.blender.org/blender/blender/pulls/142946
2025-07-25 12:49:05 +02:00
Pratik Borhade
b4a0cf398e Fix #139183: Stuck in Draw Mode after converting Grease Pencil to Mesh
`OBJECT_OT_convert` can be called outside of object mode from F3 search
menu. This fails/crashes for some conversions. To avoid running into
such situation, edit poll function so that operator is only available in
object mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/139261
2025-07-25 12:10:11 +02:00
tariqsulley
9dae336482 Fix #140548: Shift to extend fails in the "Hide Other Collection" menu
Use the invoke operator context so the event is passed to the operator.

Ref !141817
2025-07-25 16:32:49 +10:00
Pratik Borhade
29b90af679 Shape Key: Delete selected keyblocks
Now that multi-select works with shape key, support deleting selected
keyblocks. New function `shape_key_is_selected` being introduced that
returns true for selected/active shape keys

Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/141881
2025-07-22 09:06:58 +02:00
Sean Kim
fef8c23e9e Refactor: Paint: Migrate runtime data out of UnifiedPaintSettings
This commit moves 23 total existing runtime-only properties from the
`UnifiedPaintSettings` struct into the `PaintRuntime` BKE struct. This
shrinks the amount of persisted data by 224 bytes per paint mode per
scene.

In doing this conversion, fields that were previously `char` booleans
have been converted to `bool` types, and C++ math vector types have been
used where appropriate as well.

Some of these attributes may move again in the future to better
distinguish stroke level data from mode level data.

Pull Request: https://projects.blender.org/blender/blender/pulls/141366
2025-07-18 23:18:27 +02:00
Habib Gahbiche
67ffbcd0ee UI: Rename "Z" pass to "Depth"
This is a UI change only. The Python API still uses `use_pass_z` to
preserve forward and backward compatibility.

The compositor still uses "Z" to refer to depth in the Z-Combine Node.
This is addressed separately in
https://projects.blender.org/blender/blender/pulls/141676

Pull Request: https://projects.blender.org/blender/blender/pulls/141675
2025-07-18 10:27:29 +02:00
Jacques Lucke
55e2fd2929 Cleanup: unify naming for named constructors
Previously, we used an inconsistent naming scheme for such "named constructors".
Now it always uses `from_*`.

Pull Request: https://projects.blender.org/blender/blender/pulls/142175
2025-07-17 09:09:16 +02:00
Hans Goudey
e3c5070dfe Cleanup: Remove unused data transfer code
Shape key interpolation was never implemented. Nowadays it's
probably better to implement similar features in different ways
rather than extending this system. Also some layer mapping
generation was unused. The motivation for this is easing some
cleanups to make this modifier less directly reliant on CustomData.

Pull Request: https://projects.blender.org/blender/blender/pulls/142131
2025-07-16 22:53:21 +02:00
Namit Bhutani
8602f893ed Fix #141811: Crash with remesh operator
Fixes crash in the remesh operator by moving mesh spatial organization
to appropriate execution contexts and using proper memory handling in
spatial organization's face offset calculations.

Pull Request: https://projects.blender.org/blender/blender/pulls/141842
2025-07-16 14:27:18 +02:00
Germano Cavalcante
a2a2638a57 Fix: Assert finishing transformation with an 'Affect Only' option active
Attempt to use C-style MEM_freeN on a pointer created with CPP-style
MEM_new

Pull Request: https://projects.blender.org/blender/blender/pulls/141999
2025-07-15 23:54:48 +02:00
Guillermo Venegas
1a247fbaa8 Refactor: WM: Make OperatorCallContext an enum class, move to namespace
This allows forward declaring `OpCallContext`, avoiding the
transitive include `WM_Types.hh` in `UI_interface_layout.hh`

Pull Request: https://projects.blender.org/blender/blender/pulls/141804
2025-07-15 03:08:04 +02:00
Campbell Barton
ec8751f826 Cleanup: white-space around C-style comment blocks
Also use C++ style comments for disabling code.
2025-07-13 21:58:53 +10:00
Hans Goudey
8f198a85b4 Refactor: Add RNA_string_get function returning a string
This can replace most uses `RNA_string_get_alloc` and give us
better type safety and generally simpler code.

Internally, this uses the function added in 50076993f3.

Pull Request: https://projects.blender.org/blender/blender/pulls/141358
2025-07-11 16:24:13 +02:00
Hans Goudey
d677a0636e Fix: Incorrect selection check in vertex group smooth after cleanup
Mistake in 546d3495a8.
Thanks to Campbell for spotting this.
2025-07-11 09:29:45 -04:00
Guillermo Venegas
1f34dc9155 Refactor: UI: Replace uiItemsEnumO with class method uiLayout::op_enum
This converts the public uiItemsEnumO and uiItemsFullEnumO functions
to an object-oriented API (as uiLayout::op_enum overloads), matching
recent changes in the API.

Part of: #117604

Pull Request: https://projects.blender.org/blender/blender/pulls/141748
2025-07-11 15:25:30 +02:00
Jesse Yurkovich
4de536c114 Cleanup: Remove unused includes of grease pencil legacy headers
Removes unnecessary usages of the following headers:
- BKE_gpencil_geom_legacy.h
- BKE_gpencil_legacy.h
- BKE_gpencil_modifier_legacy.h
- BKE_grease_pencil_legacy_convert.hh
- DNA_gpencil_legacy_types.h

Pull Request: https://projects.blender.org/blender/blender/pulls/141471
2025-07-11 05:01:57 +02:00