Commit Graph

7096 Commits

Author SHA1 Message Date
Campbell Barton
71b1712d79 Cleanup: spelling in comments 2023-10-06 12:50:27 +11:00
Miguel Pozo
40f93532bb Fix: EEVEE-Next: Irradiance Grid baking
Regression caused by e2cef1c713
2023-10-05 19:37:04 +02:00
Jason Fielder
57a3ab29cc Metal: EEVEE Next: Optimize Virtual shadow maps for Apple Silicon
Optimization of EEVEE Next's Virtual Shadow Maps for TBDRs.
The core of these optimizations lie in eliminating use of
atomic shadow atlas writes and instead utilise tile memory to
perform depth accumulation as a secondary pass once all
geometry updates for a given shadow view have been updated.

This also allows use of fast on-tile depth testing/sorting, reducing
overdraw and redundant fragment operations, while also allowing
for tile indirection calculations to be offloaded into the vertex
shader to increase fragment storage efficiency and throughput.

Authored by Apple: Michael Parkin-White

Co-authored-by: Michael Parkin-White <mparkinwhite@apple.com>
Co-authored-by: Clément Foucault <foucault.clem@gmail.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/111283
2023-10-05 19:02:39 +02:00
Bastien Montagne
acde11f159 Cleanup: wmJobs: Use defined startjob callback type everywhere.
For some reasons, `WM_jobs_stop` and `WM_jobs_kill` would use their own
'type' of function pointer - and not even a matching one!

Among (many) other reasons why this was bad, it required very stupid
casting from code using these functions - and made editing wmJob `startjob`
signature needlessly complicated.
2023-10-05 16:13:15 +02:00
Miguel Pozo
b4de568cc4 EEVEE-Next: Tests support
Enable tests for EEVEE Next.

As a workaround for allowing the use of EEVEE Next (still an
experimental feature) with `--factory-startup`, `arg_handle_engine_set`
enables the feature when `-E BLENDER_EEVEE_NEXT` is used.
In addition, EEVEE Next is always registered, so it's available when
calling `WM_init`.
If it's actually disabled, it will be immediately unregistered after that.

Notes:
- `get_gpu_device_type` always fails with error:
  > GPU API is not available in background mode
- Setup and tests are the same as EEVEE. There are many tests that
  only make sense for Cycles, and many EEVEE Next features that are
  not actually tested.

Pull Request: https://projects.blender.org/blender/blender/pulls/112161
2023-10-05 16:02:49 +02:00
Jeroen Bakker
355f457cd4 EEVEE-Next: Fix Reflection Probes Sampling
When the scene has reflection probes the sampling would be reset
each frame making the viewport always redraw and not resolve.

The reason was a logic error that was introduced when we introduced
a less flickering update for reflection probes.

Pull Request: https://projects.blender.org/blender/blender/pulls/113281
2023-10-05 11:27:31 +02:00
Jeroen Bakker
f1c0ec3c4b EEVEE-Next: Remove Unused Resources in Probe Capture Pipeline
The probe capture pipeline still had some bindings from the previous
implementation. This could result in overwriting the `gbuf_header_tx`
with the incorrect texture as it was sharing the same binding.

This PR removes the unused light probe bindings.

Pull Request: https://projects.blender.org/blender/blender/pulls/113276
2023-10-05 10:52:47 +02:00
Jeroen Bakker
3d1da2532b EEVEE-Next: Fix Crash With Exact 128 Resources
When the scene has exact 128 resources or a multiple in the scene
Blender crashes as the velocity buffer doesn't allocates the
right amount of space inside its buffer.

Pull Request: https://projects.blender.org/blender/blender/pulls/113277
2023-10-05 10:52:26 +02:00
Campbell Barton
6f23344a7a Merge branch 'blender-v4.0-release' 2023-10-05 13:58:49 +11:00
Campbell Barton
9d20632925 Cleanup: ensure trailing newline, delete trailing space 2023-10-05 13:57:14 +11:00
Germano Cavalcante
72a52520db Select Engine: Use C++ vector types for arrays
No functional changes.
2023-10-04 14:44:46 -03:00
Germano Cavalcante
99a3a4a330 Cleanup: Move select engine headers to C++
See #103343

