Commit Graph

9231 Commits

Author SHA1 Message Date
Philipp Oeser
5cfc7b7c65 Fix #134825: Assert in draw code when enabling "Paint Mask"
This happend for meshes without UVs.
The call to `texpaint_request_active_uv` in
`DRW_mesh_batch_cache_get_surface_edges` is from 9c010c44f4.

Looks like this is not needed (assumed to be copy paste error).

Pull Request: https://projects.blender.org/blender/blender/pulls/134856
2025-02-21 12:40:21 +01:00
Jeroen Bakker
b1eaf58aa4 Fix #134586: EEVEE: Crash when rendering large resolutions
EEVEE crashes when it is not able to allocate buffers. Previously we had a
message showing to the user that it tries to allocate a texture larger than
supported by the GPU. But was not implemented for EEVEE-next. This fix will
add back this error message.

![image.png](/attachments/723c10a4-2b44-49c4-a30f-6e8178055d8a)

Pull Request: https://projects.blender.org/blender/blender/pulls/134725
2025-02-20 11:18:26 +01:00
Sean Kim
f1fca48a4f Fix #134292: Clone brush cannot access local blendfile images
With the brush assets project, brushes were moved from being local to
the working blendfile to being linked from asset libraries. This breaks
the Image Paint 'Clone' brush, as it has a brush property that links to
other Image datablocks.

To support this functionality, this commit adds the corresponding
properties into the `ImagePaintSettings` struct so that it is stored
locally with the images that will be used by the tool, inside the main
blendfile.

The source image property is shared with the 3D version of the 'Clone'
brush instead of adding a separate field to preserve old behavior.

Notably, this has the following limitations:
* If clone brush assets have been made and shared with external packs,
  they would not work out of the box with linked image assets.
* Despite these settings being stored on the scene, they are populated
  inside the tool window under "Brush Settings" which is potentially
  misleading. However, this is already the case for the 3D version of
  the brush, so further UI refinement will happen outside of this PR.
* Users will be unable to use separate images simultaneously for the
  Image editor and the 3D viewport, unlike in pre-4.3 versions. This
  can be adjusted in the future if it is a critical workflow.

Because the intended design and functionality of this tool is currently
questionable, this commit opts to make these changes instead of doing
further design to support both accessing data on the brush and on the
scene.

Pull Request: https://projects.blender.org/blender/blender/pulls/134474
2025-02-19 22:00:39 +01:00
Jeroen Bakker
ed5b077f92 Fix #134634: Overlay: Mask not drawing on top of render result/viewer
Logical error in the overlay engine. Moved mask drawing before the early
exit for viewer/render results.

Pull Request: https://projects.blender.org/blender/blender/pulls/134660
2025-02-17 14:14:12 +01:00
Pratik Borhade
0a7b765eb0 Fix #134362: Grease Pencil canvas settings don't do anything
This is due to hardcoded color and subdivision value. Also scale and
offset properties stored in overlay stuct was not considered. Now
multiply the transform matrix with `grid_mat` to make use of these
properties.

Pull Request: https://projects.blender.org/blender/blender/pulls/134382
2025-02-12 18:51:03 +01:00
Omar Emara
4137fdf555 Fix #134259: Compositor crash when passes are used
In certain setups where passes are used in the viewport compositor,
blender will crash. This happens because passes may not be available
when the compositor first run but then become available in later runs.
Possibly because EEVEE is still compiling shaders. This is problematic
for the compositor because it caches the result of node tree compilation
for the specific data available, like passes, and the compositor does
not get informed when data becomes available like in the case of EEVEE
to invalidate the cached node tree compilation result.

Caching of node tree compilation was always a source of bugs but we
managed to workaround them in the past, so before we work on a fix for
this crash, we first evaluate the removal of caching to see if we can
live without it. Especially since a fix will be rather involved for the
release branch at this stage.

The time it takes to compile the node tree is:

- Small Tree (~10 nodes): 0.3ms.
- Medium Tree (~50 nodes): 0.6ms.
- Huge Tree (~300 nodes): 3ms.

The difference is not noticeable to the eye, probably since as the tree
becomes bigger, the evaluation time becomes more dominant, and small
trees are fast to compile.

