Commit Graph

4216 Commits

Author SHA1 Message Date
Miguel Pozo
b006bfe10b Fix: EEVEE-Next: Deferred tile stencil compilation 2023-12-07 17:39:13 +01:00
Miguel Pozo
3360b6344f Fix #115289: EEVEE-Next: Negative scale lights
There was code for ensuring correct handedness,
but it wasn't working since vec.xyz() doesn't return by reference.
2023-12-07 17:08:23 +01:00
Clément Foucault
2cf64b9100 EEVEE-Next: Add tile deferred lighting
This adds a tile classification pass to the gbuffer.
This is then compact into streams of tiles for each
complexity level of lighting evaluation.

The benefit over a simpler approach of using a per
object stencil value is that we can have a per
tile granularity of the lighting complexity.

To avoid quad overshading, we use a prepass that
tags different stencil values for each complexity
level. This allows to still use a fullscreen quad
for the light evaluation pass and remove the
diagonal overshading cost.

This doesn't use compute shader at all to leverage
render pass merging and in-tile memory loads.

Using `atomicOr` for adding together the `eClosureBits`
revealed to be too slow. Using multiple non-atomic
writes to many data values is faster and not much
memory hungry.

### Performance
The whole tile scheduling process takes ~70µs for
a half covered 3800x790 framebuffer and doesn't
get much more slower than this.

Using simpler lighting shader helps reduce the cost
of the lighting pass by half in most common cases.
SSS materials stay the most costly.

Pull Request: https://projects.blender.org/blender/blender/pulls/115820
2023-12-07 17:04:51 +01:00
Miguel Pozo
bcab9de531 Fix: GPU: Avoid GPUMaterial/Pass collisions between engines
Prevent draw engines from using GPUMaterials that were compiled for
other engines by storing the engine they where compiled for along the
shader_uuid.

Fix #115356
Fix #115371

Pull Request: https://projects.blender.org/blender/blender/pulls/115819
2023-12-07 16:48:09 +01:00
Casey Bianco-Davis
4dcda1ec12 GPv3: Overlay: Show edit lines option
Adds option to only show edit mode lines overlay, and also adds overlay options panel.

Pull Request: https://projects.blender.org/blender/blender/pulls/115739
2023-12-07 11:42:06 +01:00
Jeroen Bakker
5475d8c5cf EEVEE: Lookdev HDRI Spheres
This PR implements the Lookdev (HDRI) Spheres overlay for EEVEE-Next. There are
also improvements for lookdev:

* Scene lighting (direct and indirect are) applied to the spheres.
* Shadow is applied to the spheres.

This is done by virtually placing the balls at the near clip plane of the camera/viewport.

![image](/attachments/735d0f49-a2cd-479e-b293-8e3f4b7f06a1)

Pull Request: https://projects.blender.org/blender/blender/pulls/115465
2023-12-07 08:19:32 +01:00
Campbell Barton
497600e49e Cleanup: spelling in comments, strings 2023-12-07 12:45:27 +11:00
Campbell Barton
9898602e9d Cleanup: clarify #ifndef checks in trailing #endif comments 2023-12-07 10:38:54 +11:00
Brecht Van Lommel
e06561a27a Build: replace Blender specific DEBUG by standard NDEBUG
NDEBUG is part of the C standard and disables asserts. Only this will
now be used to decide if asserts are enabled.

DEBUG was a Blender specific define, that has now been removed.

_DEBUG is a Visual Studio define for builds in Debug configuration.
Blender defines this for all platforms. This is still used in a few
places in the draw code, and in external libraries Bullet and Mantaflow.

Pull Request: https://projects.blender.org/blender/blender/pulls/115774
2023-12-06 16:05:14 +01:00
Hans Goudey
79552f87f2 Fix: Protect against access of empty geometry bounds optional 2023-12-06 09:12:09 -05:00
Miguel Pozo
7ec59b05ff Fix #115786: EEVEE-Next: Texture paint delayed redraw 2023-12-05 17:06:35 +01:00
Miguel Pozo
026cdb1058 Fix #115594: EEVEE Next: Crash with VDB 2023-12-05 16:46:45 +01:00
Sybren A. Stüvel
42083c8357 Refactor: move ANIM_bone_collections.h into the .hh file
Move the contents of `ANIM_bone_collections.h` into its C++
`ANIM_bone_collections.hh` sibling. Blender is C++ by now that we can do
without the C header.

