Commit Graph

128857 Commits

Author SHA1 Message Date
Miguel Pozo
c567f7ccae Merge branch 'blender-v4.0-release' 2023-10-06 15:36:37 +02:00
Miguel Pozo
fe39456ba5 Workbench: Fix: Performance Regressions
Optimize Workbench performance so it's on par with the previous
implementation.
Most of these changes are barely noticeable on powerful GPUs,
but can cause a notable performance improvement on old or low-end
hardware.

* Avoid unnecessary texture copies and draw directly to the viewport
   textures.
* Optimize-out depth/stencil reads, using stencil testing instead.
* Avoid using `Texture::clear` and use framebuffer clears instead.
* Avoid framebuffer state changes (always use the same attachments).
* Avoid constant variation of acquired `TextureFromPool`s.

Fix #113010

Pull Request: https://projects.blender.org/blender/blender/pulls/113251
2023-10-06 15:31:44 +02:00
Miguel Pozo
57cfe20e5b EEVEE-Next: Fix DupliObject ObjectKey
Fixed version of #112544 (reverted).

`DRW_drawdata_get` reuses the same `DrawData` for all duplis,
so they all end up using the same `ObjectHandle` and `ObjectKey`,
which breaks motion vectors.

* Don't rely on `DRW_drawdata_get` for storing `ObjectKey`s.
* Simplify `ObjectKey`.

This also solves the issue of objects created "on the fly" always having
the `ID_RECALC_ALL` flag.

Pull Request: https://projects.blender.org/blender/blender/pulls/113252
2023-10-06 15:29:50 +02:00
Jeroen Bakker
1aca58cf16 Vulkan: Enable as Experimental Option
This PR enables vulkan backend as experimental option.
It will only be available in alpha builds on Linux and Windows.

This option is highly experimental and enabled to get some insight
on supported platforms. Don't expect a fully working Blender
yet. Also don't expect it to have usable performance.

**What is known to not work?**

* OCIO textures are not supported on Intel and AMD GPUs. sRGB/Standard is supported
  on those platforms.
* AMD Polaris based GPUs on Linux will generate a crash when drawing the 3d cursor as it
  doesn't support the needed vertex format. Comment out `DRW_draw_cursor` in `DRW_draw_region_info`.
* The colors in the node editor and sequencer are of as sRGB viewports aren't detected correctly.
* The image / UV editor isn't working as many texture formats haven't been tested yet. Some
  tweaks are also needed to do correct depth testing.
* 3D Viewport is known to be flickering. Sometimes workbench doesn't display anything.
* 3D Viewport wireframe will crash as it uses a framebuffer with gaps between color attachments,
  which isn't supported yet. (#113141)
* Rotate the view widget is partially drawn due to incompatible depth clipping.
* GPU Selection isn't working. It is expected to be solved when Overlay-Next will become the
  default engine. For now disable GPU depth picking in the preferences.
* Cycles/EEVEE are known to not work with Vulkan yet. Cycles requires Vulkan Pixel Buffer.
   Cuda <-> Vulkan interop might require a different approach than OpenGL as Vulkan doesn't allow
  importing memory from a Cuda context. EEVEE uses features that aren't available yet in the backend
* Workbench is working, except Workbench shadows.
* EEVEE-Next basics are working. Shadows, lights are known to be not working. Materials/Shading
  works in simple scenes. Changes are expected in EEVEE-Next that will break Vulkan compatibility
  in the near future.
* Systems with multiple GPUs is not expected to work.
* Wayland support is in development and requires some iterations. You can start Blender, but
  the protocols are not aligned yet.
* OpenXR hasn't been modified and is expected to fail.
* The backend is very strict when mis-using the GPU module. In debug builds it may crash
  on asserts.
* Older drivers/GPUs might not have all the features that we require. The workarounds
  for the missing features still need to be implemented.

**A word about performance**

In the project planning we focus first on stability and platform support. The performance of Vulkan is
around 20% of what we want to achieve. The reason is that each command sent to the
GPU is done one at a time. The implementation even waits until we have feedback that the GPU
is idle again.