It should be noted that we intended to remove caching in the future to
support things like lazy evaluation of node inputs, but we though a few
optimization needs to be done on the GPUMaterial compiler side to make
compilation faster, since it is the main bottleneck during compilation.

So considering this, I think it is acceptable to disable caching of node
tree compilations for the time being. I intend to optimize it such that
it always becomes less than 1ms, but we will have to delay that to 4.5.

Pull Request: https://projects.blender.org/blender/blender/pulls/134394
2025-02-11 15:35:41 +01:00
Clément Foucault
aad0bd2148 Fix #132889: EEVEE: Volumetric emission on zero scale mesh breaks render
The root cause is still unknown. But this patch disables
rendering of objects that will produce no volumetric effect.
This does fix the issue reported.
2025-02-10 16:17:15 +01:00
Clément Foucault
52e87d0fa3 Fix #134320: EEVEE: Crashes when leaving camera view back to orthographic
This happened because the interpolated winmat was degenerate.
Using a fallback matrix in this case to avoid a crash.
2025-02-10 15:21:51 +01:00
Clément Foucault
5ccc02bbf4 Fix #78484: Overlay: No Wireframes in Edit Mode when Overlays are off
Added a mode check bypass for this particular case.
Added comments to explain reasoning.
2025-02-10 11:29:06 +01:00
Miguel Pozo
44d5d1b0f3 Fix #133638: Overlay-Next: X-Ray + Overlays
Alternative (cleaner) version of #134069.

Pull Request: https://projects.blender.org/blender/blender/pulls/134243
2025-02-10 10:48:59 +01:00
Campbell Barton
4276437f05 Cleanup: quiet check_spelling_* warnings 2025-02-10 19:48:42 +11:00
Clément Foucault
59db8d427f Fix #132663: Selection: Object selection is broken on Intel Macs
Copy the fix that is used by EEVEE shadow code.
2025-02-06 19:30:41 +01:00
Clément Foucault
7a98a459ef Fix #134011: Overlay: Loose wires object color in selection not visible
The changes from 29356e2bf7
fixed a readability issue with loose wire not being as prominent as
regular surface wireframe.

But also added a regression where the object color wireframe mode
made the object color imperceivable when the object is selected.

This commit fixes the issue by setting the facing factor to 0.5 for
loose wires. This way, both the theme color and object color wireframe
more are blended enough to be distinguishable and still retain the
object color hint.
2025-02-05 14:25:46 +01:00
Weizhen Huang
d2db9927ed Fix #86648: reduce ray differentials size for bump mapping
Use sub-pixel differentials for bump mapping helps with reducing
artifacts when objects are moving or when textures have high frequency
details.

Currently we scale it by 0.1 because it seems to work good in practice,
we can adjust the value in the future if it turns out to be impractical.

Ref: #122892

Pull Request: https://projects.blender.org/blender/blender/pulls/133991
2025-02-05 13:39:27 +01:00
Campbell Barton
df3d1bf506 Cleanup: use const arguments & variables where appropriate 2025-02-05 14:38:56 +11:00
Clément Foucault
6f9dedcdc4 Fix #134011: Overlay: Wireframe with object color isn't shown selected
This was an oversight and the shader was using the old API.
2025-02-04 19:19:55 +01:00
Jeroen Bakker
d486c8f655 Fix: Image Engine: Incorrect size push constant
Detected when running OpenGL compositor tests. The far near distances
push constant only attached a single float in stead of two. Fixed by
using float2.

Pull Request: https://projects.blender.org/blender/blender/pulls/134019
2025-02-04 09:50:01 +01:00
Omar Emara
e53ac805af Compositor: Avoid redundant output computations
This patch allows the compositor context to specify exactly which
outputs it needs, selecting from: Composite, Viewer, File Output, and
Previews. Previously, the compositor fully executed if any of those were
needed, without granular control on which outputs are needed exactly.

For the viewport compositor engine, it requests Composite and Viewer,
with no Previews or File Outputs.

For the render pipeline, it requests Composite and File Output, with
node Viewer or Previews.

For the interactive compositor, it requests Viewer if the backdrop is
visible or an image editor with the viewer image is visible, it requests
Compositor if an image editor with the render result is visible, it
requests Previews if a node editor has previews overlay enabled. File
outputs are never requested.

