This is a nasty gathering of several issues, main one being that 'local
collections' of 3DViews are still updated immediately instead of the
deferred update used for all other viewlayer cases.
The change in a16bcb6576 led to internal references to the Scene's
master collection to become invalid, which is the expected behavior.
But this turns the Scene's view_layers into invalid state too.
Ideally, there should never be resync of viewlayers of a scene being
deleted anyways.
For now, take the (hopefully!) safe approach of explicitely forbidding
any viewlayer update during ID deletion process, and deferring it at the
end of the process.
Note that this change may also give some marginal gerformance
improvements in some rare edge cases (like deleting a very heavy scene
with many collections and 'local collection' 3DViews ?).
In paint modes, show a selector for the active canvas, similar
to how other editors (UV/Image, Nodes, Action) do it.
Available canvas in each mode:
* Weight Paint: Vertex Groups
* Vertex Paint: Color Attributes
* Texture Paint: Canvas (material, image)
* Sculpt Paint: Color Attributes, canvas in experimental sculpt paint)
Pull Request: https://projects.blender.org/blender/blender/pulls/111756
Add the features missing from #107176
* Irradiance integration.
* Self-shadows.
* Receive shadows from shadow maps.
Shadow tagging works by iterating all the froxels in a
compute shader and tagging the exact same position
that will be sampled by the volume scatter shader.
Froxels that are fully transmissive, have no scattering,
or are behind opaque geometry, are skipped.
It also adds a LoD bias parameter for shadow tagging,
driven by the volumetric tile size.
This works for punctual shadows, but directional lights
would need a way to support re-direction between levels
at sampling time, which is out of the scope of this PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/110809
Curve normal is not available in legacy particle hair system. Construct
a local coordinate system instead of using a fixed normal direction [1,
0, 0] to avoid black appearance.
Since hiding symbols on Linux, in many cases only addresses are printed.
This utility can run run on the back-trace to replace addresses
with line & function information.
See: ./tools/utils/addr2line_backtrace.py --help for usage information.
Note that some examples online run addr2line directly and use the output
in the stack-trace, while convenient and acceptable in some cases, in my
tests addr2line can take over 20 seconds to complete for a single
address. Implement this as a post-process instead. Multi-processing to
prevent this taking too long (around ~23 seconds on my system).
Ref !111416.
Change the behavior of transform and set-handle-type to operate on both
handles when the knot is selected.
This was an oversight in [0] which changed selection to select the knot
without the handles.
This makes curve bezier handles picking & transform match the Graph
Editor & grease pencil bezier curves.
This fixes issues transforming a bezier knot:
- Auto handles would be converted to "Aligned".
- Vector handles would be converted to "Free"
with the vector handles being left in-place.
Resolves#111840.
Details:
Selecting only the knot vertex was done because the tweak tool no longer
de-selects when picking an already selected vertex to allow tweak to be
used to transform the selection (instead of always de-selecting all
before tweaking). Without this change, dragging a single handle required
manually de-selecting the knot and the opposite handle (3 clicks to
select a handle before dragging). Selecting only the knot solves this
but means transform needs to support tweaking a vertex (& it's handles)
without it's handles selected.
See design #96544.
[0]: 618f39fca2
The handle selection should be ignored when hidden.
Now set handle type considers all handles selected when handles
are hidden and the knot is selected.
Selecting a gpencil bezier vertex and move it would change the handle
type when set to "Auto".
This happened because of a mismatch between transform flag use
and BKE_nurb_bezt_handle_test which would change the handle type
when only the vertex (knot) was selected.
Resolve by treating both handles as selected when the knot is selected.
Replace use_handles with an enum that optionally uses handles
except when the vertex (knot) is selected in which case it behaves
as if both handles are selected.
Needed for nurb curves not to change handle type when only the
center point is selected (as is done in the graph editor).
No functional changes.
The invisible button for the header covers the entire node width,
causing conflicts with the resize operator. Added a small margin to
ensure the button does not overlap with the node border.
Pull Request: https://projects.blender.org/blender/blender/pulls/112017
Node group sockets can be set to "both" for input/output, generating
two socket declarations in the same panel. Panel size was calculated
using only the items count, which is <= the actual declarations count.
This patch calculates actual declarations count as the panel size.
Panel size variable renamed to `num_child_decls` to distinguish from
`num_items`.
Pull Request: https://projects.blender.org/blender/blender/pulls/112013
Schlick's approaximation used by EEVEE is not accurate near `IOR == 1`,
especially when IOR is exactly one, there is no specular reflection and
the material should appear diffuse.
Cycles bypass the issue by lerping between the f0 and f90 color using
the factor derived from real Fresnel curve. In EEVEE we can use the same
trick as in Glass BSDF to smooth the transition at `IOR == 1`.
Note that at `IOR < 1` there is still mismatch, because f0 is prebaked
in the BTDF look up table. In the future if we color f0 using
`specular_tint`, we can split the table and use the BTDF LUT for the
specular component too.
Node drawing was adding some extra padding for each socket even when it
isn't visible. This patch makes the padding conditional on whether the
socket is visible and only when there is preceding items that require a
spacer.

Pull Request: https://projects.blender.org/blender/blender/pulls/111981
Node group interfaces for 4.0 are written to blend files as legacy data
to enable forward compatibility. This data is meaningless in 4.0, so if
a blend file contains it, the data should be freed right away. The
code for freeing legacy data was incomplete.
Pull Request: https://projects.blender.org/blender/blender/pulls/111989
An error in the key-map could cause the default keymap to be removed
leaving Blender without a default keymap.
Prevent the crash, even though Blender wont be usable in this state.
This issue specifically happend if sound playback is synchronized by
Audaspace. In this case render engine can't override current frame.
`BKE_sound_sync_scene()` should return NaN as when rendering is in
progress, however viewport render operator doesn't set `G.is_rendering`.
Pull Request: https://projects.blender.org/blender/blender/pulls/111946
The DJV installer does not add its executable to the PATH, but Blender
attempts to execute it using just "djv". This will not work.
Until DJV is able to address this we can fish out the full path from the
registry in the meantime.
Ref !111458
There are a couple of functions that create rna pointers. For example
`RNA_main_pointer_create` and `RNA_pointer_create`. Currently, those
take an output parameter `r_ptr` as last argument. This patch changes
it so that the functions actually return a` PointerRNA` instead of using
the output parameters.
This has a few benefits:
* Output parameters should only be used when there is an actual benefit.
Otherwise, one should default to returning the value.
* It's simpler to use the API in the large majority of cases (note that this
patch reduces the number of lines of code).
* It allows the `PointerRNA` to be const on the call-site, if that is desired.
No performance regression has been measured in production files.
If one of these functions happened to be called in a hot loop where
there is a regression, the solution should be to use an inline function
there which allows the compiler to optimize it even better.
Pull Request: https://projects.blender.org/blender/blender/pulls/111976
Refactor the Add menu in Texture Nodes, with manually created menus,
inspired by Geometry Nodes and more recently Shader and Compositor.
Minor sorting adjustments by splitting categories in groups, with
separators in between groups, and sorted alphabetically.
Unlike other node editors, this menu will not feature assets for the time
being. Doing so would add (more) burden of maintenance to a system
that is deemed end-of-life, and likely to be rewritten before long.
Part of #111746
Pull Request: https://projects.blender.org/blender/blender/pulls/111838
To reproduce build error, set `WITH_AUDASPACE` to `ON` in `blender_lite.cmake` and build using `make lite`.
The problem is that the function `AUD_Sound_equalize` is declared in `blender/extern/audaspace/bindings/C/AUD_Sound.h` within `WITH_CONVOLUTION` and not `WITH_AUDASPACE`.
Pull Request: https://projects.blender.org/blender/blender/pulls/111994
Use the common BVH utilities header for this.
Added a special type qualifier ccl_ray_data which is defined to ccl_private
for all platforms but Metal. On Metal it is defined to ray_data.
The tricky part is that the BVH utilities are wrapped into the Metal context
class. In some of the BVH functions the context has been already constructed,
but it wasn't done in all the callbacks.
From a quick render tests of the Junkshop benchmark scene there is no render
time difference,
No functional changes are expected.
Pull Request: https://projects.blender.org/blender/blender/pulls/111967