Geometry is currently stored in System RAM. The GPU will read and cache the data when
accessing geometry. This slows down when using objects with much geometry.
Some performance features like MDI (Multi-Draw-Indirect) hasn't been implemented and
falls back to Single Draw Indirect.

**Why enable it is an experimental option?**

* Ensures that new features are being tested with Vulkan
* Ensure that building with Vulkan is possible on supported platforms
* Get feedback from developers if Vulkan can run on their system or that
  there are special cases that we are not aware of. Main development
  environment has been Linux/X11 with occasionally testing using Windows.
* Validate Add-ons that use the `gpu` module.
* Possible to enable GLSL validation on the buildbot. (Needs more work).
* Does it compile on all machines or does it require more changes to cmake
  config. We expect it to be able to compile without installing the Vulkan SDK.
  The Vulkan SDK is a very powerful tool, but only when actually doing GPU
  development. Otherwise it is an overhead which slows down other
  activities.

**How can the backend be enabled?**

Currently the Vulkan backend can be enabled per Blender session by starting
using the command line argument `--gpu-backend vulkan`. In the future, when
the backend is more mature, we will add a user preference to switch between
OpenGL and Vulkan.

Pull Request: https://projects.blender.org/blender/blender/pulls/113057
2023-10-06 15:24:21 +02:00
Jeroen Bakker
9a654c04de Vulkan: Wayland Windowing
Wayland WSI would crash the system when used. The reason is that the
wayland vulkan WSI doesn't provide windowing support. Vulkan gets full access
to the desktop of the OS and it is the responsibilty of the application to
do the right thing.

For OpenGL Wayland proved basic windowing support using `wayland-egl.h`.
Which essentially is a tiny wrapper that keeps track of the window position and
size.

This PR changes a few things to make the Wayland surface usable:

- Do not load debug extensions when blender isn't started with
  `--debug-gpu`.
- Recreate swapchain images when surface size changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/113007
2023-10-06 14:45:09 +02:00
Jeroen Bakker
44882ceb7b EEVEE-Next: Several Fixes Reflection Probes Workflow
This fixes several issues related to using reflection probes in EEVEE-Next.

- When using a single sample, the reflection probes weren't always updated.
- Composite world background in reflection probes
- Removing reflection probes wasn't working
- Update UBO when world and reflection probes are active in the scene.

Pull Request: https://projects.blender.org/blender/blender/pulls/113347
2023-10-06 14:43:19 +02:00
Iliya Katueshenock
1a30e0597b Fix #113095: deduplicate attributes in search
Pull Request: https://projects.blender.org/blender/blender/pulls/113097
2023-10-06 14:41:33 +02:00
Lukas Tönne
642ad4110b Merge branch 'blender-v4.0-release' 2023-10-06 14:34:08 +02:00
Lukas Tönne
dd9c906840 Fix #113134: Use a valid socket in node groups for custom nodes
Custom node trees may not suppor the default NodeSocketFloat socket
type. In case this default type is not supported, search all registered
socket types and pick the first one that is supported by the custom
node tree.

Pull Request: https://projects.blender.org/blender/blender/pulls/113330
2023-10-06 14:33:35 +02:00
Hans Goudey
73e345f85f Sculpt: Draw color attribute during dynamic topology sculpting
Previously the colors were just uploaded as white, the default value.
Even if they aren't interpolated properly, it is still helpful to see
the colors. At worst, the unaffected parts of the mesh will still look
right.

A previous commit made vertex colors interpolate properly, but
face corner colors will still reset to their default value.

As a reminder, only color and byte color attributes are currently
supported for the specialized PBVH drawing.

Pull Request: https://projects.blender.org/blender/blender/pulls/113333
2023-10-06 14:31:25 +02:00
Sergey Sharybin
491bd7fff0 Cleanup: Remove redundant mask interpolation in dyntopo
Since the recently added support for vertex interpolation the
manual mask interpolation is not needed anymore.
2023-10-06 14:31:23 +02:00
Sergey Sharybin
2a7e06b98d Sculpt: Add vertex interpolation for the dynamic topology
This change makes it so the newly added vertices have properly
interpolated attributes. This includes things like vertex colors.
New vertices are created by splitting edges, so the interpolation
mixes between the edge's two vertices equally.