Pull Request: https://projects.blender.org/blender/blender/pulls/133960
2025-02-04 08:34:48 +01:00
Campbell Barton
95393726b0 Cleanup: quiet check_spelling_* warnings 2025-02-04 14:43:20 +11:00
Clément Foucault
7bdafde54c Fix #133138: Overlay: Assert displaying subdiv surface modifier in edit-mode
The cause was that the shader was expecting both `pos` and `nor`
attribute but only one would be extracted.
This is because the mesh has cage display on but the batch cache
wouldn't extract the `vbo.vnor`.

This patch just make sure the vertex normal just follow the same
condition as the other edit normals batches.
2025-02-03 19:04:05 +01:00
Clément Foucault
b0980a1419 Fix: Overlay: Edit Mesh: Fix normal display with GPU subdivision
Make sure the gpu subdiv shader variant is only used if there
is no cages as the requested batch has a different layout in
this case.

Also add the missing shader variant for vertex normal display
with GPU subdiv.
2025-02-03 19:04:05 +01:00
Clément Foucault
724a065cdc Fix: Overlay: Edit mesh normals display not writting to line buffer
Shader was missing a framebuffer output.
Similar to 58cb2e43a1
2025-02-03 19:04:05 +01:00
Clément Foucault
f4a214166e Fix #133754: Overlay: Geometry Nodes viewer displays blue color for instances
Shader was missing a framebuffer output.
Similar to 58cb2e43a1

On top of that was that the push constant was not
using the right overload.
2025-02-03 15:00:08 +01:00
Clément Foucault
3929a37786 Fix #131506: EEVEE: GP disappear when resolution scale > 1
Now EEVEE outputs the in-progress render depth buffer
for GPencil to intersect with.

The overlays will clear the depth buffer in such situation
and still do the depth prepass for correct intersection.

Moreover, this patch makes overlay engine not requiring
a depth prepass when run with EEVEE at 1:1 render resolution.
This avoids significant overhead of the depth prepass.

Pull Request: https://projects.blender.org/blender/blender/pulls/133971
2025-02-03 14:45:46 +01:00
Clément Foucault
aa8769599c Fix #133775: Overlay: curve attribute is not showing any color in viewport
The curves wireframes should not have any offset applied to them.
This avoid the attribute overlay failling the equal depth tests.
2025-02-03 14:25:00 +01:00
Clément Foucault
58cb2e43a1 Fix #133680: Overlay: Poor wireframe quality in Edit mode for NURBS Surface
`lineOutput` was missing from some shaders.

Pull Request: https://projects.blender.org/blender/blender/pulls/133974
2025-02-03 13:58:25 +01:00
Brecht Van Lommel
c7eb2f4204 Refactor: Remove _DEBUG, use WITH_DRAW_DEBUG instead
The `_DEBUG` flag is interfering with oneTBB, and now that there is a
`WITH_DRAW_DEBUG` option this is more appropriate.

See #115774 for more context.

Pull Request: https://projects.blender.org/blender/blender/pulls/133950
2025-02-03 12:32:04 +01:00
Campbell Barton
4cd827870d Cleanup: quiet check_spelling_* targets
Also correct outdated references to `ghash`.
2025-02-02 13:58:34 +11:00
Hans Goudey
abc8796cab Curves: Optimize edit/sculpt mode index buffer creation
Avoid function call overhead and parallelize the creation of the edit
and sculpt mode lines index buffers. Also, remove an extra index that
was added for each curve when there are no cyclic curves.

Though ideally these index buffers would be generated on the GPU, this
simple change makes this part of the GPU data building almost 5x faster
(from 1.23 ms to 0.25 ms for curves with 80 thousand points).

Pull Request: https://projects.blender.org/blender/blender/pulls/133897
2025-01-31 21:47:16 +01:00
Guillem Baldi
2536b04a21 Fix #133104: Make Indices Overlay look like Attribute Viewer
The Indices Overlay used a blue color without shadow to render the
indices in edit mode unlike the Attribute Viewer which uses white text
with shadow. So for consistency, the Indices Overlay has been changed
to use the same style.

