The default size of the Preferences window is often not wide enough
to fit some strings under System, Keymap, and others.
Make Preferences window slightly wider, but still a conservative width
so it doesn't cover up much of the screen at the smallest recommended
screen size (1920x1080).
See PR for details and screenshots.
Pull Request: https://projects.blender.org/blender/blender/pulls/144497
IMB_colormanagement_setup_glsl_draw_to_scene_linear (only used by
VSE preview rendering) inside GPUShaderBinder::to_scene_linear_bind
was trying to cache the created OCIO GPU shader, but failed to actually
do it: it was querying scene_linear_cache, but putting the shader
into display_cache.
This lack of caching was costing around 1ms on each VSE preview draw.
Pull Request: https://projects.blender.org/blender/blender/pulls/144617
Use the lately introduced parser for that.
This allows to use preprocessor directive inside them.
By extension, it alows having resource accessors inside
templates.
Also error report is less confusing on most shader compilers.
The counterpart is that the shader files that are shipped
with blender are inflated.
Pull Request: https://projects.blender.org/blender/blender/pulls/144588
When enabled (default), exported OBJ files have the object transform
applied to their vertices. This is the previous default behaviour.
When disabled, exported vertices use their local object coordinates.
Pull Request: https://projects.blender.org/blender/blender/pulls/139436
Not a common scenario, but if you had very few source images (e.g.
long image strips with one frame) and many final frames cached,
the full cache eviction policy was not handling that well, since it
was always removing at least one source image for each final frame.
Resulting in effectively the cache only being full of final frames.
Change that so:
1) evict_caches_if_full has a loop that tries to evict until the caches
are not full (i.e. not necessarily just one image), and
2) only evict source image per final frame, if there are more source
images cached.
Pull Request: https://projects.blender.org/blender/blender/pulls/144612
The problem was that the `Subdivide Modifier` would not apply catmull clark
smoothing to the first and last points when a curve was cyclical.
This also fixes a mistake were the smoothing would read from the same data
as writing, leading to the shape to be skewed.
Pull Request: https://projects.blender.org/blender/blender/pulls/144529
The depth of field shader create info contained a resource that wasn't
used in the shader or fulfilled. In the Vulkan backend the shader resource
list is used in the outer loop to find out which resources needs to be
requested. As this resource didn't exist it asserted in the Vulkan backend
for incorrect usage.
Pull Request: https://projects.blender.org/blender/blender/pulls/144606
Text drawing can be improved. At this moment a vertex buffer is
allocated for 2048 chars. When drawing a string the vertex buffer is
filled from the beginning with the string to draw. The next string will
replace the chars of the previous string. This locks up GPUs as the data
can only be overwritten when the buffer isn't used anymore.
Vulkan backend had an issue that uploading the new data would always
send over 2048 chars even when some chars were only used. By fixing this
the scene in the report went from 0.6 fps to 2.6 fps. OpenGL is 6 fps as
vulkan has to manage a rendergraph with 100.000 of nodes.
Text drawing performance can be improved by continue using the space of
the vertex buffers. In this case more drawing calls can be done, before
the vertex buffer needs to be updated.
Pull Request: https://projects.blender.org/blender/blender/pulls/144604
We plan on using this for online assets (see blender/blender!130543), to
send status updates with a URL to identify the online library remote.
In future this can be expanded for multiple kinds of messages with
differing data, like progress reports, sub-resource download messages
(e.g. individual assets), etc.
While this will only be used for online assets for the start, I imagine
we'd want these same kind of status messages for other remote
resources. Hence the name `WM_MSG_TYPE_REMOTE_IO`.
Pull Request: https://projects.blender.org/blender/blender/pulls/144567
Blender had some support for using MoltenVK. However there are some key
issues why MotlenVK cannot be used. Bugs have been reported up-stream.
As it doesn't work and holds back regular developments it will be removed
from the main branch.
Any efforts on making Vulkan run on Apple (including KosmicKrisp)
is considered a community effort and can be done in a development
branch.
Pull Request: https://projects.blender.org/blender/blender/pulls/144602
This PR makes it easier to clear keyframes from strips in preview.
It is the similar to the feature in 3D viewport. Just navigate to
"Strip" -> "Animation" -> "Clear Keyframes...". This then deletes
all keyframes form the selected strips.
Pull Request: https://projects.blender.org/blender/blender/pulls/141106
`render_give_ibuf_direct()` just called `seq_render_strip()`, which
tried to get image from intra frame cache. This always succeeded,
because the intra frame cache does not accept timeline frame argument.
Using intra frame cache here is incorrect. Source cache must be used.
If source cache lookup fails, intra frame cache must be invalidated
before calling `seq_render_strip()`.
Pull Request: https://projects.blender.org/blender/blender/pulls/144396
These fields are always reset at runtime. Writing zeros should be easier
to compress since a lot of other data is zeroed, and it also makes it
easier for developers to filter out noise when looking at data buffers.
Pull Request: https://projects.blender.org/blender/blender/pulls/144582
AFAIR, originally the decorator widget was supposed to be also usable to
control overrides.
However, this was never finished (even design wise, not sure how this would
have worked and not conflicted with the animation part of it).
So for now, apply the same behavior as with driven properties: when a
property is liboverridden (but not animated), do not allow to define or
remove keyframes.
This commit also refactors the handling of decorator action, to
deduplicate the logic deciding whether a decorators is 'active' and can
control keyframes, or not.
Pull Request: https://projects.blender.org/blender/blender/pulls/140872
The various operations of liboverride have never been effectively
exposed, remove them from the UI code at least.
Also rename related operator and UI messages to use the typical `Add`
naming (`Add Override` etc.).
No functional changes intended.
This brings `bone_is_visible` in line with `bone_is_selected`,
by using function overloading instead of suffixing with either
`pchan` or `editbone`.
Pull Request: https://projects.blender.org/blender/blender/pulls/144558
This adds support for bézier, NURBS and catmull rom curve
types in SVG exporting.
Note: strokes without uniform width will still be exported as
polylines. This is because the outline code currently does not
support bézier curves.
Pull Request: https://projects.blender.org/blender/blender/pulls/141594
Some times when exporting, the bounding box would have a size of zero.
This made it so that no points were visible.
This PR fixes the bounding size by using the already existing
`ed::greasepencil::retrieve_visible_strokes` function.
Pull Request: https://projects.blender.org/blender/blender/pulls/144516
Embedded IDs never get tagged as 'unchanged', since this status is
always the same as for their owner ID.
So far, this assert was never reached, which would indicate that IDs
using embedded data are never detected as unchanged. Hopefully work like
the 'pointer stability' on blendfile writing (!127729) will improve this
situation.
The problem was triggered in upcoming packed data code, where packed IDs
are managed like regular local ones on memfile undo (and not like
regular linked ones). But in that case it looks like packed materials
and such are properly detected as unchanged...
The `Primitive Tools` would not initializes the `u_scale` attribute,
making it so that the attribute would default to `0.0f` when new
strokes were drawn the the draw tool.
Pull Request: https://projects.blender.org/blender/blender/pulls/144524
When doing 2D image painting the region on the GPU that is updated could
be out of bounds of the texture, resulting in a crash. This PR fixes
this by clamping the gpu region to update to the actual image size.
Pull Request: https://projects.blender.org/blender/blender/pulls/144545
Add a command line argument --gpu-vsync on/off/auto.
Prefer command line arguments for GPU settings,
as it means the value is error checked and set when Blender starts.
Also refactor GHOST_Context to take a parameter argument which
includes the stereo-visual & debug arguments and includes the newly
added vsync setting. This makes it possible to add GPU context
parameters more easily in the future.
It also removes redundant parsing & setting the VSync setting for
off-screen contexts.
Changes to recent PR !143049.
Ref !144473
It's important that frozen types are immutable, add a generic
check that mathutils types can be resized and check the frozen flag.
Also correct the exception types when Vector's cant be resized,
using a ValueError instead of a TypeError as the type is correct.
The `Radius`, `Opacity` and `Vertex Color` attributes were not
getting interpolated when randomization was turned on.
The problem is most visible on the end tapers of strokes.
Pull Request: https://projects.blender.org/blender/blender/pulls/143878
This commit effectively reverts 8d9bf47ba6
and reimplements the check at a more generic / higher level.
After the above commit, Sculpt Mode was unique compared to the other
modes in how visibility is handled, leading to inconsistencies in
behavior in Blender as a whole.
In general, we do not prevent visibility changes of objects no matter
the mode, from the outliner or otherwise, so preventing entry at the API
level solves the problem highlighted in the original commit at an
incorrect level.
While the above may be changed in the future, for now, keeping this
behavior consistent across different object modes is better than the
alternative, and preventing specialized workspaces from being entered
based on the visibility solves the original issue in a more coherent
way.
Pull Request: https://projects.blender.org/blender/blender/pulls/142284
Simplify both `BKE_libblock_find_name_and_library` and
`BKE_libblock_find_name_and_library_filepath` by only searching for a
matching Library ID, and calling `BKE_libblock_find_name` to finalize
the search.
This factorize most of the search logic, and happens to fix a bug in
`BKE_libblock_find_name_and_library`, which would errosneously early-
return `nullptr` in case it found a name-matching local ID, when a
linked one was looked-up for.
Also added minimal documentation to these functions, especially for the
'library' part of the search parameters.
Pull Request: https://projects.blender.org/blender/blender/pulls/144505
The float buffer should be tagged with the standard untonemapped colorspace,
so that when we convert to PQ/HLG the tonemapping is preserved.
With this change:
* Using AgX highlights properly go to white.
* Using the ACES configs, we can convert EXRs to a HDR video, exactly
matching colors with the HDR video on https://dpel.aswf.io/solemates/.
Pull Request: https://projects.blender.org/blender/blender/pulls/144493
Besides "Standard" as in the Blender config, now also recognize
"Un-tone-mapped" as the default view settings to be used for cases like
the 3D viewport solid draw type.
Pull Request: https://projects.blender.org/blender/blender/pulls/144493
The compositor crashes when attempting to read an EXR layer called Alpha
from a multi-layer EXR file. This is because Blender exposes an extra
output in the Image node called Alpha, which is not a real pass, but is
derived from the combined pass. So, this special case conflicts with an
actual pass called Alpha.
To fix this, we only consider the special case if the pass name is the
combined pass.
Pull Request: https://projects.blender.org/blender/blender/pulls/144498
Point Caches (used by particle system, cloth, boids etc.) are now
always compressed, uzing zstd coupled with lossless data filtering.
- This is both smaller cache files _and_ faster than the old
"Heavy" compression mode,
- And smaller data files and same or slightly faster speed than
using no compression at all,
- There was not much difference between compression levels once
data filtering got added, so option to pick them was removed.
- So there's no downside to just always using the compression,
which makes for a simpler UI.
- RNA change: removes PointCache.compression property.
More details and cache size / performance numbers in the PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/144356
Previously, we always just used `int` when dealing with menu values on the C++
side. It's currently the only type where we have the same base type (`int`) for
two different socket types (integer and menu sockets). This has some downsides:
* It requires special cases in some places.
* There is no function from static base type to socket type (which is useful for
some utilities like `SocketValueVariant`).
* It implicitly allows operations on menu values that shouldn't be allowed such
as arithmetic operations and conversions to and from other types.
This patch adds a new `MenuValue` type that is used for menu sockets in Geometry
Nodes and the (CPU) Compositor, clarifying the distinction between integer and
menu values.
Pull Request: https://projects.blender.org/blender/blender/pulls/144476
Code is trying to append from itself, this is not allowed (and will
assert in debug builds).
Instead, create a new copy of the matching local workspace. This
allows to keep identical behavior from user PoV, when the source
workspace is in the same blendfile.
Pull Request: https://projects.blender.org/blender/blender/pulls/144352
This PR proposes to add a new flag `--shader-debug-info` that enables the generation of shader debug information.
I created this PR as WIP due to the following reasons:
- Currently it only works for the Vulkan backend. I do not know if it makes sense for other backends. For example, OpenGL directly receives the GLSL code, so there no need for this might exist.
- So far `--debug-gpu-renderdoc` already turns on the following changes for GLSL shader compilation with shaderc:
```
options.SetOptimizationLevel(shaderc_optimization_level_zero);
options.SetGenerateDebugInfo();
```
- While combining optimization level zero with debug info is a sensible choice for frame debuggers like RenderDoc, my use case for creating this PR is shader profiling. In this case, one does not want compiler optimizations to be turned off. At the current point in time, the only information my profiler uses (which is unfortunately not public at this point in time) is the name of the shader. When turning on debug information, shaderc/glslang store this information in the generated SPIR-V data. Otherwise, it would be impossible for the profiler to tell the user what the name of the shader it is that is profiled.
- An alternative solution would be to rename the entry point `main` of a shader to the name of the shader. But this might be an even uglier hack, as it requires editing the source code (and the name of the shader then needs to be a valid GLSL function name).
- We should first clarify if there is interest in the Blender side in upstreaming an option like this. While I could just keep this in my local fork of Blender, there is merit in having the possibility to profile arbitrary Blender builds.
Pull Request: https://projects.blender.org/blender/blender/pulls/142986