If the scene is currently set to a Video media type and the user uses
the Save Image As operator, the Media Type in the operator will be
empty. That's because the image saving format is initialized based on
the scene format, but image saving does not support videos, so the enum
is invalid in that context.
This issue already existed before the introduction of media types, but
it happened for the file format field directly.
To fix this, we default to an image type if the scene is set to a video.
Pull Request: https://projects.blender.org/blender/blender/pulls/143549
This PR changes the uses of `PBONE_SELECTED` and all the
places where it *should* have been used
with a new function `bone_is_selected` or `...editbone`
and `...pose_bone` specializations.
No functional changes intended.
Do note that there are still places in the code
where this function should probably be called,
but this PR is very careful not to change any behavior,
even if the current behavior is probably wrong.
In preparation for storing pose bone selection state
on the `bPoseChannel`
Related to #138482
Pull Request: https://projects.blender.org/blender/blender/pulls/139496
Deprecation meta-data support for RNA properties.
- Properties may have a deprecated note and version.
- Warnings shown when these are accessed from Python.
- A note is included in the generated documentation.
Support for marking functions as deprecated can be added in the future.
Ref !139487
Show warnings for debug builds or when `--debug-python` is passed in.
Without this, only scripts running in the `__main__` namespace
show warnings - hiding warnings for almost all scripts & add-ons.
This is also needed so deprecation warnings can be shown, see !139487.
When trying to capture an asset preview screenshot of the 3D viewport while in
Cycles render preview mode, the screenshot would not capture any geometry.
It turns out the function used (`ED_view3d_draw_offscreen_imbuf`) is not useful
for cycles because it doesn't give cycles time to render.
Instead of having cycles rendering, potentially taking a long time, we fall back to
a direct screencapture.
This has the disadvantage that the background will not be transparent in this case,
but this is a limitation we can document.
Also, instead of only excluding Cycles, I chose to include only EEVEE. That way,
things will work even when using 3rd party render engines.
Pull Request: https://projects.blender.org/blender/blender/pulls/142241
Makes the File Output node panel similar to the Render Output node.
Instead of a dropdown, color management enum property expanded in UI.
Color management settings are now moved inside a panel.
Add/remove file subpapth buttons moved to the side of UIList.
Resolves#133501
See images in PR description for visual changes.
Pull Request: https://projects.blender.org/blender/blender/pulls/133747
Resolve an error in `BLI_convexhull_2d` where *almost* overlapping
points could result in the hull including *concave* points.
This tended to happen with larger polygons in the range of 100-500.
The regression is likely caused by [0] since this optimization
relies on the input not having any concave coordinates.
[0]: 888c4d0766
`AttributeIter::get()` could potentially use the `accessor` field
which wasn't set for curves or mesh vertex groups. "is_builtin"
can also be explicitly set for this case.
Recursive downsample was only used by workbench DoF
which can be expressed using mip view instead.
The mip render workaround was creating GL error on startup
and is not needed anymore.
Pull Request: https://projects.blender.org/blender/blender/pulls/143246
Currently, bundles can only store socket values of Geometry Nodes. However, it
can make sense to store other kinds of data too. Specifically, this patch adds
support for storing arbitrary internal data in a bundle. This is useful when
storing e.g. the physics world when implementing a proper physics solver for
Geometry Nodes (like in #143171).
One can still see that the data exists in Geometry Nodes in the tooltip, but one
can't extract it. Built-in nodes can still read that data.
Storing built-in data in bundles can also be done as an alternative to having a
new "internal data socket" as we talked in a workshop in the past:
https://code.blender.org/2024/11/geometry-nodes-workshop-october-2024/#internal-data-sockets
A bundle still has to be copyable. Internal data is expected to use implicit
sharing. That way copying it just requires increasing the user count of the
data.
Pull Request: https://projects.blender.org/blender/blender/pulls/143472
Histogram was calculated by copying the rendered image, transforming it
into display space, and calculating the histogram on that. On large
resolutions, this copy+transform+free of the temporary image was taking
up majority of the time. Especially for default use case when the
display transform is a no-op.
Change the code so that display transform, if needed, is done directly
inside histogram calculation, without needing a full-size temporary image.
Performance of histogram calculation, on Ryzen 5950X (Windows), on
a 4K resolution image, with default color management settings:
- PNG (SDR): 3.9 -> 0.9ms
- EXR (HDR): 41.3 -> 6.3ms
With display colorspace (P3) that is different than the sequencer
colorspace (sRGB):
- PNG (SDR): 25.3 -> 11.3ms
- EXR (HDR): 64.9 -> 10.6ms
It also fixes calculation of histogram on float (HDR) images that have
alpha channel; the histogram was wrongly calculated on premultiplied
color values, which was not consistent with how it was calculated
on the byte images.
Pull Request: https://projects.blender.org/blender/blender/pulls/143175
Passing the current enum value as a float to the "min" argument
doesn't seem to do anything. It's also the only place that the min
and max arguments to `uiDefIconTextBut` are used.
When transforming a geometry, we often apply the transposed inverse
to normals / custom normal data. However, that matrix can still contain
scale from the original matrix. That scale has to be removed so we can
avoid also scaling the normals.
I used the opportunity to remove the duplication between mesh and curves
processing of the custom normals, and to formalize an optimization to
skip the final normalization of each vector if the transform is such
that it isn't necessary. The new functions don't fit beautifully into
their public headers, but I don't know of a better place for them.
Pull Request: https://projects.blender.org/blender/blender/pulls/142896
Use MTLPatchShaderSource to provide the patch basis shader source on
all Apple platforms. The immediate advantage of this change is ability
to use GPU subdivision on iOS. Another advantage is that it moves us
further away from frameworks which got deprecated by Apple and it might
save us some headache in the future.
Also tweak backend-specific defines to match definitions from OpenSubdiv.
The annoying difference is that OSD_PATCH_BASIS_METAL is defined by the
OpenSubdiv as 1 in the very beginning of the base code, which is not done
for the OSD_PATCH_BASIS_GLSL is not defined by the OpenSubdiv at all.
Ref #143445
---
TODO:
- [X] Check it works correctly on macOS
- [x] Check it works correctly on Linux
Pull Request: https://projects.blender.org/blender/blender/pulls/143462
Add a new operator "Make Shape Key the Basis Key", shown in the Shape
Key menu as "Make Basis". Effectively this does the same thing as moving
the active shape key to the top of the list of shape keys: applying it
to the mesh.
This operator is added now, because !141930 will prevent moving shape
keys to the top of the list. This hopefully prevents accidentally making
other keys the basis key, which can cause issues that are hard to
recover from.
Pull Request: https://projects.blender.org/blender/blender/pulls/143200
Originally reported for ProRes codec, but it affects multiple
other codecs: any format which is read as >= 10bit had the issue.
A regression since 93be12fde0.
The cause of the issue is that movie clip and image data-blocks
did linearization on their side, which was quite hidden to find.
Now the color management is done on the movie reader level.
Additionally, added regression test to catch such issues early
on in the future.
Pull Request: https://projects.blender.org/blender/blender/pulls/143435
The socket name should clearly indicate the type of component being processed.
The socket names for most nodes with geometry tag are clear, with the exception of these few nodes.
Pull Request: https://projects.blender.org/blender/blender/pulls/142358
* Take into account heat grid in addition to density and fuel, as this is used for
displaying smoke in Blender.
* Lower adaptive domain threshold from 0.02 to 0.002, to fix visual issues with
small smoke density that can still be visible.
Pull Request: https://projects.blender.org/blender/blender/pulls/139940
Part of https://projects.blender.org/blender/blender/pulls/141278
Blend files compatibility:
If a World exists and "Use Nodes" is disabled, we add new nodes to the
existing node tree (or create one if it doesn't) that emulates the
behavior of a world without a node tree. This ensures backward and
forward compatibility.
Python API compatibility:
- `world.use_nodes` was removed from Python API => **Breaking change**
- `world.color` is still being used by Workbench, so it stays there,
although it has no effect anymore when using Cycles or EEVEE.
Python API changes:
Creating a World using `bpy.data.worlds.new()` now creates a World with
an empty (embedded) node tree. This was necessary to enable Python
scripts to add nodes without having to create a node tree (which is
currently not possible, because World node trees are embedded).
Pull Request: https://projects.blender.org/blender/blender/pulls/142342
The dash modifier creates final result by combining filtered/processed
and unfiltered strokes, but this result could be empty. The code assumes
valid joined geometry when it's sometimes not the case. This patch did
a null check and it worked as it should.
Pull Request: https://projects.blender.org/blender/blender/pulls/143424
* Replace G.quiet by CLG_quiet_set/get
* CLOG_INFO_NOCHECK prints are now suppressed when quiet, these were
typically inside a if (!G.quiet) conditional already.
* Change some prints for blend files, color management and rendering to
use CLOG, that were previously using if (!G.quiet) printf().
Pull Request: https://projects.blender.org/blender/blender/pulls/143138
Change default shape of Bubble and Foam, to be able to notice potential
artifacts in the Viewport. The shape for bubble was changed to circle, and
the shape for Foam was changed to cross.
It allows users to notice and fix artifacts in early stages for reports like:
#79995#81011#85533#97063
Pull Request: https://projects.blender.org/blender/blender/pulls/138681
This patch moves the rules that alias Image to Combined for pass names
to the context implementations. This is because this only makes sense
for contexts that deal with passes, while it wouldn't make much sense
for other possible contexts like VSE modifiers.
Pull Request: https://projects.blender.org/blender/blender/pulls/143419
All supported versions of Blender are capable of handling the Unicode
prim and property names now.
It's difficult to determine how much of the USD ecosystem is using
version 24.03 or greater so there is some risk of our files (when they
make use of Unicode names) not loading correctly for other DCC
applications.
Pull Request: https://projects.blender.org/blender/blender/pulls/142747
wm.progress displayed a percentage in a cryptic
2x2 grid of numbers, so:
```
75
23
```
Represents `75.23%`. This is now shown as `75.23%`
on systems that support RGBA cursors.
- Adding `/` to signatures to indicate that arguments are accepted only
as positional.
- Document default values and optional arguments in consistent way with
other docs.
- Use `Literal` for strings to indicate set of allowed string values
(later it can also be used in typing stubs).
- Document some undocumented arguments.
Ref !143278