No functional changes.
2023-12-05 15:10:27 +01:00
Campbell Barton
6f08d76ca8 Cleanup: quiet warning 2023-12-05 16:31:52 +11:00
Hans Goudey
8a705ffd11 PBVH: Use C++ Bounds type for node bounds
This is just a bit more ergonomic and works a bit better with our C++
math vector types. Also, during PBVH build, don't store the center of
each triangle/grid. That's redundant and can always be recalculated
from the bounds.
2023-12-04 12:45:23 -05:00
Miguel Pozo
56be404b0f EEVEE-Next: Scene sync fixes and improvements
Rely on the depsgraph to detect scene updates,
using the `view_update` callback.
Remove `SceneHandle` and `scene_sync`.
Remove `reset_recalc_flag`.
Remove most `sampling.reset()` calls and their related logic,
and move the remaining ones to `Instance`.
Re-sync lights on `light_threshold` changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/115758
2023-12-04 15:57:51 +01:00
Miguel Pozo
210a9ccc2a Fix: EEVEE-Next: Crash when baking multiple volume probes 2023-12-04 12:10:02 +01:00
Bastien Montagne
3acb64e7ac BKE_main: move header to be a fully CPP one.
Pull Request: https://projects.blender.org/blender/blender/pulls/115681
2023-12-01 20:38:54 +01:00
Clément Foucault
fe848ce3ef EEVEE-Next: Optimize GBuffer Layout and writting
This layout is more flexible and polymorphic.

While the worst case is worse (4 + 3 layers),
the common case is more optimized (2 + 2 layers).
The average written closure data is also lower
since we can compact the data for special cases
which are quite frequent.

Some adjustment had to be made in the denoise an
tile classify shaders.

Pull Request: https://projects.blender.org/blender/blender/pulls/115541
2023-12-01 14:41:13 +01:00
Jeroen Bakker
2b83fde034 Cleanup: Rename Glossy To Metallic
Pull Request: https://projects.blender.org/blender/blender/pulls/115656
2023-12-01 14:07:27 +01:00
Hans Goudey
2864f3ad3f Cleanup: Remove unused argument to PBVH draw functions
The attributes weren't used by BKE_pbvh_draw_cb.
2023-11-30 23:24:11 -05:00
Jesse Yurkovich
d304ba7906 Cleanup: Rename GPU_select header to indicate its move to C++
From a prior PR[0] there was a desire to rename this header to more
clearly indicate it's C++ now.

[0] !112491

Pull Request: https://projects.blender.org/blender/blender/pulls/115631
2023-12-01 03:39:03 +01:00
Campbell Barton
8aff65daf2 Cleanup: naming for GPUSelectResult
Prefer the name 'hit_result' since 'result' was sometimes used for
a vector of GPUSelectResult and is often used a functions return value.

Use hit_results for the span/vector and hit_result for a single hit.

Also assign struct members for new GPUSelectResult as it reads better
and avoids depending on struct order.
2023-12-01 09:45:02 +11:00
Miguel Pozo
2e27791df3 Fix: EEVEE-Next: Alpha hashed transparency doesn't converge
Use sub-pixel alpha hash scale when the camera is not moving.
This provides cleaner results, while maintaining temporal coherence on
camera movement.

