Commit Graph

106246 Commits

Author SHA1 Message Date
Jacques Lucke
7bb1ce1241 Geometry Nodes: improve handling baked data after undo
Previously, one could easily "loose" baked data by undoing. The data was not
actually deleted, but Blender didn't find it anymore. This happened because
`update_existing_bake_caches` was expected to be called after changes to
`NodesModifierData.bakes`. However, this was not called after undo.
It was also not possible to call this function from `blend_read`, because it
required access to the referenced node tree.

Now, the bake cache is lazily created during depsgraph evaluation, which
partially solves the problem. It can still seem that Blender lost data, but that
fixes itself much more quickly after the next evaluation. The remaining issue
should be solved a future patch that keeps the bake cache intact over undo
steps using `foreach_cache`.
2024-01-29 11:42:34 +01:00
Campbell Barton
be7f89a9f5 Cleanup: spelling in comments 2024-01-29 11:47:42 +11:00
Alaska
020f6ec0ff Versioning: Better conversion of Specular tint for metals
With the addition of F82 tinting to the Principled BSDF, metals now use
the specular tint parameter.

This can cause issues when converting materials from older versions
of Blender to newer versions if the Specular Tint isn't handled
properly for these materials.

This commit attempts to fix this by adjusting the Specular Tint color
based on the Metallic input to try and keep converted materials
consistent with older versions of Blender.

Thank you to @LukasStockner for helping out.

Pull Request: https://projects.blender.org/blender/blender/pulls/114518
2024-01-29 00:36:28 +01:00
Iliya Katueshenock
93b28b54fc Cleanup: Geometry Nodes: Use int instead of uint16_t
https://developer.blender.org/docs/handbook/guidelines/c_cpp/#integer-types

Pull Request: https://projects.blender.org/blender/blender/pulls/117594
2024-01-28 15:45:32 +01:00
Iliya Katueshenock
25f32a2191 Cleanup: Geometry Nodes: Unused function
Pull Request: https://projects.blender.org/blender/blender/pulls/117591
2024-01-28 15:26:05 +01:00
Iliya Katueshenock
f795d81a88 Cleanup: Use const for enum item variables and arguments
Pull Request: https://projects.blender.org/blender/blender/pulls/117592
2024-01-28 15:25:26 +01:00
Pierrick Bouvier
a3d915310b Build: Fix some excessive Visual Studio compile times
While investigating Blender compilation time for windows-arm64, we
identified two compilation units that were taking a long time to compile
(~1h each). This affects windows-x64 builds as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/117534
2024-01-28 12:12:52 +01:00
Guillermo Venegas
d4bc3bd08d IO: Add file handlers to c++ import operators
Adds file handlers for the C++ import operators.
This will allow these operators to be invoked with drag-and-drop
filepath data in the 3D Viewport or the Outliner.

When the operators are called with drag-and-drop data a dialog popup
will be used instead of invoking the file select window.

Previously OPTYPE_REGISTER tag had no effect, now since these operators
can run as popup dialogs this flag is removed to prevent heavy io
operations in the redo panel.

Also includes drawing functions for ply and stl and a missing
event notifications to collada import.

Important: Presets can override file path properties, so if a preset is
used, file paths provided by drag and drop will be lost. This will be
addressed in follow up changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/116873
2024-01-27 23:38:44 +01:00
Brecht Van Lommel
07de588615 Fix: Revert change to use operator description as title in dialogs
This was part of #117528, but the description is not suitable as a title
in general and this breaks various existing popups. It is often tool long
and detailed, or just not worded in a way that works as a title.
2024-01-27 23:30:20 +01:00
Hans Goudey
359bfbcd78 Cleanup: Use enum class and forward declaration for paint mode 2024-01-26 18:43:13 -05:00
Hans Goudey
fb0d6198c0 Cleanup: Move remaining asset editors code to C++ namespace 2024-01-26 18:43:13 -05:00
Brecht Van Lommel
745c30ad08 Cleanup: removed unused argument 2024-01-27 00:22:49 +01:00
Hans Goudey
2043df4816 Cleanup: Remove unnecessary AssetLibrary C wrapper type 2024-01-26 18:15:41 -05:00
Hans Goudey
f08ce0a8ed Cleanup: Move AS_asset_library.h contents to C++ header 2024-01-26 18:15:41 -05:00
Hans Goudey
1743af0031 Cleanup: Remove unnecessary keywords from C++ headers 2024-01-26 18:15:41 -05:00
Hans Goudey
0e6aad4742 Cleanup: Remove remaining asset editor headers to C++ 2024-01-26 18:15:40 -05:00
Jesse Yurkovich
90c5e0f0c6 Attributes: Reduce memory allocations in attribute accessor 'for_all' func
Based on an instrumented set of our container classes, this code path
was found to be producing an excessive number of Set resizes that are
trivial to remove.

