Commit Graph

120055 Commits

Author SHA1 Message Date
Clément Foucault
beb8ec4fe1 Fix: EEVEE: Wrong subsurface sample distribution
The sample distribution was biased toward 0, which
created sharper details than expected.

However the downside is that the subsurface is now
more jittery because of the low amount of samples.
2024-07-01 19:55:01 +02:00
Jesse Yurkovich
453d55b1c4 Merge branch 'blender-v4.2-release' 2024-07-01 10:12:35 -07:00
Jesse Yurkovich
2eec6a819e Fix: Add missing thin film parameters to MaterialX export
Wire up the new Principled BSDF thin-film inputs when building
MaterialX graphs.

Pull Request: https://projects.blender.org/blender/blender/pulls/123613
2024-07-01 19:08:56 +02:00
Hans Goudey
159502ff8d Cleanup: Sculpt: Move multiplane scrape file to brush folder 2024-07-01 10:41:30 -04:00
Miguel Pozo
ed17e7c0c6 Merge branch 'blender-v4.2-release' 2024-07-01 16:40:29 +02:00
Miguel Pozo
4c314f9a78 GPU: Add --gpu-compilation-subprocesses cmd setting
Allow overriding the `max_parallel_compilations` from the command
line.
Disable compilation subprocesses on RenderDoc sessions.

Pull Request: https://projects.blender.org/blender/blender/pulls/123995
2024-07-01 16:36:01 +02:00
Hans Goudey
bec350ba6e Tests: Simple automated sculpt brush stroke performance test
As an initial step to creating automated regression tests for sculpt brushes,
make our existing performance test script into an automated performance
test. The test uses the brush active in each file and runs the brush stroke
operator on a large generated grid. The time is just for the brush evaluation,
it doesn't include building the PBVH, drawing, etc.

I'm not sure about the consequences of conditionally disabling
`view3d_operator_needs_opengl`, but it was needed to make the test
work in background mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/123148
2024-07-01 16:12:02 +02:00
Hans Goudey
057fdf4224 Fix: Sculpt: Dynamic topology restore from undo doesn't work
We don't push individual nodes for undo, checking for an undo node
wasn't correct.
2024-07-01 10:02:06 -04:00
Lukas Stockner
87159b2871 Cycles: Add Diffuse Roughness option to Principled BSDF
Setting this option to a value above zero replaces the lambertian Diffuse term
with the modified energy-preserving Oren-Nayar BSDF, which matches the OpenPBR
behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/123616
2024-07-01 15:49:09 +02:00
Miguel Pozo
4a15bfe849 Merge branch 'blender-v4.2-release' 2024-07-01 15:48:28 +02:00
Miguel Pozo
2b248d2720 Fix #123207: EEVEE: Disable motion blur on camera change
Pull Request: https://projects.blender.org/blender/blender/pulls/123919
2024-07-01 15:47:10 +02:00
Campbell Barton
ec5c7b9519 Merge branch 'blender-v4.2-release' 2024-07-01 23:34:23 +10:00
Bastien Montagne
9994fbece5 Refactor: VSE: Use new 'PartialWriteContext' class to generate the copy buffer.
This replaces the usage of the old `BKE_blendfile_write_partial` API by
the new `PartialWriteContext` class, in the code generating the 'copy
buffer' blendfile used for copy-pasting video sequences.

This is an interesting example of advanced/complex ID dependencies
handling with the new `PartialWriteContext`, as the 'main. scene storing
VSE data needs to be created (instead of copying the existing scene),
and then the ID dependencies of its sequences need to be filtered based
on their types.

There is no behavioral changes expected here.

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

Pull Request: https://projects.blender.org/blender/blender/pulls/123993
2024-07-01 15:30:17 +02:00
Bastien Montagne
96198e88e1 Refactor: BPY: make 'libraries.write' code use the new PartialWriteContext class.
This makes code behind the `bpy.data.libraries.write()` API use the new
`PartialWriteContext` class, instead of the old
`BKE_blendfile_write_partial` API.