Pull Request: https://projects.blender.org/blender/blender/pulls/133262
2025-01-31 19:01:18 +01:00
Brecht Van Lommel
569e0f5e7f Fix: Build error in eevee tests after recent cleanups 2025-01-31 18:46:01 +01:00
Clément Foucault
12748e5521 Fix: Overlay: Add back support for empty scale in armature custom shape
This function was not ported during the overlay-next project.
2025-01-31 18:26:44 +01:00
Clément Foucault
a50e07a533 Fix #133699: Overlay: Empty as Bone custom shape display error
Add workaround path to process the vertices the same way as
the `overlay_extra_vert` shader.
We nudge the non-origin vertices in the batch to be able
to not require loading the VCLASS attribute. Thus making
the change local to the shader and not requiring another
shader variant.
2025-01-31 18:26:44 +01:00
Brecht Van Lommel
61eedabae9 Cleanup: Various clang-tidy warnings in draw
Pull Request: https://projects.blender.org/blender/blender/pulls/133734
2025-01-31 17:03:18 +01:00
Omar Emara
75f1cbb6dd Refactor: Clarify code around scheduling composite nodes
There is a special case in the compositor code where viewer nodes are
treated as composite nodes. This patch renames relevant methods and
updates comments to clarify this use case.

Pull Request: https://projects.blender.org/blender/blender/pulls/133811
2025-01-31 07:43:00 +01:00
Jacques Lucke
e1753900b7 BLI: improve UTF-8 safety when copying StringRef to char buffers
Previously, there was a `StringRef.copy` method which would copy the string into
the given buffer. However, it was not defined for the case when the buffer was
too small. It moved the responsibility of making sure the buffer is large enough
to the caller.

Unfortunately, in practice that easily hides bugs in builds without asserts
which don't come up in testing much. Now, the method is replaced with
`StringRef.copy_utf8_truncated` which has much more well defined semantics and
also makes sure that the string remains valid utf-8.

This also renames `unsafe_copy` to `copy_unsafe` to make the naming more similar
to `copy_utf8_truncated`.

Pull Request: https://projects.blender.org/blender/blender/pulls/133677
2025-01-29 12:12:27 +01:00
Philipp Oeser
bf2264a3b8 Cleanup: typo 2025-01-29 10:09:59 +01:00
Clément Foucault
bb72bd509e Fix #88185: EEVEE: Collection Holdout not working properly in Blended mode
This was caused by using the same factor as in dithered.
But dithered already has the transparency applied from
the dithered transparency. The transparency needs to be
applied to holdout in forward.
2025-01-28 17:48:33 +01:00
Hans Goudey
7d6e098ca1 Cleanup: Remove unused includes in blenkernel
Pull Request: https://projects.blender.org/blender/blender/pulls/133688
2025-01-28 15:27:34 +01:00
Iliya Katueshenock
c646feac47 Cleanup: BLI: Delete incorrect dimension up-cast via pointer constructor
Since one user-defined conversion operator is allowed during implicit conversion,
 and after this conversion here is a constructor which can accept result
of conversion, there was a backdoor for a vector types to up-cast their
dimensions via cast to pointer type of a component of a vector. Since it was
implicit and non-intentional it led to buffer overflows.

Pull Request: https://projects.blender.org/blender/blender/pulls/132927
2025-01-27 18:38:14 +01:00
Jesse Yurkovich
ca491185f8 Fix #132876: Remove assert and use proper limit when drawing instances
The assert would fire for perfectly valid scenes and the limit used, as
well as the cast, was incorrect.

Pull Request: https://projects.blender.org/blender/blender/pulls/133561
2025-01-27 18:28:20 +01:00
Omar Emara
2028bc8d7d Compositor: Add derived resources optimization
This patch introduces a new Derived Resources concept to the compositor.
Derived resources are resources that are computed from a particular
result and cached in it in case it is needed by another operation, which
can greatly improve performance in some cases at the cost of more memory
usage.

The first use case is to store denoised versions of the Denoising Albedo
and Denoising Normals passes if auxiliary pass denoising is enabled in
the denoise node. Consequently, multi-pass denoising setups where the
same auxiliary passes are used in multiple denoise nodes should be much
faster due to caching of the derived resources.

