Commit Graph

8093 Commits

Author SHA1 Message Date
Clément Foucault
d15ce8dff5 Fix: EEVEE-Next: Displacement doesn't affect normal map node
While this might not always be the expected behavior,
this at least make it consistent with Cycles.

Fix #122184
Rel #122212
2024-05-24 15:35:51 +02:00
Jason Fielder
81a1570cf5 EEVEE Next: Add imageStore/LoadFast ops to Raytrace passes
Add fast image writing and reading variants for RT passes.
These variants do not perform range checking on values
and should only be used in cases where the written texel is
guaranteed to be in range. This eliminates additional
branching and simplifies shader logic.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/121117
2024-05-24 12:51:21 +02:00
Jason Fielder
f20ad70c08 EEVEE Next: Add imageStore/LoadFast ops to Renderpasses
Add fast image writing and reading variants for render passes.
These variants do not perform range checking on values
and should only be used in cases where the written texel is
guaranteed to be in range. This eliminates additional
branching and simplifies shader logic.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/121116
2024-05-24 12:41:47 +02:00
Bastien Montagne
7f1a8f9956 Fix #122162: GPv3: always clamp stroke thickness to positive values for drawing.
While having negative values in the data itself seems fine (at least
there is nothing in the design forbidding it, and it was also allowed in
GPv2 data), drawing code should only accept positive values, and clamp
negative ones to zero:
  * It matches GPv2 behavior.
  * Drawing code uses negative values as some sort of 'flag' for
    rounded tips of strokes.

Note: This is a follow-up of !120840.

Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/122173
2024-05-24 10:02:59 +02:00
Hans Goudey
da1ea4cdd1 Revert "Draw: Avoid temporary copy for mesh triangulation index buffer"
This reverts commit 108ab1df2d.

This causes issues when duplicating objects that I don't have time
to investigate right now.
2024-05-23 23:43:34 -04:00
Sergey Sharybin
2a5892e013 Fix compilation error after recent cleanup 2024-05-23 22:17:36 +02:00
Clément Foucault
f46e3d1067 Fix: EEVEE-Next: No shading from lights for volume only scenes
The issue was that the shadow module was never setup by any
other pipeline before the volume lighting pass.

Fix #121971
2024-05-23 21:20:57 +02:00
Hans Goudey
427b356b87 Cleanup: Rename mesh render data orig index variables 2024-05-23 15:19:10 -04:00
Hans Goudey
3b93e8adca Cleanup: Mesh: Fix complicated index retrieval for loose points 2024-05-23 14:02:23 -04:00
Hans Goudey
108ab1df2d Draw: Avoid temporary copy for mesh triangulation index buffer
The mesh triangulation data is stored in CPU memory with the same format
as the triangles GPU index buffer. Because of that we can skip creating a
temporary copied owned by the GPU API. One way to do that is to just
upload the data directly and avoid keeping a reference to it. However, we
can only upload GPU data from the main thread with OpenGL, so instead
reference the data and keep track of whether to free it.

When drawing a mesh with a single material and 1.8 million faces, this
change gives a 12-15% improvement in framerate, from about 32 to 37 FPS.

Part of #116901.

Pull Request: https://projects.blender.org/blender/blender/pulls/122175
2024-05-23 19:59:36 +02:00
Clément Foucault
2e3ad7404a Fix: EEVEE: Broken bias for sunlights
The pixels size was not computed in the right space.

This is the easy fix as refactoring the directional
shadows is too risky/time consuming right now.

Fix #121641
2024-05-23 19:30:43 +02:00
Clément Foucault
f968c99850 Fix: EEVEE: Shadow: Huge performance drop caused by local lights
Punctual shadow maps were never tagged as updated, constantly
refreshing themselves.
2024-05-23 17:17:42 +02:00
Clément Foucault
8b65908574 Fix: EEVEE-Next: Missing shadow near area light
This was caused by wrong assumption that `shadow_radius`
is also a radius for area light. To avoid the confusion,
use a new property for area light shadow scaling.
2024-05-23 17:17:42 +02:00
Clément Foucault
40b4447f0a Fix: EEVEE-Next: Broken Area light shadow
This removes the area light shadow clipping.
This had issues and we are now not using
any shifting behind the area light.

Fix 122108
2024-05-23 15:35:16 +02:00
Hans Goudey
c7c2a9c4c9 Fix #122154: Loose edges invisible, wireframe shading mode crashes
When there are no "extractors" the dependencies didn't work properly to
calculate the loose geometry. This is similar to 30ec31b550.
2024-05-23 08:30:16 -04:00
Jeroen Bakker
6fbd287493 EEVEE-Next: Fix use after free when syncing curves/point clouds.
In `SyncModule::sync_curves/sync_point_cloud` the material variable
can be used after it has been freed. The cause is that cryptomatte
can request a new material, which might trigger a relocation of the
references material.

This PR fixes this by doing the shadow sync before the cryptomatte
sync.