tmp
2023-10-04 14:34:12 -03:00
Omar Emara
17bdf18397 Realtime Compositor: Implement Keying Screen node
This patch implements the Keying Screen node for the Realtime
Compositor. Draw data was introduced to the Movie Clip ID to allow
caching of the keying screen.

Pull Request: https://projects.blender.org/blender/blender/pulls/113055
2023-10-04 07:35:07 +02:00
Clément Foucault
bcf0c117a0 Revert "EEVEE-Next: Fix DupliObject ObjectKey"
This reverts commit 641dff8bf4.
2023-10-03 18:03:27 +02:00
Brecht Van Lommel
a2da71d3a9 Merge branch 'blender-v4.0-release' into main 2023-10-03 16:13:12 +02:00
Brecht Van Lommel
8562cecf1b Fix #112991: crash switching from Hydra Storm viewport to other renderer
The viewport render engine was freed outside the DRW OpenGL context, which
resulted in Storm deleting a VAO from another OpenGL context.
2023-10-03 16:12:45 +02:00
Clément Foucault
1b1b1a19bf EEVEE-Next: Add world clip plane support
This add a way to use a software clip plane in the
prepass shader (surf_depth_frag.glsl).

The benefit of using this instead of gl_ClipDistance
is that the rasterization pattern is given to match.
Which means that only the prepass shader have to use
this.

This is slow and should only be enabled when needed.
2023-10-03 16:09:12 +02:00
Clément Foucault
23e4cbc86a EEVEE-Next: Split curve attributes to their own interface
This avoid poluting shader interfaces which might not be
optimized by the compilers.
2023-10-03 16:09:12 +02:00
Jeroen Bakker
ee92151c3a Overlay-Next: Fix Copy Uninitialized Texture
Overlay engine is currently responsible to initialize the framebuffers
depth_in_front texture. This is a hack and hasn't been ported to
Overlay-Next (yet). This PR skips copying the depth_in_front texture
when it isn't initialized yet.

Issue detected when working on Vulkan backend due its more
strictness.

Pull Request: https://projects.blender.org/blender/blender/pulls/113188
2023-10-03 07:27:36 +02:00
Campbell Barton
9c018def3e Cleanup: spelling in comments 2023-10-03 11:24:48 +11:00
Campbell Barton
74bb280df5 Fix incorrect sizeof argument to memcmp in EEVEE's ObjectKey comparison 2023-10-03 11:14:08 +11:00
Germano Cavalcante
c7d9e7be81 Merge branch 'blender-v4.0-release' into main 2023-10-02 17:26:45 -03:00
Germano Cavalcante
e7ba91a6f3 Fix #113130: Versioning error in snap type in animation editors
Caused by fb556c75df

