Thickness modifier ported to Grease Pencil v3.
Note: Uniform thickness range and UI step changed to better
match new thickness of blender unit.

Pull Request: https://projects.blender.org/blender/blender/pulls/117631
Current method only considers first selected collection in the outliner
tree. This restricts user from selecting objects of multiple selected
collections. To fix this, first gather all the selected collections in
list with the help of `outliner_collect_selected_collections` traverse
function. Then iterate through layer collections to select base/objects
Pull Request: https://projects.blender.org/blender/blender/pulls/113831
Simplify `animviz_verify_motionpaths()` as the current code structure
got in the way of me reviewing an addition to it.
Some conditions and calculations are reordered so that they don't have
to be repeated. This allowed me to reduce nesting of the code, and make
it easier to understand when exactly a motion path is reused
cache-and-all, when it's reused but gets a new cache, and when it's
freshly allocated.
I also think this removes a theoretical memory leak, as there was a code
path that would allocate a new cache without freeing the old one. This
would require a somewhat invalid data structure to begin with, but the
code path now simply doesn't exist any more. I don't think this
problematic code path was ever hit in normal use, though.
No actual functional changes.
This allows users to turn off reflective and refractive caustics
separately from each other when using the Generalized Schlick material.
This will impact the Principled BSDF and Glass BSDF, along with some
custom OSL scripts.
Pull Request: https://projects.blender.org/blender/blender/pulls/117617
When a string shouldn't be used or is invalid, use std::nullopt to
make it clear it's value shouldn't be used.
Without this it's possible to accidentally use an empty string
which will silently fail.
This pull request adds the ability for users to specify input samples
on a per brush basis. The existing field in the main `Paint` struct
forces all brushes of a particular tool type to use the same value.
A new field was added to the `Brush` struct to allow for this value
to be specified there instead, and a corresponding unified value in
`UnifiedPaintSettings` has been created to allow users to use the
same value across all brushes.
Addresses #108109
Pull Request: https://projects.blender.org/blender/blender/pulls/117080
Add separate functions that deal with the vertex domain and copy vertex
groups without using the attribute API which has a large overhead when
abstracting the access of many vertex groups.
In a 1m vertex mesh with 20 vertex groups, I observed an improvement
in the node's runtime from 399 ms to 64 ms.
Also resolves#117553. That was an error when adding weight data to a
mesh without any weight data would invalidate custom data layers. That
is solved more simply now by just doing nothing in that case.
Part of changes proposed in #117285.
Unfortunately layout panels aren't supported in popovers, so this has
been worked around using a kludge that stores the expanded state as a
class member, toggled via "wm.context_toggle".
For some reason the "get" function actually allocates the button's
operator properties container. This may or may not make sense to
do, but while it happens, the function name might as well make
that clear.
There is extra one user of shared enum definition in case this is new one
so already exist user is enough. Also using of `new` operator to construct
enum definition make this impossible to catch such leask for trivial type.
`Vector` have 4-element inline buffer so this was trivial case for <=4 items.
Pull Request: https://projects.blender.org/blender/blender/pulls/117599
Removal of "confirm" operator callback for confirmation customization,
in favor of new method that shares existing operator dialog code and
allows python configuration.
Pull Request: https://projects.blender.org/blender/blender/pulls/117564
Part of overall "improve filtering situation" (#116980): replace Subsampled3x3
(added for blender 3.5 in f210842a72 et al.) strip scaling filter with a
general Box filter.
Subsampled3x3 is really a Box filter ("average pixel values over NxM region"),
hardcoded to 3x3 size. As such, it works pretty well when downscaling images by
3x on each axis. But starts to break down and introduce aliasing at other
scaling factors. Also when scaling up or scaling down by less than 3x, using
total of 9 samples is a bit of overkill and hurts performance.
So instead, calculate the amount of NxM samples needed by looking at scaling
factors on X/Y axes. Note: use at least 2 samples on each axis, so that when
rotation is present, the result edges will get some anti-aliasing, just like it
was happening in previous filter implementation.
Images in PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/117584
This patch changes all anti-aliasing operations to use SMAA instead of
the Scale3x-based operation. That's because SMAA is more accurate while
the Scale3x one is more a hack.
The Lighten mix mode in the Mix RGB node is wrong for factors less than
one. The lighten blend mode is a simple component-wise maximum in EEVEE,
Cycles, and other implementations. While the compositor seems to define
it as a weighted maximum using the factor as the weight. It should be
noted that its Darken counterpart is correctly implemented for the same
node, so Lighten should follow, which this patch do.
GPU compositor shares the EEVEE code, so it is already correct.
Pull Request: https://projects.blender.org/blender/blender/pulls/117630
Reduce cognitive complexity of `ui_but_anim_flag()`. Early returns, less
indentation, and variable declarations close to where they are used.
No functional changes.
This pull request adds the ability for the `propagation_steps` value
for certain automasking settings to be applied globally instead of
using the per-brush attribute.
Previously, while the flag settings were stored at the brush and global
level, the `propagation_steps` value would always change the brush
attribute even when using the global menu.
Addresses #102377
Pull Request: https://projects.blender.org/blender/blender/pulls/117316
Add silently fail option to GPU based render tests. This is a pre-requisite to enable
render tests on the buildbot. By default these render tests will pass silently.
* Test will pass when using the `--pass-silently` arguments.
* Only crashes will be reported as failed tests.
* To find out failing test, review the test reports.
`WITH_GPU_RENDER_TESTS_SILENT` compile option can be used to let tests pass (default)
or fail (default for developers).
Although some tests fail, they still passed. In the generated render report,
the silently passed failures are correctly reported to be failures.
Pull Request: https://projects.blender.org/blender/blender/pulls/117629
Connecting an empty menu to the node group inputs causes a memory leak.
The `id_property_int_update_enum_items` function was always allocating
a new `enum_items` list, but then discarding it if there are no enum
items.
In the M/Shift+M popup menus (3D viewport, armature pose/edit mode),
disable menu items for operators that are owned by a linked armature.
You can only (un)assign bones to local bone collections (so local armature
or added via local library override).
`add_or_move_to_collection_bcoll()` already checked for linked collections,
but the caller didn't properly do a `nullptr` check. Adding that check
fixed the crash.
The next commit will actually disable the menu for such collections, so
that it's clear in the UI that it cannot work.