Co-Authored-By: Hans Goudey <hans@blender.org>
2023-10-06 14:31:23 +02:00
Sergey Sharybin
1885116a9a Fix: Noisy false-positive assert in dyntopo sculpt
This assert triggers whenever dyntopo is used, even when all the
objects and environment is pristine. The semantic of the assert
is not very clear either.

Avoid having a false-positive trigger which gets in the way of any
development in the area.
2023-10-06 14:31:23 +02:00
Jacques Lucke
ac4fa638c1 Merge branch 'blender-v4.0-release' 2023-10-06 14:00:54 +02:00
Jacques Lucke
271f634a84 Fix #113319: crash with out of bounds index in curve sample node
This was broken in 5063f7a725.
2023-10-06 13:58:17 +02:00
Christoph Lendenfeld
d85e7f4577 Fix #87160: Clean Keyframes only works if channels are selected
The issue was that the code filtered for selected channels,
while the expectation was that it would only filter for selected keys.

This PR changes the behavior of the operator in the following way:
* when "Clean Channels" is **disabled**, it will clean only selected keyframes, regardless of the channel selection
* when "Clean Channels" is **enabled**, it will clean selected channels regardless of keyframe selection

The same logic was applied to the Graph Editor code.
It only makes a difference in the case when "Clean Channels" is enabled.
That is because channels were automatically selected when a key was selected.

In addition to that I moved the menu entry for "Clean Channels" to the channel menu
to reduce confusion.

Another solution would have been to make the Dope Sheet select channels
when keys are selected. This might still be done in the future, but I think the
only correct fix is to change the actual operator behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/113335
2023-10-06 13:51:04 +02:00
Leon Schittek
8d15783a7e UI: display invalid cache as striped lines in the timeline
Unify the way the different state's of a cache are shown in the timeline:
* Baked: fully opaque
* Cached: slightly transparent
* Invalid cache: slightly transparent, dark diagonal stripes

This improves accessibility since patterns are easier to recognize
for colorblind or otherwise visually impaired people.

The slight transparency is done with an alpha of 0.7 and the diagonal
stripes use the cache's color at 50% value.

Implements #108196.

Pull Request: https://projects.blender.org/blender/blender/pulls/108481
2023-10-06 13:12:16 +02:00
Xavier Hallade
d26a2b09bc Cycles: oneAPI: use hardware cos
Speckles and missing lights were experienced in scenes with Nishita Sky
Texture and a Sun Size smaller than 1.5°, such as in Lone Monk and Attic
scenes.
We previously worked around these by using a more precise
software implementation of cosine.
After recent changes in Cycles, it turns out this workaround isn't
currently needed.
2023-10-06 13:10:27 +02:00
Pratik Borhade
97b831df8e Merge branch 'blender-v4.0-release' 2023-10-06 16:26:53 +05:30
Pratik Borhade
b5ebf31fb1 Fix #113022: Disabled menu item's text uses inner color
This fails to differentiate between active buttons and disabled buttons
for some custom themes (and also in blender light theme)