Pull Request: https://projects.blender.org/blender/blender/pulls/121909
2024-05-23 12:04:47 +02:00
Jeroen Bakker
cc8dccb83b EEVEE-Next: Fix incorrect shift in shadowing
Grid offset of a tile can be negative. Shifting of negative numbers
is implementation dependent. This PR changes it to a multiplication.

Pull Request: https://projects.blender.org/blender/blender/pulls/121910
2024-05-23 12:04:20 +02:00
Campbell Barton
d1516a44f2 Fix use of uninitialized memory in EEVVEE next 2024-05-23 15:30:58 +10:00
Hans Goudey
7be5802187 Cleanup: Remove outdated comment
Pull Request: https://projects.blender.org/blender/blender/pulls/122122
2024-05-22 23:27:22 +02:00
Hans Goudey
a778e3ddc1 Refactor: Avoid "extractors" abstraction for mesh normals GPU data
Part of #116901.
The only non-obvious part is changing from using the `MR_DATA_LOOP_NOR`
flag as a signal to calculate normals and store them in `MeshRenderData` to
a more explicit check that the normals buffer is requested. In the future hopefully
these dependencies will be refactored to be part of the task graph instead.
2024-05-22 15:40:58 -04:00
Hans Goudey
30ec31b550 Refactor: Tweak mesh render data normals update
Move the responsibility of deciding whether to calculate face corner
normals closer to the buffers and iteration, in preparation for replacing
the `data_flag` and `iter_flag` abstractions from the extractors system.
2024-05-22 15:40:58 -04:00
Hans Goudey
bce210578b Mesh: Replace extractor loop for BMesh normals extraction
Part of #116901. Main benefits to this change are reduced function call
overhead and a simpler hot loop when face corner normals are extracted.
Code duplication is also reduced through use of templates. The downside
is that the access patterns aren't clearly better for the BMesh case where
a lot of data is stored array-of-structs style.
2024-05-22 15:40:58 -04:00
Hans Goudey
99bda7670b Cleanup: Remove unused mesh extractor dependency flag
Mesh triangulation is retrieved with the typical `corner_tris()` lazy
calculation function rather than calculated in a special task now.
2024-05-22 15:40:58 -04:00
Hans Goudey
957c2f3df2 Mesh: Avoid calculating vertex normals for drawing flat-shaded meshes
Make better use of the lazy calculation by avoiding storing a reference
to the calculated normals in the mesh render data. This reduces memory
usage from 282 MB to 225 MB in a test file with about 2 million faces.
2024-05-22 15:40:58 -04:00
Hans Goudey
8d4da6063a Draw: Replace extractor abstraction for mesh positions extraction
Part of #116901. The remaining change was to change the BMesh iteration
to not use the extractor callbacks.
2024-05-22 15:40:57 -04:00
Hans Goudey
556c321500 Cleanup: Rearrange code in in mesh draw position extraction
Extract mesh logic to a separate function, and reorder subdiv loose
geometry extraction function. This is mainly to make a future diff
clearer. Also rename a variable to use more typical naming.
2024-05-22 15:40:57 -04:00
Clément Foucault
9ae4f8a598 Fix: EEVEE-Next: Sun: Incorrect shadow tracing distance
This was happening for any surface behind the near plane.
The sample bias is pushing receivers along normals so it
was visible on lights near the clip plane.

Fix #121815
2024-05-22 20:29:15 +02:00
Clément Foucault
86c56050f1 Fix: EEVEE-Next: Broken sun shadows when baking
The updated light buffer was not updated to GPU after
computing the correct view bounds phase.
2024-05-22 19:29:35 +02:00
Raul Fernandez
304b862d28 Refactor: Split create_index_grids() into 2 separate functions
Refactor subtask of #121929

Simplified void create_index_grids(const PBVH_GPU_Args &args, bool do_coarse)
with 2 extra functions that account for 2 code path generating faces indices.
This increase code readability and reasoning about its behavior instead of having a single uber function.

Pull Request: https://projects.blender.org/blender/blender/pulls/122020
2024-05-22 18:02:01 +02:00
Hans Goudey
07eac30070 Mesh: Points index buffer improvement
A continuation of #116901. This one doesn't have a performance impact
in my testing. It also adds a bit more code compared to main so it isn't
really obviously "better" like the previous refactors. However it does
get us closer to removing the "extractors" callback iteration loop
(`edit_data` is the only other enabled by default), and I'd argue that
the final code is easier to iterate on in the future since it's more
self-contained.

I made an effort to avoid storing restart indices in the index buffers.
Though this requires a bit more calculation on the CPU (particularly
because the hidden gaps in the IBO need to be compressed out), it
reduces overall CPU->GPU traffic and removes the need to strip the
restart indices on Metal.

Pull Request: https://projects.blender.org/blender/blender/pulls/122084
2024-05-22 16:08:55 +02:00
Clément Foucault
692af3f9aa Fix: EEVEE-Next: Sampling of ortho sun lights
This was broken when introducing the new lod bias
system. This is not compatible with shadow cascade.

