Commit Graph

9735 Commits

Author SHA1 Message Date
Mattias Fredriksson
407dcb39d4 Tests: EXPECT_EQ_SPAN utility macro
Replaces pointer based EXPECT_EQ_ARRAY with EXPECT_EQ_SPAN in most cases
as they already used spans (or span compatible datastructures).
Currently EXPECT_EQ_ARRAY only takes in one size variable and doesn't
compare the  number of elements between arguments (requiring an
additional line to do so).

This should make the code cleaner and safer. Goal is also to promote
the use Spans in new test code.

Pull Request: https://projects.blender.org/blender/blender/pulls/140340
2025-06-16 20:31:00 +02:00
Nathan Vegdahl
86f2dd418d Merge branch 'blender-v4.5-release' 2025-06-16 17:40:46 +02:00
Clément Foucault
168ef2331c Fix #140361: EEVEE: Volume viewport renderpass requires volume
The volume module was not enabled when the render pass
was needed. Forcing the module to be enabled fixes the issue.
2025-06-16 17:33:46 +02:00
Nathan Vegdahl
9b1f4dc483 Merge branch 'blender-v4.5-release' 2025-06-16 17:33:09 +02:00
Hans Goudey
c48423256d Draw: Remove mode transfer overhead when inactive
Currently the mode transfer overlay has to check whether it should
draw for every single object. For scenes with many instances even
that small amount of work per object can be significant. I observed
the overlay taking 1.8% of the samples in a profile.

This commit removes the mode transfer timer and stores it in a
global map instead. Besides the benefit of removing 8 bytes per
object, the main improvement is that it's now trivial to check
whether the overlay can be completely disabled.

Pull Request: https://projects.blender.org/blender/blender/pulls/140374
2025-06-16 17:02:25 +02:00
Clément Foucault
52f986c2a9 Fix #140179: EEVEE: Vulkan crashing with complex procedural materials
Avoid crash by removing overlapping attributes.
Print error to the console.

Pull Request: https://projects.blender.org/blender/blender/pulls/140470
2025-06-16 16:38:13 +02:00
Hans Goudey
6bb10e8412 Cleanup: Remove unused variable in subdiv paint overlay shader
From 4b4ed8bccc
The vert to loop map is unnecessary here, we don't need information
about neighboring faces. This was just incorrectly copied from older
code where this data was mixed with normal evaluation.
2025-06-16 10:21:07 -04:00
Hans Goudey
c16ee2c939 Refactor: Use C++ bounds corners function
Remove the last uses of `BKE_boundbox_init_from_minmax` in
favor of the newer `bounds::corners`. Besides clearer naming
and better ergonomics, it's also inline-able which seems to be a
good thing for such a simple function.

In order to get the same behavior as before I changed the
C++ bounds function to give the same vertex order as the
older function.

Pull Request: https://projects.blender.org/blender/blender/pulls/140401
2025-06-16 15:49:14 +02:00
Miguel Pozo
60c74cfa20 Draw: Use unique handles where possible
Use `unique_handle` where possible.
Add `unique_handle_for_sculpt`.

This also updates `ObjectRef` to make all its properties either
immutable or private.

Pull Request: https://projects.blender.org/blender/blender/pulls/139852
2025-06-16 13:39:21 +02:00
Miguel Pozo
ef9187c2c0 Merge branch 'blender-v4.5-release' 2025-06-16 13:04:14 +02:00
Miguel Pozo
3c3fe0659a Fix #140416: Crash when undoing adding camera background movie clip
Fix free_movieclips_textures.
Release movieclips at the end of draw.
(Same behavior as Overlay Legacy)
2025-06-16 13:03:31 +02:00
Clément Foucault
decd88f67e Python: Remove deprecated BGL API
The API was in a deprecation state for many years now.
This API was not compatible with Metal nor Vulkan.

This also remove `Image.bindcode`.

