Commit Graph

4126 Commits

Author SHA1 Message Date
Julian Eisel
b659595ab2 Merge remote-tracking branch 'origin/blender-v4.0-release' 2023-10-30 20:26:09 +01:00
Clément Foucault
b26f176d1a Fix #114096: Workbench: Broken thumbnail shadows on Mac
This is the same as 5d06632565
but ported to the no-geometry shader version.

However the rendering is still broken for another reason.
See #114286.
2023-10-30 19:46:09 +01:00
Miguel Pozo
2fc17f5afc FIx: Workbench: Shadow debug mode 2023-10-30 19:15:31 +01:00
Jeroen Bakker
5ba661b706 EEVEE-Next: Fix Infinite Loop With Reflection Probe
When a spherical reflection probe is in the scene and the viewport
is set to a lookdev world the scene was constantly being updated.

The cause for this was that the reflection probes where updated when
the lookdev shader was compiled, but that is almost always the case.

This PR fixes this by checking the compile status and compile status
change. Only the first time the world has been compiled the world
reflection probe will be marked dirty.

Pull Request: https://projects.blender.org/blender/blender/pulls/114276
2023-10-30 16:00:17 +01:00
Jeroen Bakker
fcb26fe72d EEVEE: Update UI Names
This PR will use "EEVEE (Legacy)" for the legacy EEVEE and renames
"EEVEE Next" to "EEVEE".

When starting Blender EEVEE Legacy will still be the default. We
will change the default to EEVEE when all missing features have been
addressed.

After that we can cleanup idnames and panels etc.

Pull Request: https://projects.blender.org/blender/blender/pulls/114272
2023-10-30 15:04:13 +01:00
Campbell Barton
e8d532a9b6 Merge branch 'blender-v4.0-release' 2023-10-29 16:55:22 +11:00
Jason Fielder
b0a032e2eb Fix: EEVEE export CMDBuf out of memory in Metal
Previous commit 9333336a73f9e116771a52a2caa96455ea345c71
broke export rendering in Metal due to the command
submission not being flushed between samples.

This would lead to ghosting in export images due
to memory synchronization issues and GPU
scheduling dependency graph problems.

The in-flight memory could also get
extremely high if exporting high numbers
of samples due to all commands being
enqueued within a single submission.

Patch resolves this by flushing for
each render frame sample and
ensuring intermediate in-flight
memory remains controlled.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/114174
2023-10-27 15:13:49 +02:00
Campbell Barton
d31c61edee Cleanup: spelling in comments 2023-10-27 12:13:48 +11:00
Miguel Pozo
247491ef0f Merge branch 'blender-v4.0-release' 2023-10-25 18:58:22 +02:00
Miguel Pozo
5d06632565 Fix #114096: Broken thumbnail shadows 2023-10-25 18:57:41 +02:00
Clément Foucault
e1bad49abf Fix #113862: EEVEE-Next: Flicker with AO or shadow pass
This was caused by wrong alpha values.
2023-10-25 12:49:32 +02:00
Jeroen Bakker
b0b46b1c59 EEVEE-Next: Fix Updating Reflection Probes
Due to missing logic reflection probe updates where not always
performed. There were multiple artifacts:

* Lookdev Worlds where Black Until the Scene world was rendered.
  Issue was that the lookdev world didn't initialized its atlas
  coordinates.
* Lookdev world should only retrigger reflection probe update when
  material is compiled
* When world is updated, reflection probes should be updated; this
  might require a redraw when reflection probe draw passes aren't
  updated this sample.

Pull Request: https://projects.blender.org/blender/blender/pulls/114064
2023-10-24 13:43:10 +02:00
Clément Foucault
aa917282a7 Fix EEVEE-Next: NaN in refraction
Refraction direct light is not implemented yet.
2023-10-23 17:07:40 +02:00
Clément Foucault
98fcb8573c Fix EEVEE-Next: Raytrace: NaN in bilateral denoising
This was caused by the last frame's tile_mask being
sampled instead of the current one.
2023-10-23 16:14:32 +02:00
Campbell Barton
c8c2343b4b Cleanup: spelling in comments 2023-10-23 10:09:05 +11:00
Jason Fielder
1b0ddfa6cb GPU: Add explicit API to sync storage buffer back to host
PR Introduces GPU_storagebuf_sync_to_host as an explicit routine to
flush GPU-resident storage buffer memory back to the host within the
GPU command stream.