Instead use text color with 0.5 alpha value for disabled item's text.
(Don't blend between text and inner color)

Pull Request: https://projects.blender.org/blender/blender/pulls/113082
2023-10-06 12:54:14 +02:00
Campbell Barton
a91ee4d5e3 Merge branch 'blender-v4.0-release' 2023-10-06 21:48:37 +11:00
Campbell Barton
c5d01df691 Merge branch 'blender-v4.0-release' 2023-10-06 21:48:34 +11:00
Campbell Barton
59d81a23d9 AUTHORS: update 2023-10-06 21:47:31 +11:00
Campbell Barton
8974ca8f24 Tools: set the number of jobs to the CPU count for various utilities
Previously this was the double the CPU count because:

- Modern CPU's from AMD & Intel support SMT/hyper-threading which
  present twice as many cores, doubling again has little to no benefit.
- Using 2x or 4x the number of physical cores number can use a lot of
  memory on systems with many cores which are becoming more common.
2023-10-06 21:47:03 +11:00
Sybren A. Stüvel
1b273f2bf4 Merge remote-tracking branch 'origin/blender-v4.0-release' 2023-10-06 11:47:46 +02:00
Sybren A. Stüvel
4c64c34f49 Fix #110874: Anim: Theme confusion with 'Pose Bone' label
Update the label of the "Bone Pose" theme setting to "Bone Pose Selected".
That is now consistent with the already-existing "Bone Pose Active"
label.

Also add tooltips that clarify what these theme colors are used for.
2023-10-06 11:46:52 +02:00
Falk David
7e87435cf4 GPv3: Initial drawing tool
This PR implements an initial drawing tool that can already be used for testing.
While this is not fully feature complete (compared to the current grease pencil draw tool) the following is already implemented:

* Pressure support for radius and opacity.
* Material color and vertex color support.
* New active smoothing algorithm based on curve fitting.
* Simplify algorithm as a post-process step.

Some deliberate limitations include:
* The drawing plane is always the front plane. Drawing on surfaces is also not supported.
*

The current approach has not been optimized for performance yet. The goal was to have a straightforward implementation
first and then focus on performance later.

There are numerous parameters in the code that are hard-coded for now. These should be exposed at some point, potentially as user settings.

Pull Request: https://projects.blender.org/blender/blender/pulls/110093
2023-10-06 10:49:54 +02:00
Nathan Vegdahl
8735103b8e Merge branch 'blender-v4.0-release' 2023-10-06 10:24:28 +02:00
Clément Foucault
c5bf383826 Fix: DRW: Missing braces around array constructor 2023-10-06 10:19:46 +02:00
Nathan Vegdahl
e26d287520 Fix #112018: increase AgX LUT resolution
AgX exhibited some banding-like artifacts that were due to being
approximated with a 3D LUT.  This commit resolves that by increasing
the LUT resolution enough to mitigate the artifacts and make them
unnoticeable.

Additionally:
- The previous LUTs were written in a space-inefficient way, using
  e.g. "0.000000" instead of "0".  The new LUTs are written more
  efficiently, avoiding quite as dramatic a file size increase as
  usually accompanies 3D LUT resolution increases.
- The previous LUTs included output values greater than 1.0, which was
  both incorrect for a tone mapper, and also pointless since Blender
  immediately clips them anyway.  The new LUTs clip to 1.0.  This also
  allows the more efficient writing to squeeze even more space savings
  out of the LUTs.
- The previous inverse AgX LUT contained NaNs.  Those have been
  replaced with 0.0 in the new inverse LUT.

Note that due to discrepancies between the LUTs previously provided
to Blender and the AgX scripts that were later published, the color
transform in these LUTs are slightly different.  But they are close, and
equivalently good.

Pull Request: https://projects.blender.org/blender/blender/pulls/113253
2023-10-06 10:12:24 +02:00
Hans Goudey
b5b0a296b6 Cleanup: Else after return in curves trim 2023-10-06 10:11:16 +02:00
Campbell Barton
273af6855a CMake: cache the HAVE_BROTLI result
Avoid detecting HAVE_BROTLI every time CMake runs,
only re-detect if the freetype includes change.
2023-10-06 17:58:26 +11:00
Campbell Barton
6b2f9dd71d Merge branch 'blender-v4.0-release' 2023-10-06 17:34:18 +11:00
Campbell Barton
e1dac0b122 Fix glitch resizing windows with LIBDECOR on Wayland
The window contents and the window boarders were noticeably out of sync
when resizing the window quickly.

Resolve by keeping the current size as-is, rely on deferred handling
of the pending window size to apply the new size along with the contents.
2023-10-06 17:32:43 +11:00
Campbell Barton
a110873f52 Merge branch 'blender-v4.0-release' 2023-10-06 17:15:15 +11:00
Campbell Barton
9ddb3143c0 Merge branch 'blender-v4.0-release' 2023-10-06 17:15:13 +11:00
Campbell Barton
91011b06a0 Merge branch 'blender-v4.0-release' 2023-10-06 17:15:10 +11:00
Campbell Barton
edfc78e0f2 Merge branch 'blender-v4.0-release' 2023-10-06 17:15:07 +11:00
Campbell Barton
b9d300380f Cleanup: correct typo in assertions 2023-10-06 17:13:44 +11:00
Campbell Barton
d59a79ef95 Fix redundant window activation/deactivation events under Wayland
Any window state change (resizing for e.g.) triggered
activation/deactivation events. Resolve by only sending events on state
change. The activation caused cursor motion events from #107594.
2023-10-06 17:12:32 +11:00
Campbell Barton
35edcf2ed6 Fix #107594: Phantom cursor motion when resizing windows under Wayland
Resizing a window in Wayland caused cursor motion events in the window
which could be seen as buttons flashing when the cursor was detected
as hovering over buttons.

This was caused by two bugs:

- Missing checks for failure to access the cursor location before
  converting the coordinates from GHOST to screen-space meant the
  wmWindow::eventstate location would move each time the location
  was updated.

- Resizing the window wasn't detecting state changes and would
  continuously send window activation events. Window activation set
  wmWindpw::addmousemove which triggered the previous bug, making the
  cursor flicker during resize.

This commit only addresses the first issue, where failure to access
the cursor location wasn't accounted for
(window activation will be fixed separately).

All GHOST_GetCursorPosition & wm_cursor_position_get calls now account
for failure, resolving uninitialized stack memory use in some cases.

This resolves similar issues for macOS, WIN32 & X11 although it seems
likely these platforms rarely fail to access the cursor location.
2023-10-06 17:12:32 +11:00
Jeroen Bakker
4a94e17156 Cleanup: Remove unused attribute in GLShaderInterface 2023-10-06 07:47:08 +02:00
Jeroen Bakker
79ca1b16ab Cleanup: Make format 2023-10-06 07:40:26 +02:00
Jeroen Bakker
c801c73d79 Python: Update BGL Deprecation Warning
BGL is deprecated and will not work on Metal devices. Although the
inital plan was to remove it in Blender 4.0, We don't see any harm
to still have it in the code-base until OpenGL itself is deprecated.

Add-on developers are warned when using the BGL module that the
add-on/script will not work on all platforms.

There are still some limitations inside the GPU module that needs
a more friendly API. This API isn't clear at this time.

Pull Request: https://projects.blender.org/blender/blender/pulls/112579
2023-10-06 07:37:44 +02:00
Campbell Barton
31dce9d11d Merge branch 'blender-v4.0-release' 2023-10-06 16:21:01 +11:00
Campbell Barton
36021021aa GHOST/Wayland: remove window activation on tablet proximity in
Activating on tablet proximity isn't needed and would activate windows
that were already active. The window manager handles activation.
2023-10-06 16:20:08 +11:00
Campbell Barton
ba472eb69e Merge branch 'blender-v4.0-release' 2023-10-06 16:16:58 +11:00
Campbell Barton
c413a8d183 Fix error clearing the windows libdecor state on failure on Wayland
API docs note the state should remain unchanged when accessing the state
fails.
2023-10-06 16:15:47 +11:00
Campbell Barton
bd66e2e662 Cleanup: use defines for superscript numbers in unit.cc 2023-10-06 14:12:26 +11:00
Campbell Barton
2b77cd726d Cleanup: wrap definitions across multiple lines, add struct identifiers
When units were initially defined having each on their own line was
compact, since them more fields have been added, making the lines
overly long and the difference between each field non-obvious.

Further, the conversion from C to C++ [0], wrapped definitions onto the
same line (for some reason), resulting in lines over 700 wide.

Use clang-format & add struct ID's for clarity.

[0]: 129f78eee7
2023-10-06 13:57:52 +11:00