Pull Request: https://projects.blender.org/blender/blender/pulls/140370
2025-06-16 12:50:50 +02:00
Campbell Barton
bb9d491ca5 Merge branch 'blender-v4.5-release' 2025-06-14 16:02:07 +10:00
Campbell Barton
c482c52346 Cleanup: sort CMake file lists 2025-06-14 15:57:33 +10:00
Hans Goudey
4b4ed8bccc Mesh: Split paint overlay flag data from normals buffers
For paint modes the selection and visibility were encoded in in the W
component of the normals. Separating the normals  into a separate vertex
buffer, though it increases memory usage a bit in those paint modes,
means the status doesn't need to be computed outside of paint modes,
and the whole system becomes less convoluted and easier to optimize.
The particular optimization I have in mind is better caching of vertex
buffers, which gets much more complicated when the normals VBO contains
data like selection and visibility and depends on the paint mode.

Internally, a there are now three mesh draw batches that are specific to
the paint overlay. The GPU subdivision normals buffer is now just three
components rather than 4 components.

Pull Request: https://projects.blender.org/blender/blender/pulls/140156
2025-06-13 16:08:46 +02:00
Clément Foucault
1c29a2e2e5 EEVEE: Rename and move old gtao properties
- Move `gtao_distance` to view layer and rename to
  `ambient_occlusion_distance` (API change).
- Remove `gtao_quality` from the RNA (API change).
- Remove `use_gtao` (unused) from the RNA (API change).
- Rename `gtao_focus` to `fast_gi_bias` in the DNA (no API
  change).
- Rename `gtao_resolution` to `fast_gi_resolution` in the
  DNA (no API change).

Pull Request: https://projects.blender.org/blender/blender/pulls/140298
2025-06-13 15:36:17 +02:00
Clément Foucault
4fe75da973 EEVEE: Remove all remaining reference of EEVEE next
This changes the engine identifier back to `BLENDER_EEVEE`.

We keep the `BLENDER_EEVEE_NEXT` identifier around for
versioning reasons (have to detect when it is the active
engine of a older file).

This also rename a bunch of pannels that were using `next`
in their name.

This is a breaking change for Addons compatibility.

Pull Request: https://projects.blender.org/blender/blender/pulls/140282
2025-06-13 12:36:14 +02:00
Omar Emara
cf9c419fba Merge branch 'blender-v4.5-release' 2025-06-13 12:17:33 +03:00
Clément Foucault
a639f99987 Fix #140325: EEVEE: Uninitialized memory used in raytracing specialization
These two variables were only set during `trace()` and not for
`warm_shader_specialization`.
2025-06-13 11:05:11 +02:00
Campbell Barton
63600f806b Cleanup: spelling in comments (make check_spelling_*) 2025-06-13 11:23:28 +10:00
Hans Goudey
913918a16e Merge branch 'blender-v4.5-release' 2025-06-12 12:25:21 -04:00
Hans Goudey
9b80f8dc36 Fix #140130: Crash with shared edit mode mesh with subdivision modifier
This assert added by 321ec72c74 notes that changing the mesh
wrapper type from subdivision to normal mesh data just discards the
potentially-subdivided geometry and doesn't make sense, and possibly
breaks other assumptions.

This wrapper type change was done years ago by 0f89bcdbeb to
fix issues with shared object data during evaluation. It noted that
the mesh drawing data extraction didn't handle BMesh wrappers correctly
when the object isn't in edit mode, but that doesn't seem to be the
case after two trivial changes. The other bugs mentioned by that commit
are still solved after this change.

Pull Request: https://projects.blender.org/blender/blender/pulls/140290
2025-06-12 18:24:52 +02:00
Clément Foucault
ceef9e0f01 Merge branch 'blender-v4.5-release' 2025-06-12 16:44:29 +02:00
Clément Foucault
b1f222648d Fix #139740: Overlay: Wire armatures are invisible in pose mode
This PR moves back the wireframe slider option back to the
bones overlay popover. It is only showed in paint weight mode
and only active if in wireframe mode.

It was concluded that this feature should be revisited to maybe
cover all shading modes in the future. But for now it is safer
for 4.5 to limit it to the weightpaint mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/140276
2025-06-12 16:43:03 +02:00
Clément Foucault
e16b6ac3da EEVEE: Add support for view layer overrides
This was a missing features in EEVEE for ages which
was in fact very easy to implement.