The previous implmentation relied on implicit synchronization of
resources using OpenGL barriers which does not match the
paradigm of explicit APIs, where indiviaul resources may need
to be tracked.

This patch ensures GPU_storagebuf_read can be called without
stalling the GPU pipeline while work finishes executing. There are
two possible use cases:

1) If GPU_storagebuf_read is called AFTER an explicit call to
GPU_storagebuf_sync_to_host, the read will be synchronized.
If the dependent work is still executing on the GPU, the host
will stall until GPU work has completed and results are available.

2) If GPU_storagebuf_read is called WITHOUT an explicit call to
GPU_storagebuf_sync_to_host, the read will be asynchronous
and whatever memory is visible to the host at that time will be used.
(This is the same as assuming a sync event has already been signalled.)

This patch also addresses a gap in the Metal implementation where
there was missing read support for GPU-only storage buffers.
This routine now uses a staging buffer to copy results if no
host-visible buffer was available.

Reading from a GPU-only storage buffer will always stall
the host, as it is not possible to pre-flush results, as no
host-resident buffer is available.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/113456
2023-10-20 17:04:36 +02:00
Clément Foucault
7b97bc48d8 EEVEE-Next: Rework the material panel
- Adds the missing new RNA definitions
- Split settings panel into surface and volume
- Expose displacement and volume nodetree panels
- Rename `Cull Backfaces` to `Backface Culling`
  for consistency
- Rename `use_backface_culling_probe` to
  `lightprobe_volume_single_sided` for accuracy
  and avoiding confusion as it is not a real
  backface culling.
- Rename `Screen Space Refraction` to
  `Raytrace Refraction` for accuracy.

Motivation is to make it closer to cycles now
that EEVEE is compatible with more features.

Pull Request: https://projects.blender.org/blender/blender/pulls/113971
2023-10-20 16:59:20 +02:00
Clément Foucault
2a725001d1 EEVEE-Next: Material Pipeline Refactor
- Add mandatory forward opaque prepass for any opaque region
- Rename the "Show Backface" pass as `MAT_PIPE_PREPASS_OVERLAP`
- Replace Blend mode by Surface Render Method
- Add do versioning for `surface_render_method`
- Rename the Prepass pipe enum for consistency as they share
  the same depth shader
- Makes sure all object types subscribe to all passes

This does not change the UI yet.

Pull Request: https://projects.blender.org/blender/blender/pulls/113968
2023-10-20 15:52:42 +02:00
Miguel Pozo
e24cd6b524 EEVEE-Next: Shadows backface culling
Add optional backface culling for shadows.

Pull Request: https://projects.blender.org/blender/blender/pulls/113969
2023-10-20 15:47:33 +02:00
Clément Foucault
920005ddc0 Fix EEVEE-Next: Missing light specular contribution 2023-10-20 14:08:51 +02:00
Sergey Sharybin
85c557ffa2 Cleanup: Rename BLI_string_utils.h to BLI_string_utils.hh
All users of it are now C++, which opens doors to add C++ to the
public API.
2023-10-20 10:27:26 +02:00
Clément Foucault
f79b86553a EEVEE-Next: Add mesh volume bounds estimation
This adds correct object bounds estimation.

This works by creating an occupancy texture where one
bit represents one froxel. A geometry pre-pass fill this
occupancy texture and doesn't do any shading. Each bit
set to 0 will not be considered occupied by the object
volume and will discard the material compute shader for
this froxel.

There is 2 method of computing the occupancy map:
- Atomic XOR: For each fragment we compute the amount of
  froxels **center** in-front of it. We then convert that
  into occupancy bitmask that we apply to the occupancy
  texture using `imageAtomicXor`. This is straight forward
  and works well for any manifold geometry.
- Hit List: For each fragment we write the fragment depth
  in a list (contained in one array texture). This list
  is then processed by a fullscreen pass (see
  `eevee_occupancy_convert_frag.glsl`) that sorts and
  converts all the hits to the occupancy bits. This
  emulate Cycles behavior by considering only back-face
  hits as exit events and front-face hits as entry events.
  The result stores it to the occupancy texture using
  bit-wise `OR` operation to compose it with other non-hit
  list objects. This also decouple the hit-list evaluation
  complexity from the material evaluation shader.