The Set's inline buffer size was tuned from 4 to 16 which eliminates all
allocations, about 77k of them, during FBX import of the Zero-Day
"Measure One" scene[1]. It also eliminates ~90% of allocations, about
844k of them, when loading the Charge demo scene. For additional
context, using a size of 8 would reduce allocs by ~65% for Zero-Day.

[1] Zero-Day, Open Research Content Archive (ORCA):
https://developer.nvidia.com/orca/beeple-zero-day

Pull Request: https://projects.blender.org/blender/blender/pulls/117432
2024-01-26 21:39:19 +01:00
Jesse Yurkovich
068579f3e8 Mesh: Reduce memory allocations in corner normals calculation
Based on an instrumented set of our container classes, it was found that
an excessive number of Vector reallocations were occurring in the corner
normals code path.

The allocations were reduced by increasing inline buffer sizes for the
Vectors in question. The total number of reallocs falls from 433k to
194k when importing the Zero-Day FBX scene[1]. Profiling time spent in
`MEM_lockfree_mallocN_aligned` falls from ~1.3% to ~1.15%

[1] Zero-Day, Open Research Content Archive (ORCA):
https://developer.nvidia.com/orca/beeple-zero-day

Pull Request: https://projects.blender.org/blender/blender/pulls/117431
2024-01-26 21:33:50 +01:00
Harley Acheson
0d6aec1c21 UI: Operator Props Dialog Changes
Changes to WM_operator_props_dialog_popup to allow configuration,
including via python, and with a look consistent with new confirms.

Pull Request: https://projects.blender.org/blender/blender/pulls/117528
2024-01-26 20:52:31 +01:00
Jason Fielder
ac61dad14f EEVEE Next: Resolve motion blur intermittent rendering
Fixes issue where motion blur would not display for
certain objects intermittently due to uninitialized
parameters in the ObjectKey struct causing the
motion object map look-up to fail and for motion
parameters to be reset to default, disabling the
effect for the given objects.

Authored by Apple: Michael Parkin-White

Co-authored-by: Michael Parkin-White <mparkinwhite@apple.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/117560
2024-01-26 20:48:00 +01:00
Hans Goudey
1bb358f423 Fix: Tooltip memory leak
Use std::string for custom tooltip function return value.
2024-01-26 14:39:05 -05:00
Hans Goudey
3b2a99af3e Fix: Build error in debug build 2024-01-26 13:47:50 -05:00
Hans Goudey
2a5531b253 Cleanup: Use StringRef instead of const char * in OBJ export 2024-01-26 13:18:58 -05:00
Hans Goudey
2a0c8593c9 Cleanup: Use C++ Array in OBJ import 2024-01-26 13:17:30 -05:00
Hans Goudey
0d03ae4a4d Cleanup: Update mesh naming in OBJ IO code 2024-01-26 13:16:01 -05:00
Hans Goudey
899546d4e4 Cleanup: Use utility to fill index range in OBJ mesh export 2024-01-26 12:58:45 -05:00
Hans Goudey
94ca3aea83 OBJ: Use mesh normals domain properly for normals storage
- Only calculate the necessary normals based on smooth/flat/mixed shading
- Use cached face normals instead of computing them
- Use a `VectorSet` for deduplication instead of a `Map`
- Deduplicate vertex normals and store indices in separate loops
- Avoid unnecessary duplication of face normal indices
- Inline simple function for slicing index span

Export time (ms) of 1.8m vertex mesh:
| Normals Domain  | Before | After |
| --------------- | ------ | ----- |
| Face (flat)     | 559    | 469   |
| Vertex (smooth) | 659    | 466   |
| Corner (mixed)  | 656    | 640   |