EEVEE implements the sample override like the default
`Use` value in Cycles. It always override the sample
count if not 0. Adding a new option for changing this
behavior just like Cycles can be done later while
at the same time making the option more understandable
and its value moved to the blender's DNA.

This PR moves the UI panel to the Blender side to
be shared between Cycles and EEVEE.

Pull Request: https://projects.blender.org/blender/blender/pulls/140219
2025-06-12 14:18:29 +02:00
Clément Foucault
ef570777e9 Merge branch 'blender-v4.5-release' 2025-06-12 12:57:38 +02:00
Clément Foucault
455fac3e9b Fix #140230: GPU: GPU debug draw excessive memory usage
Simply reduce the default maximum number of vertex to a
more reasonable amount.
2025-06-12 12:57:17 +02:00
Bastien Montagne
bc80ef136e Big Endian Support Removal.
This commit implements #125759.

It removes:
* Blender does not build on big endian systems anymore.
* Support for opening blendfiles written from a big endian system is
  removed.

It keeps:
* Support to generate thumbnails from big endian blendfiles.
* BE support in `extern` or `intern` libraries, including Cycles.
* Support to open big endian versions of third party file formats:
  - PLY files.
  - Some image files (cineon, ...).

Pull Request: https://projects.blender.org/blender/blender/pulls/140138
2025-06-12 10:37:47 +02:00
Campbell Barton
9fff67ba1b Cleanup: rename UV flags for clarity
Use the `UV_FLAG_*` prefix for UV flags.
2025-06-12 13:25:22 +10:00
Hans Goudey
b6764e77ef Mesh: Extend GPU batch limit from 32 to 64
Some refactors (!140156) require adding a few more batches,
but we're already at the limit for how many we can add. This
commit makes the batch flag into a 64 bit integer. It might be
worth refactoring this more to use some system besides a flag,
but for now this simple change is best.

The atomic combination of requests wasn't actually required
and isn't supported for 64 bit integers, so it's just removed here.

Pull Request: https://projects.blender.org/blender/blender/pulls/140164
2025-06-11 18:17:49 +02:00
Hans Goudey
8f1f509368 Cleanup: GPU: Use smaller backing types for a few enums
This makes a few structs a little bit smaller.

Pull Request: https://projects.blender.org/blender/blender/pulls/140157
2025-06-11 18:17:28 +02:00
Brecht Van Lommel
9a4fdd9b86 Merge branch 'blender-v4.5-release' 2025-06-11 16:15:56 +02:00
Brecht Van Lommel
697d13bbfc Fix #139918: Color management assert displaying render
This buffer can not just be scene linear, but data too.

Pull Request: https://projects.blender.org/blender/blender/pulls/140141
2025-06-11 16:10:03 +02:00
Brecht Van Lommel
142eab27ef Merge branch 'blender-v4.5-release' 2025-06-11 15:47:58 +02:00
Clément Foucault
2f63488ce9 Fix #140113: White flickering when changing a texture on EEVEE
Fixed by not doing async loading and always stage correct
texture reference.

Unfortunately the code is getting a bit messy since the
texture loading is not done at the GPUMaterial level.
So we need one async and one synchronous path inside
`PassBase<T>::material_set`.

`ImageGPUTextures` now contains references to the location
of the future `GPUTexture *`.

Also fix #140001