NOTE: This also means that the `blendfile_io` tests using this python
API are now using the new class.

No behavioral changes are expected here.

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:28:15 +02:00
Bastien Montagne
3d5d572db6 Core: Rewrite of 'partial blendfile write' feature.
This commit introduces a new `PartialWriteContext` class, which wraps
around a regular Main struct. It is designed to make writing a set of
IDs easy and safe, and to prepare for future 'asset library editing'
low-level code.

The main goal of this refactor is to provide the same functionalities
(or better ones) than existing partial write code, without the very
bad hacks currently done.

It will replace within the coming weeks all current usages of the
`BKE_blendfile_write_partial` API.

Essentially, it allows to:
* Add (aka copy) IDs from the G_MAIN to the partial write context.
  * This process handles dependencies and libraries automatically.
  * A refined handling of dependencies is possible through an optional
    'filtering' callback.
* Keep track of added IDs, to allow de-duplication in case data is added
  more than once.
* Cleanup the context (i.e. remove unused IDs).
* Write the context to disk as a blendfile.

Since the context keeps information to find matches between its content
and IDs from the G_MAIN, its lifespan is expected to be _very_ short.
Otherwise, changes in G_MAIN (relationships between IDs, their session uid,
etc.) cannot be tracked by the context, leading to inconsistencies.
A partial write context should typically be created, filled, written and
deleted within a same function.

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:27:54 +02:00
Bastien Montagne
b658087710 Core: Add a new util to clear an IDNameLib_Map.
Also make ID pointer parameter passed to `BKE_main_idmap_remove_id`
const.

There is no behavioral changes expected from that commit.

