Declarations can use the `add_input_output` method to create a combined input/output socket. The drawing code supports moving sockets up one vertical slot to align them with the predecessor.
Closes#112235
Pull Request: https://projects.blender.org/blender/blender/pulls/112250
because it contains reflectance and transmittance, so BSDF would be a
morep proper name.
Also rename BSDF to BRDF at places where only reflectance is returned.
the `refract()` function require the relative IOR of the media where V
is in to the media where L is in. Because this only affects the
visibility term, the difference is quite small
There was code to vertically offset layouts in header-like regions to
ensure widgets are centered properly. It wasn't clear why this was
necessary so far. I noticed this is region alignment dependent though:
The offset is only needed when the upper region edge matches the upper
area edge. I'm not entirely sure if it is the edge drawing or a slightly
smaller drawable surface of the region (clipped to be 1px less than the
area height), think it is the latter. But either way, this offsetting
makes a lot more sense now. Fix is to only apply the offset for regions
sharing the upper edge with the area. Edges at the window differ a bit,
so the offset is not applied there.
Fixes the slightly off vertical positioning of widgets in the asset
shelf header.
As people have pointed out, the changes to key drawing
in #106052 are not ideal under all conditions.
The fact that an X is drawn to indicate a key
can't be manipulated adds too much noise
on dense data and is generally confusing.
To combat that, the drawing style changed it back to dots,
but this time in gray ( the same color as disabled curves)
and slightly smaller.
This was discussed in the A&R module meeting on 2023-09-07
Pull Request: https://projects.blender.org/blender/blender/pulls/111986
When subframes were enabled, and the time cursor was at a subframe position,
the keying would still insert the key at the full frame.
This was because the value passed to the key insertion
functions was just the full frame value and not the subframe part.
Fixing it by using `BKE_scene_frame_get()` which
returns the floating point frame including the subframe part.
I've added unit tests to ensure that inserting keys at subframe values doesn't cause issues.
Pull Request: https://projects.blender.org/blender/blender/pulls/112131
In the animation editors, show the FCurve Modifier toggle widget (the
wrench) as 'inactive' when the FCurve has no modifiers on it. Previously
the (lack of) existence of FCurve modifiers was not reflected in the
wrench icon at all.
Note: this only affects FCurves, and not FCurve *Groups*.
Pull Request: https://projects.blender.org/blender/blender/pulls/106214
Calling an API function after the node panels patch does not internally
tag the node tree with `NTREE_CHANGED_INTERFACE` any more, because the
node tree is not directly accessible from `bNodeTreeInterface`. Before
node panels the API functions for interfaces could tag the tree directly
for later update consideration, which now requires explicit tagging
calls.
The fix is to add a flag and mutex directly to `bNodeTreeInterface`, so
API methods can tag after updates. This mostly copies runtime data
concepts from `bNodeTree`. The `ensure_interface_cache` method is
equivalent to `ensure_topology_cache` and should be called before
accessing `interface_inputs` and similar cache data.
Pull Request: https://projects.blender.org/blender/blender/pulls/111741
The first keyframe's handle wasn't drawn due to the recent optimizations.
This PR fixes the issue by moving `prevbezt` out of the loop again.
That is needed due to the checks in within the loop having special cases
for the first loop where `prevbezt` is a `nullptr`
Was caused by #112126
Pull Request: https://projects.blender.org/blender/blender/pulls/112365
These group nodes currently don't have a socket declaration for every socket.
Instead we just don't touch the sockets at all so that things have not changed
when the node group is found again.
There were two issues:
* The check for conflicting AOVs was done after the Render Layer node
was updated. This led to an unexpected state in the node.
* The check for conflicting AOVs did not work, because AOVs that already
had the conflict-flag set were ignored.
When the auto-close preference is enabled & brackets or quotes are
entered with a selection, the selection is surrounded by those
characters - instead of replacing the selection.
Match functionality from visual-studio code.
Ref !111900.
Previously when there were 5 or more menu items in a pie menu
the acceptable angle to select an item was limited to 45 degrees.
This makes sense when all 8 menu items are set, however it unnecessarily
restricts the range for menu items that don't have adjacent items.
Resolve using a 90 degree angle range then checking of the adjacent
buttons exist and are a better match.
This also resolves a very small dead-zone between adjacent buttons
for both 4 or 8 button pie menus. It was possible for a direction to
select neither. Compare the direction enum as a tie breaker.
Ref !112311.
When evaluating emission, no closures can be allocated, so the existing code
would end up returning albedo 1.0, which then caused the layering code to set
the weight of lower layers to zero.
SVM doesn't do this, neither does the OSL testrender from what I can tell, and
in other cases we already handle the inversion on the OSL side if needed.
In this case it didn't cause any problems however macros with a
BEGIN/END must always run both, not optionally run based on knowledge
of the iterator implementation cleanup requirement.
The recent change to the 'Add Modifier' created at least two issues:
* A complete duplicate of UI info for each modifier (its name and icon),
now existing in both the RNA enum definition of modifiers types, and
in the pyhton UI code.
* An implicit duplication of these UI names in two different translation
contexts, since the ones from the enum use the default one, while
explicit labels passed to the `layout.operator` UI API get assigned a
default 'operator' context. See PR !112246 for details about this.
Both issues can be easily solved by making the new python code for these
menus a bit smarter. Adding a helper function that adds the `add_modifier`
operator with the right parameters, just based on the operator type.
Both names (labels) and icons can be found in the enum property
`bl_rna` definition itself then.
This change:
* Avoids duplicating UI info.
* Fixes translation context mismatch, by forcing the usage of the
default one also from the python code.
* Makes code less verbose and overall more readable.
NOTE: An attempt has been made to use the `get_name` callback of
operator types to automatically return the right name based on the
defined type, but this is currently utterly failing with regular
layout-based UI code. This will be reported and handled separately.
Pull Request: https://projects.blender.org/blender/blender/pulls/112252
* Fix#112284 and other non-reported sculpt-related regressions in the
new Workbench.
* Cleanup ObjectState setup.
* Update `sculpt_batches_get` to support getting per material batches
while passing SculptBatchFeatures.
* Make material indices 0 based in Workbench.
Pull Request: https://projects.blender.org/blender/blender/pulls/112344
Instead of four discrete thumbnail sizes, allow the user to instantly
zoom to any integer size from 16-256. This also changes the default to
96 from the current 128.
Pull Request: https://projects.blender.org/blender/blender/pulls/105815
This patch updates the experimental MetalRT code path to use new [curve primitives](https://developer.apple.com/videos/play/wwdc2023/10128/) which were recently added in macOS 14. This replaces the previous custom box intersection implementation, allowing the driver to better optimise curve acceleration structures for the GPU. On existing hardware, this can speed up MetalRT renders by up to 40% for scenes that use hair / curve primitives extensively.
The MetalRT option will only be available on macOS >= 14, and requires Xcode >= 15 to build (otherwise the option will be compiled out).
Authored by Marco Giordano, Michael Jones, and Jason Fielder
---
Before / after render times (M1 Max MacBook Pro, macOS 14 beta, MetalRT enabled):
```
Custom box intersection MetalRT curve primitives Speedup
fishy_cat 111.5 80.5 1.39
koro 114.4 86.7 1.32
sinosauropteryx 291.8 279.2 1.05
spring 142.3 142.2 1.00
victor 442.7 347.7 1.27
```
---
Pull Request: https://projects.blender.org/blender/blender/pulls/111795
Any action that triggered the key-map to be rebuilt causes the key-map
UI to display freed data.
Recently key-map refreshing happens during transform, while this should
be resolved - it's still good to avoid a crash in this situation as it's
possible scripts perform actions that tag the key-map to be rebuilt
which is out of our control.
Add a utility function to clear all key maps from a key configuration.
This allows the add-ons key-config to be cleared so the exported
configuration wont include add-on keymap items,
needed for bl_keymap_validate.py to properly compare the
exported key-map with the data in:
./scripts/presets/keyconfig/keymap_data/blender_default.py