Pull Request: https://projects.blender.org/blender/blender/pulls/140203
2025-06-11 15:23:24 +02:00
Clément Foucault
db79a2e737 Fix: GPU: Wrong attribute types for UNORM 8bit attributes
This was a mistake inside e57359726f.
Simply replacing SNORM_8 by UNORM_8 fixes the issue.
2025-06-11 14:21:38 +02:00
Campbell Barton
07121d44ae Cleanup: use braces (follow own style guide) 2025-06-11 09:05:26 +00:00
Habib Gahbiche
bd61e69be5 Compositor: make compositor node trees reusable
This is part of the short term roadmap goal of simplifying the
compositor workflow
(see https://projects.blender.org/blender/blender/issues/134214).
The problem is that many users don't know how to get started with
compositing in Blender, even when they have used Blender for other
areas, e.g. modeling.

Note: although the solution makes compositor node trees reusable
accross blend files, this is a nice side effect and not the main goal
of the PR.

This PR implements a "New" button that creates a new compositing node
tree, and manages trees as IDs. This has following advantages:
- Consistent with other node editors and other parts of Blender,
therefore making it easier to getting started with compositing if users
are familiar with shading or geometry nodes
- Give users the ability to reuse the compositing node tree by linking
or appending it.

Note: The parameter "Use Nodes" is still present in this PR, but will
be removed (in a backward compatible way) in a follow up PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/135223
2025-06-10 17:46:55 +02:00
Clément Foucault
a5dc8026ee GPU: Shader: Add runtime dependency resolution
This allows to generate source file that will
be injected in a predefined source dependance tree.

This allow much cleaner shader workflow where
all sources are explicitly referenced from the
main source file.

Pull Request: https://projects.blender.org/blender/blender/pulls/140047
2025-06-10 17:22:58 +02:00
Clément Foucault
e57359726f GPU: VertexFormat: Use new data types
This prevents the use of unaligned data types in
vertex formats. These formats are not supported on many
platform.

This simplify the `GPUVertexFormat` class a lot as
we do not need packing shenanigans anymore and just
compute the vertex stride.

The old enums are kept for progressive porting of the
backends and user code.

This will break compatibility with python addons.

TODO:
- [x] Deprecation warning for PyGPU (4.5)
  - [x] Deprecate matrix attributes
- [x] Error handling for PyGPU (5.0)
- [x] Backends
  - [x] Metal
  - [x] OpenGL
  - [x] Vulkan

Pull Request: https://projects.blender.org/blender/blender/pulls/138846
2025-06-10 17:20:45 +02:00
Falk David
eec765fb14 Merge branch 'blender-v4.5-release' 2025-06-10 13:13:53 +02:00
Clément Foucault
4bee4a456a Fix #139553: EEVEE: Vulkan raytracing denoising pink propagation
This was caused by precision issue that made `sqrt(1.0f - NV2)`
evaluate to NaN. Making sure the input is saturated fixes the
issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/140071
2025-06-10 12:37:54 +02:00
Bastien Montagne
dcca2694c5 Merge branch 'blender-v4.5-release' 2025-06-10 12:26:44 +02:00
Clément Foucault
62251cad5f Fix #140072: Overlay: UV Stretch ANGLE Overlay always shows green in 4.5
Was caused by the angle being scaled for USHORT storage.
2025-06-10 12:15:58 +02:00
Campbell Barton
1021dbf5cb Build: unbreak building with GCC 15 2025-06-10 11:18:52 +10:00
Miguel Pozo
2acb65a7d5 Draw: Remove direct use of duplis from engine code
Required for grouping multiple `Object`s into a single `ObjectRef`.
Part of https://projects.blender.org/blender/blender/issues/130291#issuecomment-1586807

Pull Request: https://projects.blender.org/blender/blender/pulls/139855
2025-06-09 19:10:12 +02:00
Bastien Montagne
bcc57c1d5c Merge branch 'blender-v4.5-release' 2025-06-09 17:12:23 +02:00
Falk David
f7a0003452 Grease Pencil: Motion Blur support
This adds motion blur support for Grease Pencil.

We follow the same principle form EEVEE and use the existing
`antialiasing_accumulate` (SSAA) function to accumulate the
frames in range of the motion blur over time.

There is a new `motion_blur_steps` setting in the Grease
Pencil render settings to control the accuracy of the motion
blur. This will increase the render time.

Limitations:
* When Grease Pencil is composited into the scene, we only do
  it for one the current frame and don't take the motion blur into
  account. This will lead to hard edges currently.
* There is no viewport motion blur. This would need an entirely
  new technique that can be computed in real-time.

Pull Request: https://projects.blender.org/blender/blender/pulls/139840
2025-06-09 15:44:53 +02:00
Clément Foucault
24ee70553a Fix: Overlay: Shader compilation warnings
This is because we now use enums instead of defines.

Pull Request: https://projects.blender.org/blender/blender/pulls/140044
2025-06-09 15:33:13 +02:00
Falk David
d4c143957f Merge branch 'blender-v4.5-release' 2025-06-09 14:16:12 +02:00