The ideal would be to increase the version file, but this would make
the versioning code a bit messy, and it was a recent error
(it shouldn't affect many users).
2023-10-02 17:26:07 -03:00
Miguel Pozo
641dff8bf4 EEVEE-Next: Fix DupliObject ObjectKey
`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 use `DRW_drawdata_get`.
* 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/112544
2023-10-02 16:52:56 +02:00
Miguel Pozo
68c69a99d3 Merge branch 'blender-v4.0-release' 2023-10-02 16:45:55 +02:00
Miguel Pozo
0ed6172833 Fix #112164: Draw: Circle select tool low performance
Since garbage collection of texture pools happens every time
`drw_manager_init` is called, interleaved calls to different
`DRW_draw`/`DRW_render` functions can result in a constant cycle of
creating/releasing textures.

This PR changes texture pools to only release textures that have not
been used for N garbage collection cycles.
I chose 8 as default since I think is high enough to avoid the issue
while it's unlikely to cause any major spike in memory consumption.

Pull Request: https://projects.blender.org/blender/blender/pulls/113024
2023-10-02 16:43:48 +02:00
Clément Foucault
eda7926834 DRW: Add SubPassTransition pass command 2023-10-01 18:01:15 +02:00
Clément Foucault
508fa8d4b8 Fix #112963: EEVEE: Wrong specular from lights
This was caused by the wrong LUT being sampled.

This cleans-up the utilTex layer define usage
and implement the small optimization marked
as todo.
2023-09-27 23:19:18 +02:00
Campbell Barton
5964ff7acb Fix missed header change from a9f0d19197 2023-09-27 16:53:45 +10:00
Campbell Barton
a9f0d19197 Fix memory leak with volume shaders with the workbench engine
../lib/tests/render/volume/smoke_fire.blend was leaking memory,
reloading leaked more memory each time.
2023-09-27 16:50:48 +10:00
Campbell Barton
46263a85ab Cleanup: spelling in comments 2023-09-27 13:03:29 +10:00
Clément Foucault
f966205022 EEVEE-Next: Add tracing options for diffuse rays
Also fixes diffuse surface always tracing
even when tracing is off.
2023-09-26 23:46:08 +02:00
Clément Foucault
3a4fc2c94e EEVEE-Next: Shadow Map Tracing Initial Implementation
Shadow Map Ray Tracing is a technique that ray cast against the shadow
depth buffer. The technique is described in "Soft Shadows by
Ray Tracing Multilayer Transparent Shadow Maps".
Note that we only implement the single layer approach since storing
multiple depth is prohibitively expensive.

Pull Request: https://projects.blender.org/blender/blender/pulls/111809
2023-09-26 23:42:40 +02:00
Hans Goudey
c095962d06 Fix #112900: Asset displaying mesh with hiding and no material indices
The case when there were no material indices, multiple materials, and
the mesh used hiding wasn't handled after 55970fa367.
This is a simple parallel loop adding up the non-hidden triangles.
2023-09-26 15:10:22 -04:00
Miguel Pozo
b56d39bdcc EEVEE-Next : Object visibility settings for probes
Replace per-probe visibility collections with global per-object probe
visibility settings.

Pull Request: https://projects.blender.org/blender/blender/pulls/112845
2023-09-26 20:37:15 +02:00
Miguel Pozo
f07542d8cb EEVEE-Next: Fix Hair and Curves motion vectors
Hair and Curves need to call `DRW_curves_update` before
`geometry_steps_fill`, otherwise the copied geometry is just
uninitialized data.
However, doing so triggers an assertion:
> DRW_render_instance_buffer_finish had not been called before drawing.

This PR ports the `DRW_hair/curves_pos_buffer_get` functions to the new
`draw::Manager` API, so it can be called at any arbitrary point.
It also changes `VelocityModule::geometry_map` to use `uint64` keys
instead of `ID` pointers, since the same particle system can be used on
different objects and have multiple geometries.

Notes:
* The new functions are only used for
  `VelocityModule::step_object_sync` on image renders. Using them
  elsewhere would require modifying the old draw manager to do the
  init/update/free setup.
* Only the compute shader version has been ported.

Pull Request: https://projects.blender.org/blender/blender/pulls/112425
2023-09-26 19:55:46 +02:00
Miguel Pozo
049cb479b2 EEVEE-Next: Irradiance Grid clip distance and probe alignment
Implement a clip distance to irradiance grids, so surfaces farther than
the threshold don't generate surfels.
Align the capture view matrix to the probe rotation.

Pull Request: https://projects.blender.org/blender/blender/pulls/112863
2023-09-26 19:45:41 +02:00
Miguel Pozo
a6536ca9c8 Fix: EEVEE-Next: Irradiance Grid minor fixes
Pull Request: https://projects.blender.org/blender/blender/pulls/112841
2023-09-26 19:27:30 +02:00
Clément Foucault
e4c89baf53 EEVEE-Next: Port subsurface to compute shader
This makes the SSS processing more isolated to avoid
side effects in other passes.
Also this allow more optimization using LDS.

The radiance buffer is created by a setup phase using
direct and indirect lighting.

Splitting this into its own compute pass also fixes
a pass merging issue on Metal.

Pull Request: https://projects.blender.org/blender/blender/pulls/112901
2023-09-26 15:52:35 +02:00
Campbell Barton
077832e063 Cleanup: spelling in comments 2023-09-26 19:50:48 +10:00
Clément Foucault
a5741e0561 EEVEE: Change do_multiscatter to a bool internally
This avoid confusion outside of the shader node GLSL code.
The issue also is that Metal allow float to cast to bool
implicitly but this create a compilation error on
OpenGL.
2023-09-26 11:48:51 +02:00
Jeroen Bakker
8f9c14145e EEVEE-Next: Fix World Reflection During Raytracing
Scenes that only uses a world probe would didn't work. Raytracing
would look for the closest light probe, didn't find any and shader
would use undefined behavior to sample in the reflectionProbes texture.

In some cases this resulted in correct results when the world was
located on layer 0 with subdivision 0. In any other case this would
sample incorrect incoming light what lead to black reflections.

This PR fixes this by returning the world probe when no nearest light
probe cound be found.

Pull Request: https://projects.blender.org/blender/blender/pulls/112893
2023-09-26 11:19:04 +02:00
Jeroen Bakker
aebcec0493 EEVEE: Fix Shader Compilation
Pull Request: https://projects.blender.org/blender/blender/pulls/112890
2023-09-26 10:24:47 +02:00
Clément Foucault
0a4fa62f51 EEVEE: Add support for metallic F82 tint
This adds a new entry to the split sum LUT to isolate
the effect of the F82 tint.

The application of the tint part is similar to cycles
and uses the same way for precomputing the `b` factor.

Results matches almost perfectly to the extent of the
split sum approximation.

Note that this removes the unused LTC MAG LUT for
EEVEE next to make space for the new table. It can still
be added back if needed.

Pull Request: https://projects.blender.org/blender/blender/pulls/112881
2023-09-26 10:16:39 +02:00
Hans Goudey
916d4c9d9b Cleanup: Move BKE_screen.h to C++
See #103343
2023-09-25 17:53:11 -04:00
Jason Fielder
ee03bb38cb Metal: Add support for atomic image operations
Texture Atomics have been added in Metal 3.1
and enable the original implementations of
shadow update and irradiance cache baking.

However, a fallback solution will be
required for versions under macOS 14.0 utilising
buffer-backed textures instead.

This patch also includes a stub implementation if
building/running on older macOS versions which
provides locally-synchronized texture access in
place of atomics. This enables some effects to be
partially tested, and ensures non-guarded use
of imageAtomic functions does not result
in compilation failure.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/112866
2023-09-25 21:56:46 +02:00
Miguel Pozo
499c39cfb9 Fix #112867: Workbench: Final render fails to render hair
Add missing calls to the old draw manager functions.
2023-09-25 21:15:56 +02:00
Miguel Pozo
0dfcde3fde Fix: EEVEE-Next: Ensure volume property textures are cleared
Clear volume property textures when there's no valid world volume
shader.

Pull Request: https://projects.blender.org/blender/blender/pulls/112871
2023-09-25 19:54:51 +02:00
Brecht Van Lommel
1d265eed5d Shaders: rename Specular to Specular IOR Level in Principled BSDF
To clarify that this is no longer the primary control, but rather
and adjustment on IOR.

Ref #99447
Ref #112552
2023-09-25 19:51:22 +02:00
Lukas Stockner
6e2f29b421 Shader: change Specular input on Principled BSDF to affect IOR
This keeps the behavior similar to the Disney BRDF, where 0.5
is neutral and lower/higher values respectively decrease/increase
the dielectric specular. But it's more correct in that it's not
an arbitrary scale on Fresnel, but rather adjusting the IOR.

Ref #99447
Ref #112848

Pull Request: https://projects.blender.org/blender/blender/pulls/112552
2023-09-25 19:51:02 +02:00