Pull Request: https://projects.blender.org/blender/blender/pulls/115620
2023-11-30 20:18:08 +01:00
Campbell Barton
8c473df8c3 Cleanup: suppress CLANG warnings, remove unused variables 2023-11-30 10:48:33 +11:00
Campbell Barton
3b5031f1cb Cleanup: use 'r_' prefix for output arguments, order last
Also clarify some naming.
2023-11-30 10:42:18 +11:00
Miguel Pozo
21712cf746 Fix: EEVEE-Next: Object::visibility_flag in material_sync
Take `OB_HIDE_SHADOW` into account. (fix #115488)
Include the relevant visibility flags into `MaterialKey`.

Pull Request: https://projects.blender.org/blender/blender/pulls/115575
2023-11-29 15:44:15 +01:00
Campbell Barton
a385a98e8e Cleanup: spelling in comments 2023-11-29 15:56:17 +11:00
Hans Goudey
7e3ba529ea Cleanup: Move four blenkernel headers to C++ 2023-11-28 16:05:12 -05:00
Campbell Barton
9dda667fd4 Cleanup: spelling in comments 2023-11-28 15:19:20 +11:00
Hans Goudey
14e3523ac2 Refactor: Further improvements to geometry bounds
Implement the next phases of bounds improvement design #96968.
Mainly the following changes:

Don't use `Object.runtime.bb` for performance caching volume bounds.
This is redundant with the cache in most geometry data-block types.
Instead, this becomes `Object.runtime.bounds_eval`, and is only used
where it's actually needed: syncing the bounds from the evaluated
geometry in the active depsgraph to the original object.

Remove all redundant functions to access geometry bounds with an
Object argument. These make the whole design confusing, since they
access geometry bounds at an object level.

Use `std::optional<Bounds<float3>>` to pass and store bounds instead
of an allocated `BoundBox` struct. This uses less space, avoids
small heap allocations, and generally simplifies code, since we
usually only want the min and max anyway.

After this, to avoid performance regressions, we should also cache
bounds in volumes, and maybe the legacy curve and GP data types
(though it might not be worth the effort for those legacy types).

Pull Request: https://projects.blender.org/blender/blender/pulls/114933
2023-11-27 16:14:49 +01:00
Falk David
3a743018b1 Fix: GPv3: Wrong location in paint_init_pivot
The `paint_init_pivot` calculates the `location` based
on the midpoint of the bounds of the object. For grease pencil
the bounds depend on the current frame (for original data).

This fixes the issue by making the `bounds_min_max` function
dependent on the `frame` and by introducing a `bounds_min_max_eval`
for evaluated data.
2023-11-27 15:06:38 +01:00
Miguel Pozo
fe90c82b20 EEVEE-Next: Fix ObjectHandle::recalc
Implement the EEVEE side of #114112.
Use ObjectRuntime::last_update to compute the ObjectHandle::recalc
flags.

Fix #114135
Fix #114696
Fix #114170

Pull Request: https://projects.blender.org/blender/blender/pulls/115243
2023-11-27 12:23:18 +01:00
Campbell Barton
1eff48a838 Cleanup: spelling in code 2023-11-27 10:55:39 +11:00
Campbell Barton
27c660707d Cleanup: spelling in comments, variables 2023-11-27 09:54:36 +11:00
Campbell Barton
343b48663b Cleanup: format 2023-11-27 09:30:52 +11:00
Jason Fielder
18f7d158fe GPU: cleanup texture view usage flags
Texture usage flag `GPU_TEXTURE_USAGE_MIP_SWIZZLE_VIEW`
was originally implemented and used too conservatively for many
cases in which the underlying API flags were not required.

Renaming to `GPU_TEXTURE_USAGE_FORMAT_VIEW` to reflect
the only essential use case for when a texture view is initialized with
a different texture format to the source texture. Texture views can
still be created without this flag when mip range or base level is
adjusted,

This flag is still required by stencil views and internally by the Metal
backend for certain feature support such as SRGB render toggling.

Patch also includes some small changes to the Metal backend to
adapt to this new compatibility and correctly capture all texture view
use-cases.

Related to #115269

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/115300
2023-11-24 15:21:00 +01:00
Clément Foucault
ab7505c7ce EEVEE-Next: Disable distant light if world contains absorption
This restrict the usage of distant light if the world shader
contains absorption phenomenon.

Why this is needed is described in #114062.

At the same time, this removes the parameter for enabling
volume light as this is now an auto-detected optimization.

This also contains a few small cleanups.

Pull Request: https://projects.blender.org/blender/blender/pulls/115284
2023-11-24 13:51:07 +01:00
Clément Foucault
2ece99891b Fix: EEVEE-Next: Metal shader compilation error
`vertex` is the name of the function entry point and is
defined as a macro. Renaming fixes the issue.
2023-11-23 23:53:23 +01:00
Miguel Pozo
13139f593e Fix: EEVEE-Next: Add transparency blending back
The flag was incorrectly removed in 440f39f2e5
2023-11-23 20:22:34 +01:00
Miguel Pozo
1d2a27d49e Fix: EEVEE-Next: Motion Vectors for non float4 position buffers
Use a compute shader to copy non float4 position vertex buffers into the
`geometry_steps` buffer.

Fix #113730
Fix #114775
Fix #114144

Pull Request: https://projects.blender.org/blender/blender/pulls/115309
2023-11-23 19:49:56 +01:00
Miguel Pozo
ae1e2951c7 Fix #115144: isect_data_setup compiler error
Rename `isect_data_setup` functions to avoid shader compiler errors.

Pull Request: https://projects.blender.org/blender/blender/pulls/115175
2023-11-23 16:02:10 +01:00
Miguel Pozo
cb9584b561 Fix #114482: EEVEE-Next: Wrong Texture Coordinates
Fix Texture Coordinates in World material and screen_coordinates
when using overscan.

Pull Request: https://projects.blender.org/blender/blender/pulls/115057
2023-11-23 15:58:08 +01:00
Miguel Pozo
3197881ca3 Fix #114302: EEVEE Next: Curves material compilation errors
Add missing includes and remove the attributes_lib from shaders
that don't need them.

Pull Request: https://projects.blender.org/blender/blender/pulls/114598
2023-11-23 15:47:56 +01:00
Harley Acheson
ff04d50eee Cleanup: Make format
Formatting changes resulting from running Make Format
2023-11-22 12:50:31 -08:00
Clément Foucault
440f39f2e5 Fix: EEVEE-Next: blending of dithered material
The code removed in #115066 forgot to remove the
blend method.
2023-11-22 19:21:47 +01:00
Clément Foucault
2c8fbde612 Fix: EEVEE-Next: Ambient Occlusion pass broken 2023-11-22 18:31:52 +01:00
Clément Foucault
beee7db425 Cleanup: EEVEE-Next: Remove use of deprecated DRWView API 2023-11-22 18:08:46 +01:00
Clément Foucault
14d4da7555 EEVEE-Next: Add back transparent render pass
Straight forward implementation.
2023-11-22 17:48:58 +01:00
Miguel Pozo
7ab622475d Fix: EEVEE-Next: MaterialKey
Options are no longer smaller than sizeof(*mat).
2023-11-22 16:40:12 +01:00