## Limitations
### Fast
- Non-manifolds geometry objects are rendered incorrectly.
- Non-manifolds geometry objects will affect other objects
  in front of them.
### Accurate
- Limited to 16 hits per layer for now.
- Non-manifolds geometry objects will affect other objects
  in front of them.

Pull Request: https://projects.blender.org/blender/blender/pulls/113731
2023-10-19 19:22:14 +02:00
Clément Foucault
454c8fd866 Fix EEVEE-Next: Broken volume shadowing from sun lights
Caused by 71dfcf4558
2023-10-19 16:50:57 +02:00
Clément Foucault
439d3ae945 Fix 113839: Eevee Next: Low resolution on local lights shadows
This was caused by the scalling factor not taken into
account during the usage tagging phase.
2023-10-19 15:45:32 +02:00
Hans Goudey
fba7671205 Cleanup: Const correctness, unused variable warning in GP draw code 2023-10-19 15:03:32 +02:00
Hans Goudey
5db502a122 Fix: Build error after bounding box refactor
This function was changed in main after the buildbot built the PR.
Since we are just interested in grease pencil data here, just retrieve
the bounds from the geometry directly.
2023-10-19 15:02:15 +02:00
Hans Goudey
1cbd0f5a85 Refactor: Improve access to object data bounds
Currently object bounds (`object.runtime.bb`) are lazily initialized
when accessed. This access happens from arbitrary threads, and
is unprotected by a mutex. This can cause access to stale data at
best, and crashes at worst. Eager calculation is meant to keep this
working, but it's fragile.

Since e8f4010611, geometry bounds are cached in the geometry
itself, which makes this object-level cache redundant. So, it's clearer
to build the  `BoundBox` from those cached bounds and return it by
value, without interacting with the object's cached bounding box.

The code change is is mostly a move from `const BoundBox *` to
`std::optional<BoundBox>`. This is only one step of a larger change
described in #96968. Followup steps would include switching to
a simpler and smaller `Bounds` type, removing redundant object-
level access, and eventually removing `object.runtime.bb`.

Access of bounds from the object for mesh, curves, and point cloud
objects should now be thread-safe. Other object types still lazily
initialize the object `BoundBox` cache since they don't have
a data-level cache.

Pull Request: https://projects.blender.org/blender/blender/pulls/113465
2023-10-19 14:18:40 +02:00
Falk David
6281d9a039 Fix: GPv3 depth buffer
Resolves #113422.

The depth buffer was rendered to, but not correctly merged
with the scene depth buffer. This lead to, e.g. the object appearing
behind the grid.

This fixes the issue by rendering a "merge" pass.

Pull Request: https://projects.blender.org/blender/blender/pulls/113779
2023-10-19 13:22:38 +02:00
Jeroen Bakker
62f721467b Merge branch 'blender-v4.0-release' 2023-10-19 08:03:51 +02:00
Jason Fielder
62219f8da9 Metal: Re-enable workbench NEXT shadows
With the shift to GPU-driven rendering pipeline,
the SSBO vertex fetch paradigm used to
implement workbench shadows on Metal
instead of utilising the geometry shader
path no longer worked correctly.

This is because the draw submission
required vertex amplification up-front,
based on the expected output geometry
amount for a given input geometry.

This patch aims to resolve this
issue through addition of API to
enable the features within the
GPU driven pipeline.

Co-authored-by: Michael Parkin-White <mparkinwhite@apple.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/113498
2023-10-19 08:01:17 +02:00
Miguel Pozo
fc1ee65104 EEVEE-Next: Skip bake if there's not enough VRAM
* Skip the bake if there's not enough GPU memory to allocate all the
   required resources.
* Print bake messages to the command line.

Pull Request: https://projects.blender.org/blender/blender/pulls/113509
2023-10-18 18:49:21 +02:00
Falk David
07749b389d GPv3: Convert radius to blender units
Previously, Grease Pencil used a radius convention where
1 "px" = 0.001 units. This "px" was the brush size which would be
stored in the stroke thickness and then scaled by the point pressure
factor. Finally, the render engine would divide this thickness value by
2000 (we're going from a thickness to a radius, hence the factor of
two) to convert back into blender units.