Add TODO to implement the bias on CPU when choosing
the Level of detail of the cascade.
2024-05-22 14:45:19 +02:00
Clément Foucault
74a7099160 Cleanup: EEVEE-Next: Shadow
- Use math API for projection
- Avoid uninitialized value even if unused.
2024-05-22 14:07:28 +02:00
Clément Foucault
c3846ac4f3 Fix: EEVEE-Next: Shadow: Broken sun shadow in orthographic camera
This was caused by `int2 * float` returning a `int2`.
Casting before the operation does the right thing.
2024-05-22 14:07:28 +02:00
Hans Goudey
d93b27a12e Subdiv: Simplify GPU subdivision loose geometry handling
The main change is avoid storage of redundant data in the subdivision
draw cache, mainly by replacing reverse lookup from subdivided edge to
coarse edge. This way loops are structured as iteration over coarse
edges instead of iteration over subdivided edges with optional behavior
for vertices with matching base mesh faces. With that inversion the
information in the draw cache is trivial (or duplicated from an array
in `MeshRenderData`), so it's all removed, except for the subdivided
loose edge positions. That array is also shrunk though, by not
duplicating positions in between each subdivided edge. Its calculation
is more efficient for the same reason too.

Overall, besides code simplification, the effect should be lower
overhead with loose edges with GPU subdivision. Admittedly this isn't
a very important use case, but it's part of a general refactor trying
to use better data oriented design in this area (#116901).

Pull Request: https://projects.blender.org/blender/blender/pulls/122071
2024-05-21 21:46:11 +02:00
Clément Foucault
69e4aac784 EEVEE-Next: Volume Light-Probe: Baking shadow not synced with final camera
We call the `shadow.end_sync()` another time when running
the baking pipeline so that the sun shadow maps can
use the correct camera setup and scene bounds.
2024-05-21 20:26:11 +02:00
Clément Foucault
01308713ff Fix: EEVEE-Next: Shadow: Avoid uninitialized grid_shift
This value was previously used for tagging as dirty.
This is not the case anymore so no reason to not
set it.
2024-05-21 20:26:11 +02:00
Clément Foucault
8dcf6f43bf Fix: EEVEE-Next: Disable sun extraction during light baking
Otherwise we record the sun as direct lighting.
The HDRI is still shadowed during baking because
fo the surfel representation.
2024-05-21 20:26:11 +02:00
Clément Foucault
2eda9ce302 Fix: EEVEE-Next: Avoid sun direction being null
This avoids NaN shadow matrices later on.
2024-05-21 20:26:11 +02:00
Hans Goudey
5c44f9bddc Cleanup: Use references in mesh draw cache 2024-05-21 09:09:07 -04:00
Hans Goudey
e5d3ee2b04 Cleanup: Allocate mesh batch cache subdiv cache as non-trivial struct
For future use of RAII types like `Array` and `Vector`.
2024-05-20 23:07:14 -04:00
Hans Goudey
c5bec86e71 Cleanup: Use C++ types, return values for loose edge subdivision 2024-05-20 23:07:14 -04:00
Clément Foucault
8f9fa07cc1 Fix: EEVEE-Next: Fix compilation error in GLSL
`common` is reserved keyword apparently
2024-05-20 22:44:11 +02:00
Hans Goudey
1910bb1a95 Cleanup: Correct mesh draw cache struct names 2024-05-20 15:40:47 -04:00
Clément Foucault
8d4576d165 Fix: EEVEE-Next: Discrepancy in GGX pdf and eval function 2024-05-20 19:32:05 +02:00
Hans Goudey
5733f6e906 Cleanup: Move mesh evaluation functions to C++ namespace
And move them out of the DerivedMesh header so that can just be used
for the actual DerivedMesh code.
2024-05-20 13:11:18 -04:00
Clément Foucault
d4b4107d32 EEVEE-Next: Use PDF instead of BSDF for denoising
This adds PDF computation for eval functions as
well as using PDF for spatial denoising.

This seems to not do have any impact but at least
it seems more sounds than bsdf / pdf. Also
computing pdf is cheaper than whole bsdf.

Pull Request: https://projects.blender.org/blender/blender/pulls/121858
2024-05-20 18:13:09 +02:00
Omar Emara
434ad164a8 Fix #121940: Viewport compositor works on part of render
The Viewport Compositor only operates on part of the render when doing
viewport rendering when in camera view. That's because the code wrongly
assumed camera offset even when doing viewport renders, which do not
exist in that case.
2024-05-20 14:27:31 +03:00
Hans Goudey
85e5f38279 Cleanup: Use lambda instead of simple callback
Pull Request: https://projects.blender.org/blender/blender/pulls/121980
2024-05-20 02:58:15 +02:00
Hans Goudey
0ef1541834 Cleanup: Use C++ arrays in mesh batch cache 2024-05-20 02:58:13 +02:00
Hans Goudey
da32aeb455 Cleanup: Use C++ types for various mesh array arguments
Also remove duplicated code for creating an array of BMesh positions
2024-05-20 02:58:13 +02:00