This implementation has the limitation that it can't preemptively
invalidate the cache when the derived resources are no longer needed to
free up memory. This requires a special resource tracking mechanism that
need to happen during node tree compilation, and will be submitted
later. The limitation is not significant in the particular derived
resources that is currently implemented. Since the auxiliary passes are
rarely used outside of denoising.

Fixes #131171.

Pull Request: https://projects.blender.org/blender/blender/pulls/125671
2025-01-27 14:58:09 +01:00
Jeroen Bakker
8c014d0a32 Fix #133646: Grease Pencil: Crash when disabling simplified anti-aliasing
Uninitialized textures are bound when simplified anti-aliasing is disabled.
The textures are initialized later. Fixing by referencing the textures
similar to the other passes.

Pull Request: https://projects.blender.org/blender/blender/pulls/133648
2025-01-27 14:37:11 +01:00
Miguel Pozo
956236f7d4 Fix: Draw: Add missing shaders to DRW_subdiv_free 2025-01-24 16:01:48 +01:00
Jeroen Bakker
9db5f61403 Fix: DrawManager: Missing include for draw manager tests
`draw_manager_testing.hh` was needed otherwise the compiler would print
a warning.

Pull Request: https://projects.blender.org/blender/blender/pulls/133538
2025-01-24 12:57:13 +01:00
Jacques Lucke
2fda20e1db Fix #132099: crash when using same geometry on objects with different material counts
The core issue was that the geometry batch cache (e.g. `MeshBatchCache` or
`PointCloudBatchCache`) was dependent on the object. This is problematic when
the the same geometry is used with multiple different objects because the cache
can't be consistent with all of them.

Fortunately, the only thing that was retrieved from the object was the number of
material slots, so if that can be avoided we should be fine. We can't just use
the number of material slots stored on the geometry because that may have no
material slots but still has material indices which are overridden on the object
level.

The solution is to take make the number of materials for a geometry only
dependent on the actual `material_index` attribute and not on the number of
available slots. More specifically, we find the maximal referenced material
index and handle that many materials. This number does not depend on how many
material slots there are on the object, but it still allows the object to
override materials slots that the mesh references.

A downside is that the maximum material index has to be computed which often
requires an iteration over the mesh. Fortunately, we can cache that quite easily
and the computation can be done in parallel. Also we are probably able to
eagerly update the material index in many cases when it's set instead of
computing it lazily. That is not implemented in this patch though.

The largest part of the patch is making the maximal material index easily
available on all the geometry types. Besides that, the material API is slightly
replaced and the drawing code now makes use of the updated API.

Pull Request: https://projects.blender.org/blender/blender/pulls/133498
2025-01-24 12:05:25 +01:00
Jonas Holzman
b701ba6554 macOS: Fix WITH_GPU_DRAW_TESTS build linking error
The issue was twofold, the `draw_tests` library was missing a link
dependency on `gpu_tests`, and the `gpu_tests` would only be generated
if `WITH_GPU_BACKEND_TESTS` or `WITH_VULKAN_BACKEND` were also ON due
to a superflous condition.

Pull Request: https://projects.blender.org/blender/blender/pulls/133511
2025-01-24 11:00:34 +01:00
Clément Foucault
f8c1154e7f Fix: DRW: Broken compilation because of missing header 2025-01-23 21:30:07 +01:00
Clément Foucault
160d9508fe Fix: Overlay: Broken GPU compilation tests
The clip variation was added to a common create info
which should not be compiled.
2025-01-23 21:30:07 +01:00
Clément Foucault
cfd5d9e3ad Fix #132895: Overlay: Dashed/flickering wireframe overlay on solid shading
This add back the NDC offset that was present in the legacy overlay.

But instead of adding a new view for it, we add `ndc_offset_factor`
to `State` to simplify wire offseting

Instead of modifying the projection matrix, we compute the unit
offset and pass it to the shader which choose the appropriate
factor to apply to the vertex position.

The value is put inside `State` so that it can be referenced
easily by multiple overlays.
Later on (once we move the global UBO inside Overlay) we can
move this to a UBO.

This only implements it for wireframe and edit mesh vert and
edges.

Note: that there seems to be some code duplication with the
edit mesh vertex code. That's to be tackled in another commit.

Pull Request: https://projects.blender.org/blender/blender/pulls/133433
2025-01-23 18:08:20 +01:00