Store the radius now directly in blender units. This makes it
consistent with how hair curves handle the radius.

* Removes the scaling in the render engine.
* Makes sure the grease pencil primitives use the correct radii
* Changes the drawing tool to work with screen space radius
* Draws the drawing tool cursor in screen space
* Makes sure the scaling is done when converting from legacy
grease pencil objects
* Makes sure the scaling is done when loading previous files

Consequences for the draw tool:
* Since the tool has a radius input in pixels, it now works in screen space. This is a pretty big change to how it works by default before, so a new option will have to be added that allows the brush to be in "Scene" space. This is similar to how it works in sculpt mode. But this is a bigger change, so I would like to split that into a separate PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/113770
2023-10-17 17:00:35 +02:00
Miguel Pozo
25c2b17266 Merge branch 'blender-v4.0-release' 2023-10-17 15:46:32 +02:00
Miguel Pozo
405a618d88 Cleanup: Workbench: Remove no longer used properties 2023-10-17 15:45:59 +02:00
Clément Foucault
5831913204 Fix EEVEE-Next: SubSurfaceScattering: Invalid buffer format
This fixes issues on NVidia GPUs.
2023-10-16 17:17:18 +02:00
Clément Foucault
69e85382cd Fix #113759: EEVEE-Next: NaN artifacts caused by raytracing denoising
This was caused by spatial denoising pass sampling invalid data.
This patch make it so that there is one padding tile all
around the denoise area.

This simplifies the denoise shader too.

This is a bit wasteful to dispatch tracing tiles for clearing
and a better solution would be to use a separate shader and
tile list only for this purpose.
2023-10-16 17:17:18 +02:00
Falk David
97c5cb19d1 GPv3: Hide points overlay in stroke selection mode
This makes sure that we only show the point selection if the
selection domain is `ATTR_DOMAIN_POINT`.
2023-10-16 15:12:10 +02:00
casey bianco-davis
0508e81b79 GPv3: Add edit mode lines to overlay
Adds lines in edit mode to the overlay.

Pull Request: https://projects.blender.org/blender/blender/pulls/111596
2023-10-16 13:59:26 +02:00
Miguel Pozo
54511f59aa Merge branch 'blender-v4.0-release' 2023-10-16 13:49:44 +02:00
Miguel Pozo
e3014ffc27 Fix #113741: Workbench: Reset TAA on overlay toggle
Reset TAA when enabling overlays,
since we won't have valid sample0 depth textures.
2023-10-16 13:49:12 +02:00
Miguel Pozo
465291e716 Merge branch 'blender-v4.0-release' 2023-10-16 13:25:05 +02:00
Miguel Pozo
f2ba12a053 Fix: Workbench: Volume compositing
Regression after fe39456ba5
2023-10-16 13:24:35 +02:00
Clément Foucault
ba89723abc Cleanup: EEVEE-Next: Volume AABB
Make interface a bit more lined up with the
rest of the BLI API. Also use more of the
vector API.
2023-10-15 15:07:44 +02:00
Clément Foucault
3a998fc461 Fix EEVEE-Next: Linking error cause by closure_to_rgba 2023-10-13 19:25:11 +02:00
Clément Foucault
71835808d3 Fix EEVEE-Next: Inverted world coordinates
Caused by 71dfcf4558
2023-10-13 19:21:08 +02:00
Miguel Pozo
6484274048 Merge branch 'blender-v4.0-release' 2023-10-13 19:19:06 +02:00
Miguel Pozo
9e7a576cee Workbench: Fix: depth_in_front not being copied after the first sample 2023-10-13 19:18:46 +02:00
Clément Foucault
8f49407128 Fix EEVEE-Next: Broken Ambient Occlusion
Caused by 71dfcf4558
2023-10-13 19:07:05 +02:00
Clément Foucault
5b1d5fa82f Cleanup: EEVEE-Next: Remove some TODOs
These just move some code around, cleanup the
syntax and make sure to use appropriate libs.
2023-10-13 18:33:15 +02:00
Clément Foucault
ef494b2794 Fix EEVEE-Next: Broken Barycentric on Metal 2023-10-13 18:01:29 +02:00