This is a requirement for incoming rewrite of the PartialWrite code
(see #122061 and !122118).

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:27:49 +02:00
Bastien Montagne
f1c2a93623 Refactor: Core: BKE_main: init/clear code.
This commit allows to initialize and clear a Main struct which
allocation is handled separately.

There is no behavioral change expected from this commit.

This is a requirement for incoming rewrite of the PartialWrite code
(see #122061 and !122118).

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:26:58 +02:00
Bastien Montagne
8f8c825196 Core: BKE_lib_id: Make local: Add new option to force making indirect data local.
The new `LIB_ID_MAKELOCAL_INDIRECT` option will force indirectly linked
data to also be made local. Note that this was already the case when a
whole library was made local.

Also some cleanup of options for 'make local', and pass
`IDWALK_IGNORE_MISSING_OWNER_ID` to the ID copying code for ID
management, since typically the owner pointer of embedded IDs at that
point is not yet set to its valid value.

There is no behavioral changes expected from this commit (even though
technically it does affect existing ID copying's behavior, there should
be no change in practice).

This is a requirement for incoming rewrite of the PartialWrite code
(see #122061 and !122118).

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:26:37 +02:00
Bastien Montagne
ce84e5f1a2 Core: Make Library IDs copyable.
There is no behavioral change expected from this commit.

This is a requirement for incoming rewrite of the PartialWrite code
(see #122061 and !122118).

Pull Request: https://projects.blender.org/blender/blender/pulls/122118
2024-07-01 15:26:31 +02:00
Clément Foucault
d4774a219b Fix: EEVEE: Missing light tiles in light probes
This was caused by the light culling system not
allocating enough tiles to cover the sphere lightprobe
render target.

Taking the max size between the lightprobe target and
the film fixes the issue.

Fixes #117444
2024-07-01 15:04:53 +02:00
Hans Goudey
cd134c30d1 Cleanup: Sculpt: Remove redundant PBVH node variable 2024-07-01 08:21:49 -04:00
Hans Goudey
1e3dc838d9 Cleanup: Sculpt: Use accessors for PBVH node vertex indices
Makes it easier to search for where these are used (and whether it's
the unique or shared vertices being accessed).
2024-07-01 08:21:49 -04:00
Hans Goudey
2e36675dec Fix: Sculpt: Incorrect access of shared PBVH node vertices
Tools should generally only process vertices owned by the current
PBVH node rather than vertices owned by other nodes.
2024-07-01 08:21:49 -04:00
Hans Goudey
7c17339749 Refactor: Sculpt: Specialize expand mask update per PBVH type
Part of #118145.
Duplicate the function three times so it can be implemented specifically
for each data structure. The duplication can be reduced in the future by
using the same methods as the sculpt brush refactor.

This also fixes the incorrect usage of `PBVH_ITER_ALL`, which doesn't
just also iterate over hidden vertices like was probably intended, but also
processes vertices shared between different PBVH nodes multiple times,
one for each node they're contained in.
2024-07-01 08:21:49 -04:00
Sybren A. Stüvel
bf3dd9a743 Anim: add type assertion to graph editor function
In `graph_refresh_fcurve_colors()`, add an assertion that the
`bAnimListElem` data is actually an F-Curve before casting it to one.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123987
2024-07-01 13:44:29 +02:00
Sybren A. Stüvel
dc2fa02f00 Cleanup: Anim, add documentation to Binding::name_without_prefix()
Just some extra documentation that this is also known as the "display name".

No functional changes.
2024-07-01 13:44:28 +02:00
Miguel Pozo
df0ca5382c Merge branch 'blender-v4.2-release' 2024-07-01 13:41:58 +02:00
Miguel Pozo
635db22ca6 Fix: Re-apply versioning made for EEVEE-Next in 4.1
Pull Request: https://projects.blender.org/blender/blender/pulls/123909
2024-07-01 13:37:48 +02:00
Omar Emara
0e1af55247 Merge branch 'blender-v4.2-release' 2024-07-01 13:30:33 +03:00
Omar Emara
e545c814a4 Fix: Scene not rendered even with Cryptomatte node
Blender doesn't render the scene even though a Cryptomatte node exists.
That's because Blender only considers Render Layer nodes, but
Cryptomatte node can reference scenes as well. This patch fixes that by
putting Cryptomatte nodes into consideration.

Pull Request: https://projects.blender.org/blender/blender/pulls/123814
2024-07-01 12:28:24 +02:00
Sybren A. Stüvel
2536b7dee4 Anim: Remove F-Curve modifier type 'Filter'
The 'Filter' F-Curve modifier type was never actually implemented, so
it's now properly removed from the code.

The enum entry `FMODIFIER_TYPE_FILTER` in `DNA_anim_types.h` is kept, so
that it's clear that this once existed (which explains what would
otherwise be a hole in the values of the enum entries).

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123906
2024-07-01 12:27:13 +02:00
Sybren A. Stüvel
469762fb6b Anim: do not visit every F-Curve in bke::action_foreach_id()
Avoid looping over all F-Curves in `bke::action_foreach_id()`. This was
only necessary to support the possible ID* in custom properties on the
Python F-Curve modifier, but that modifier has been removed in the
preceeding commit.

Even though `BKE_fcurve_foreach_id()` exists, it is only relevant for
drivers, but the F-Curves stored in an Action are always just animation
data, not drivers.

No functional changes intended.

Pull Request: https://projects.blender.org/blender/blender/pulls/123906
2024-07-01 12:27:08 +02:00
Sybren A. Stüvel
6b3a4cbf46 Anim: Remove F-Curve modifier type 'Python'
Remove all traces in the source code of the never-properly-implemented
'Python' F-Curve modifier type. It was introduced in 44e5b7788b.

This modifier was never coded to completion, couldn't be created, didn't
have a GUI, and probably would have caused severe performance issues if
it were ever implemented.

Not only that, but the modifier had space for custom properties
(IDProperties), which means that it could point to any ID. This in turn
means that `bke::action_foreach_id()` would have to loop over every
F-Curve and every F-Curve modifier to handle such relations. By removing
this modifier type, that loop can also be removed from that function.

Note that F-Curves can only refer to other IDs when they are used as a
driver. However, the F-Curves stored in an Action as animation data are
never drivers.

`BKE_fcurve_foreach_id()` is now only relevant when the F-Curve is a
driver, which I've added to its documentation.

The enum entry `FMODIFIER_TYPE_FILTER` in `DNA_anim_types.h` is kept, so
that it's clear that this once existed (which explains what would
otherwise be a hole in the values of the enum entries).

No functional changes should be observable by Blender users, as this
feature doesn't seem to have ever existed in a way that could be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/123906
2024-07-01 12:27:08 +02:00
Sybren A. Stüvel
43c1a8958b Cleanup: Anim, make fmods_init_typeinfo() a bit safer
Instead of using hard-coded array indices that happen to match the
`FMODIFIER_TYPE_...` enum values, actually use the enum items.

Also add some assertions that those indices actually match the type
numbers declared by the `FModifierTypeInfo` structs.

To avoid rewrapping long lines, remove comments that basically repeat
the code anyway.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123906
2024-07-01 12:27:08 +02:00
Jeroen Bakker
9f53f3b600 OpenGL: Disable Stencil Export when forcing workarounds
When forcing workarounds the stencil export support wasn't disabled.
This PR disables stencil export support when forcing workarounds.

Pull Request: https://projects.blender.org/blender/blender/pulls/123985
2024-07-01 12:19:26 +02:00
Miguel Pozo
fa03b6f3ba Merge branch 'blender-v4.2-release' 2024-07-01 12:04:05 +02:00
Miguel Pozo
f16fdcfc85 Fix #123794: Crash when UDIMs have gray and color tiles
Don't use grayscale data for color UDIM arrays.

Pull Request: https://projects.blender.org/blender/blender/pulls/123905
2024-07-01 12:02:28 +02:00
YimingWu
41da774dd0 Fix #123966: Don't draw orientation for objects displayed as wire
When `object.dt` is OB_BOUNDBOX or OB_WIRE, it's not expected to see
faces so don't show face orientation overlay for them.

Pull Request: https://projects.blender.org/blender/blender/pulls/123978
2024-07-01 10:58:01 +02:00
Omar Emara
862028f4dc Compositor: Refactor GPU Cryptomatte node
Currently, the Render mode of the GPU Cryptomatte mode extracts the
Cryptomatte layers based on information in the RenderResult of the
scene. This means the node will not work if no RenderResult exists,
which is typically the case for the viewport compositor, and especially
after #123378.

To fix this, we simply acquire the passes directly from the appropriate
view layer based on the node's layer name. The render compositor context
implementation will handle the extraction from the RenderResult, while
the viewport compositor will just return the DRW passes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123817
2024-07-01 10:50:05 +02:00
Campbell Barton
14a2e933f4 Merge branch 'blender-v4.2-release' 2024-07-01 15:16:48 +10:00
Campbell Barton
67ddb0e1a5 Extensions: detect external changes on startup & loading preferences
Changes to an extensions manifest weren't accounted for.
This was particularly a problem for "System" extensions which aren't
intended to be managed inside Blender however the problem existed for
any changes made outside of Blender.

Now enabled extensions are checked on startup to ensure:

- They are compatible with Blender.
- The Python wheels are synchronized.

Resolves #123645.

Details:

- Any extension incompatibilities prevent the add-on being enabled
  with a message printing the reason for it being disabled.

- Incompatible add-ons are kept enabled in the preferences to avoid
  loosing their own preferences and allow for an upgrade to restore
  compatibility.

- To avoid slowing down Blender's startup:

  - Checks are skipped when no extensions are enabled
    (as is the case for `--factory-startup` & running tests).
  - Compatibility data is cached so in common case,
    the cache is loaded and all enabled extensions `stat` their
    manifests to detect changes without having to parse them.
  - The cache is re-generated if any extensions change or the
    Blender/Python version changes.

- Compatibility data is updated:

  - On startup (when needed).
  - On an explicit "Refresh Local"
    (mainly for developers who may edit the manifest).
  - When refreshing extensions after install/uninstall etc.
    since an incompatible extensions may become compatible
    after an update.
  - When reloading preferences.

- Additional info is shown when the `--debug-python` is enabled,
  if there are ever issues with the extension compatibility cache
  generation not working as expected.

- The behavior for Python wheels has changed so they are only setup
  when the extension is enabled. This was done to simplify startup
  checks and has the benefit that an installed but disabled extension
  never runs code - as the ability to install wheels means it could
  have been imported from other scripts. It also means users can disable
  an extension to avoid wheel version conflicts.

  This does add the complication however that enabling add-on which is
  an extension must first ensure it's wheels are setup.
  See `addon_utils.extensions_refresh(..)`.

See code-comments for further details.
2024-07-01 15:08:14 +10:00
Clément Foucault
3e867a75c1 Merge branch 'blender-v4.2-release' 2024-06-30 23:20:46 +02:00
Clément Foucault
549024b1cc Fix: EEVEE: Broken shadows
Was caused by an invalid check.

Fix #123959
2024-06-30 23:17:25 +02:00
Jesse Yurkovich
20ecdd628d Merge branch 'blender-v4.2-release' 2024-06-30 12:07:24 -07:00
Charles Wardlaw
783fa03d9a Fix #122651: USD Export: Use solid color texture for DomeLights
When the World material has no texture input, create a solid color .hdr
texture from the Background color instead. This is currently requried
for the Hydra Storm render engine[1]

[1] https://forum.aousd.org/t/usdluxdomelight-without-a-texture-file-attribute/1573

Co-authored-by: kiki <charles@skeletalstudios.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/123933
2024-06-30 21:06:11 +02:00
Clément Foucault
de7e3f992b Merge branch 'blender-v4.2-release' 2024-06-29 22:43:49 +02:00
Clément Foucault
53cb73ecea Fix: EEVEE: Depth Of Field: Tile artifact on noisy input
This was caused by the denoiser of the slight out of focus
pass having too much influence at low CoC values.

Making the transition start at 0.5 fixes the issue.

Fixes #123822
2024-06-29 17:08:14 +02:00
Clément Foucault
49491bc541 Fix: EEVEE: Light: Invalid read in Shadow Setup shader
This happened in scenes with high light count and
with some local light being culled.

The culled lights indices would still be processed
and load undefined data. This undefined data
might be interpreted as a sunlight and go into
the cascade setup loop with an undefined number
of levels.

This created loops of 1 billion iteration per thread
which triggered the TDR on windows.

The fix is to skip the culled light indices.

Fixes #123413
Fixes #123190
2024-06-29 15:35:59 +02:00
Falk David
d90675e662 GPv3: Draw Tool: Write start time and delta time attributes
This writes the `init_time` curve attribute and the `delta_time`
point attribute.
These are used by the build modifier in the "natural drawing speed"
mode to mimic the actual speed at which the stroke was drawn.

Pull Request: https://projects.blender.org/blender/blender/pulls/123899
2024-06-29 09:05:47 +02:00
Hans Goudey
4162aeee5f Fix: Sculpt: Incorrect undo behavior with modifiers and new brush code
The new brushes don't update `SculptSession::orig_cos` (which is good, it's
not necessary since it's just a copy of the active shape key data or the original
mesh's vertex positions). To fix the problem with the undo system, access those
two arrays directly instead. Once all the uses of the "proxy" system are removed,
`orig_cos` can be removed too.

Pull Request: https://projects.blender.org/blender/blender/pulls/123922
2024-06-28 22:15:23 +02:00