The change of using normals from different domains and using a
VectorSet for de-duplication change the order of normals in the OBJ
files. Other than that, the results should be unchanged.

Fixes #117510

Pull Request: https://projects.blender.org/blender/blender/pulls/117522
2024-01-26 18:54:58 +01:00
Jeroen Bakker
ec80264d09 Vulkan: Bundle Calls in DrawList
A draw list bundles multiple draw commands for the same geometry
and sends the draw commands in a single command. This reduces
the overhead of pipeline checking, resource validation and can
keep the load higher on the gpu as more work needs to be done.

Previously the draw list didn't bundle any commands and would still
send each call separately to the GPU. This PR implements the bundling
of the commands.

Pull Request: https://projects.blender.org/blender/blender/pulls/117548
2024-01-26 17:45:18 +01:00
Hans Goudey
b0a4dd56aa Fix: Build error with asserts enabled
74128855be removed a function used in debug builds.
2024-01-26 10:50:13 -05:00
Philipp Oeser
eead38ab97 Fix #117520: Data Transfer modifier not working with Vertex Groups
This was the case for custom normals.

There was an optimization in 91b4f9f1f6 that was skipping computation of
existing normals if the Mix Factor in the UI was at 1.0 (under the
assumption that in this case no old normals would be needed.

Problem is that the resulting mix factor is the product of the Mix
Factor in the UI and the weights, so just doing the check as in the
culprit commit is not enough.

Need to consider if weights are used.

Pull Request: https://projects.blender.org/blender/blender/pulls/117538
2024-01-26 16:44:59 +01:00
Hans Goudey
ebcdf19537 Cleanup: Use consistent camel case for test class names 2024-01-26 10:25:48 -05:00
Philipp Oeser
37e89714ff Fix: Entering node group via icon after exiting it via ctrl+tab broken
This is because the `NODE_OT_group_edit` operator reuses the last value
of the `Exit` property and once this is set it would always try to pop
(instead of push [which is what we want from the icon]) the nodegroup.

Callers of the operator set `Exit` explicitly elsewhere (just not
from node drawing -- where the way it is called [via a more general
callback] makes it difficult to set operator properties from there).

Solve by not saving the property for following usages (flag
`PROP_SKIP_SAVE`).

Fixes #117530.

Pull Request: https://projects.blender.org/blender/blender/pulls/117542
2024-01-26 16:23:02 +01:00
Philipp Oeser
a324a19f1b Fix #117526: Crash when Changing Color Palette in Edit Mode
By default, Color Palettes are only drawn in the UI in the context of
**painting**.
UI button code then tries to update an appropriate brush from edits to
the palette.

So a valid `Paint` and `Brush` were assumed. This is not a problem for
objectmode (because `BKE_paint_get_active_from_context` then defaults to
`ImagePaintSettings`'s `Paint`), but other modes dont guarantee this
(editmode only returns a valid `Paint` when uv sculpting).

In the report, a palette was created and displayed via python, making
changes in editmode would then crash.

Solve by checking we have a valid Paint in corresponding UI code to
begin with.

Similar to 9e82e48937 .

Pull Request: https://projects.blender.org/blender/blender/pulls/117544
2024-01-26 16:21:48 +01:00
Hans Goudey
adf67f8a49 Fix: Missing normals cache tag when clearing custom normals data
Also use a proper depsgraph tag and split the implementation for BMesh
and Mesh a bit more, to avoid mixing different abstraction levels.
2024-01-26 10:02:11 -05:00
Hans Goudey
74128855be Cleanup: Fix unused function and variable in node RNA 2024-01-26 10:02:11 -05:00
Falk David
9f563c3ec2 GPv3: Add poll function to brush_stroke operator
This adds a proper poll function to the `brush_stroke` operator.
Ensures that this operator is only used by tools that are brushes.

Also changes the poll for the drawing of the cursor to only run
with tools that are brushes.
2024-01-26 15:24:00 +01:00
Falk David
f3c9449521 Cleanup: GPv3: Move poll/keymap/macro definitions to grease_pencil_ops.cc 2024-01-26 15:24:00 +01:00
Lukas Tönne
5ad49f4142 Geometry Nodes: Menu Switch Node
This patch adds support for _Menu Switch_ nodes and enum definitions in
node trees more generally. The design is based on the outcome of the
[2022 Nodes Workshop](https://code.blender.org/2022/11/geometry-nodes-workshop-2022/#menu-switch).

The _Menu Switch_ node is an advanced version of the _Switch_ node which
has a customizable **menu input socket** instead of a simple boolean.
The _items_ of this menu are owned by the node itself. Each item has a
name and description and unique identifier that is used internally. A
menu _socket_ represents a concrete value out of the list of items.

To enable selection of an enum value for unconnected sockets the menu is
presented as a dropdown list like built-in enums. When the socket is
connected a shared pointer to the enum definition is propagated along
links and stored in socket default values. This allows node groups to
expose a menu from an internal menu switch as a parameter. The enum
definition is a runtime copy of the enum items in DNA that allows
sharing.

A menu socket can have multiple connections, which can lead to
ambiguity. If two or more different menu source nodes are connected to a
socket it gets marked as _undefined_. Any connection to an undefined
menu socket is invalid as a hint to users that there is a problem. A
warning/error is also shown on nodes with undefined menu sockets.

At runtime the value of a menu socket is the simple integer identifier.
This can also be a field in geometry nodes. The identifier is unique
within each enum definition, and it is persistent even when items are
added, removed, or changed. Changing the name of an item does not affect
the internal identifier, so users can rename enum items without breaking
existing input values. This also persists if, for example, a linked node
group is temporarily unavailable.

Pull Request: https://projects.blender.org/blender/blender/pulls/113445
2024-01-26 12:40:01 +01:00
Jeroen Bakker
dd0798927f EEVEE: HiZ Buffer Allocation
EEVEE uses an HiZ buffer. The size of the HiZ buffer is based on the render extent.
Probes assume that the render extent is always bigger than needed for rendering
probes. This assumption is incorrect.

Although this PR fixes this by allocating the required size, it is still renders with
artifacts. These artifacts originate from the lighting module and also needs to be
fixed.

Pull Request: https://projects.blender.org/blender/blender/pulls/117502
2024-01-26 12:06:42 +01:00
Aras Pranckevicius
b7cf71d567 VSE: add Cubic Mitchell filtering, rename previous cubic to Cubic BSpline
Part of overall "improve filtering situation" (#116980) task:

Add "Cubic Mitchell" filtering option to VSE strips. This is a cubic (4x4)
filter that generally looks better than bilinear, while not blurring the image
as much as the Cubic BSpline filter that exists elsewhere within Blender. It is
also default in many other apps.

Rename the (very recently added) VSE Bicubic filter option to Cubic BSpline.

Images in the PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/117517
2024-01-26 11:57:19 +01:00
Jacques Lucke
932b2d1727 Cleanup: simplify naming of get_default_hash 2024-01-26 11:45:56 +01:00
Pratik Borhade
a6258d6b8b Cleanup: rename BKE_pbvh_node_mark_normals_update
This was discussed in !117192

Pull Request: https://projects.blender.org/blender/blender/pulls/117498
2024-01-26 11:24:55 +01:00
Pratik Borhade
4dc345ab1e Fix #117494: Crash when dropping collection
Caused by 7ca4dcac5a
Crash is due to wrong return value.

Pull Request: https://projects.blender.org/blender/blender/pulls/117496
2024-01-26 11:23:09 +01:00
Sybren A. Stüvel
9c172d739f Anim: refresh 'solo active' on armature after removing bone collection
After removing a bone collection that was marked as 'solo', refresh
the armature's 'solo active' flag. The deleted bone collection might have
been the last solo'ed one.
2024-01-26 11:12:25 +01:00
Sybren A. Stüvel
a7f41fc938 Anim: bone collections, add 'solo' flag
Add the 'solo' flag to bone collections, effectively adding another
layer of visibility controls.

If there is _any_ bone collection with this flag enabled, only this
collection (and others with this flag enabled) will be visible.

In RNA, the following properties are exposed:
- `bone_collection.is_solo`: writable property to manage the solo flag.
- `armature.is_solo_active`: read-only property that is `True` when any
  bone collection has `is_solo = True`.

The RNA property `bone_collection.is_visible_effectively` now also takes
the solo flag into account.

Pull Request: https://projects.blender.org/blender/blender/pulls/117414
2024-01-26 10:21:52 +01:00
Sybren A. Stüvel
8a569a8da4 Refactor: Anim, rename BoneCollection::is_visible_effectively()
Rename `BoneCollection::is_visible_effectively()` to
`is_visible_with_ancestors()`. Soon a "solo" flag will be introduced,
and the effective visibility of the bone collection will depend on that
too. This particular function doesn't take that into account, though,
and thus needs a rename.

Note that this does NOT rename the RNA property
`is_visible_effectively`. That will be updated when the "solo" flag is
introduced to also take that into account.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/117414
2024-01-26 10:21:52 +01:00
Jesse Yurkovich
ddd06eeb8f UI: Add ability to configure the header row of layout panels
There are many instances where customizing the header row is desired so
return both the header row layout and the main body layout.

For consistency and correctness, the arrow symbol and the is_open check
are always performed so callers only need to perform layout tasks.

The C++ side now receives a `PanelLayout` structure containing both:
```cpp
PanelLayout panel_layout = uiLayoutPanelWithHeader( ... );
uiItemL(panel_layout.header, ... );
if (panel_layout.body) {
    ...
}
```

And the Python side receives a tuple:
```python
header, body = layout.panel( ... )
header.label(...)
if body:
    ...
```

```python
import bpy
from bpy.props import BoolProperty

class LayoutDemoPanel(bpy.types.Panel):
    bl_label = "Layout Panel Demo"
    bl_idname = "SCENE_PT_layout_panel"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

    def draw(self, context):
        layout = self.layout
        scene = context.scene

        layout.label(text="Basic Panels")

        header, panel = layout.panel("my_panel_id", default_closed=True)
        header.label(text="Hello World")
        if panel:
            panel.label(text="Success")

        header, panel = layout.panel_prop(scene, "show_demo_panel")
        header.label(text="My Panel")
        if panel:
            panel.prop(scene, "frame_start")
            panel.prop(scene, "frame_end")

        layout.label(text="Customized headers")

        # Add a checkbox to the Panel header. text must be None for this panel
        header, panel = layout.panel("my_panel_id-2", default_closed=True)
        header.prop(scene, "use_checkmark", text="") # text must be empty for the checkbox
        header.label(text="Checkmark at beginning")
        if panel:
            panel.label(text="Success")

        header, panel = layout.panel("my_panel_id-3", default_closed=True)
        header.label(text="Buttons at the end")
        header.operator("mesh.primitive_cube_add", text="", icon='EXPORT')
        header.operator("mesh.primitive_cube_add", text="", icon='X')
        if panel:
            panel.label(text="Success")

        header, panel = layout.panel("my_panel_id-4", default_closed=True)
        header.prop(scene, "use_checkmark2", text="")
        header.label(text="Both")
        header.operator("mesh.primitive_cube_add", text="", icon='EXPORT')
        header.operator("mesh.primitive_cube_add", text="", icon='X')
        if panel:
            panel.label(text="Success")

bpy.utils.register_class(LayoutDemoPanel)
bpy.types.Scene.show_demo_panel = BoolProperty(default=False)
bpy.types.Scene.use_checkmark = BoolProperty(default=False)
bpy.types.Scene.use_checkmark2 = BoolProperty(default=False)
```

Pull Request: https://projects.blender.org/blender/blender/pulls/117248
2024-01-26 10:11:22 +01:00
Guillermo Venegas
da77f90744 Fix unreported: Avoid using unknown file types in dropboxes
Most of the `WM_DRAG_PATH` poll functions include
unknown file types (`0`) as fallback, preventing file handlers
from being used with explicit defined file extensions.

Pull Request: https://projects.blender.org/blender/blender/pulls/117189
2024-01-26 03:43:31 +01:00
Hans Goudey
b61496c508 Fix #117424: Sculpt undo misses changes propagated to shape keys
For modification the important point is that to propagate changes to
other keys it's necessary to know what the changes are, which means
comparing the old an new values, so you can't modify shape key data
in place.
2024-01-25 15:41:27 -05:00
Harley Acheson
354def3fbe UI: Confirmations Using Std::String
Refactor operator confirmations to use std::string, not char arrays.

Pull Request: https://projects.blender.org/blender/blender/pulls/117519
2024-01-25 19:55:18 +01:00