Commit Graph

8220 Commits

Author SHA1 Message Date
Jeroen Bakker
1663df0c8f EEVEE: Ray generation missing resource
During ray tracing there is a missing resource. On OpenGL this doesn't
matter as it will reuse the previous binding. But on Metal or Vulkan
each resource needs to be added to update bindings.

Pull Request: https://projects.blender.org/blender/blender/pulls/123655
2024-06-24 11:51:31 +02:00
Jeroen Bakker
560b36ac8d EEVEE: Fix incorrect texture usage DoF
The color textures in the DoF module are also bound in gather
framebuffer but didn't got the correct usage flags resulting in
validation errors.

Pull Request: https://projects.blender.org/blender/blender/pulls/123650
2024-06-24 10:08:10 +02:00
Clément Foucault
2adb9762fa Fix: EEVEE: Shadow: Wrong tilemap corners
This is the root cause of broken updates
on local lights.

The same local frustum was used for all of the
tilemap (up to 6) of a light. This made the
`intersect(frustum, box)` call buggy which
would return true only if the object would
intersect with the first tilemap of the light.
This lead to improper updates when the object
would hit this path.

Fix #122533
2024-06-21 19:48:38 +02:00
Miguel Pozo
685817888e Fix #121629: EEVEE : Transparent shadow tagging performance in ortho view 2024-06-21 18:32:53 +02:00
Clément Foucault
eecbe77632 Fix: EEVEE: Light: LTC artifact
This was caused by the tangent basis computation that
had a threshold that was too noticeable.

Increasing the threshold makes the artifact
unoticeable.

Fix #122949
2024-06-20 20:18:48 +02:00
Clément Foucault
6161cc183e Fix: EEVEE: Fast GI: Firefly in noisy regions
This was caused by some pixels having no good neighbors
to get the irradiance from. The weighted sum would
have huge precision issues and the values would blow-out.

Adding an epsilon weight tailored to the report file
to fix this issue.

Fix #123488
2024-06-20 18:50:36 +02:00
Miguel Pozo
4f8650d5c2 Fix #122714: Workbench: Missing textures not shown in Texture Paint mode with magenta
Missing feature from the Workbench Next port.

Pull Request: https://projects.blender.org/blender/blender/pulls/123034
2024-06-20 18:08:13 +02:00
Miguel Pozo
33005ad716 GPU: Non-blocking specialization constants compilation
Update the batch specializations compilation to allow using it in an
async way.

The implementation has 2 main limitations:
- Only one batch at a time can be processed, extra batches will be
  added to a queue.
- Binding a specialization variant that is still being compiled will fail.

Pull Request: https://projects.blender.org/blender/blender/pulls/123015
2024-06-20 18:02:44 +02:00
Clément Foucault
d3e4eb49a0 Fix: EEVEE: Broken Lightprobe sphere display
The vertex shader was not writting to the position
attribute output.
2024-06-20 15:06:28 +02:00
Jeroen Bakker
af72c1f21d EEVEE: Light probe resolution
EEVEE stores light probes using octahedral mapping. Compared to the previous
cubemap storage octahedral has less pixels. The 64x64 is becoming useless
and can be removed. This PR also enables generating light probe maps upto 4k.

Some issues were found: the offset of the sphere inside the atlas
was always set to mipmap level 0 offset. This was hidden because of the texture
wrapping. Also the offset was substracted from the local texture
coordinate when calculating the direction of the pixel. Might be that due
to the incorrect offset (mipmap level 0), the latter issue was never detected.

Pull Request: https://projects.blender.org/blender/blender/pulls/123074
2024-06-20 15:02:11 +02:00
Clément Foucault
ab0e6386fc Fix: EEVEE: Imprecision in HiZ gather coordinates
The offset was only 0.5 which centered the gather
sample exactly on the first pixel of the quad.
With floating point arithmetic differences on Nvidia
this lead to the wrong set of texture pixel being
fetched by gather.

Using the coordinate at the center of the quad fixes
the issue.

Fix #123262
2024-06-20 13:06:52 +02:00
Clément Foucault
dea7620e0b Fix: EEVEE: Wrong format and barriers for AO 2024-06-19 20:25:49 +02:00
Laurynas Duburas
9ae063d40b Fix #123325: Curve selection more does not highlight curves
Adds handles to curve types `CURVE_TYPE_CATMULL_ROM`,`CURVE_TYPE_POLY` to fix #123325.
Previously not shown as seemed redundant in `Control Point` edit mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/123373
2024-06-19 18:31:02 +02:00
Miguel Pozo
8fc614fc1b Fix: EEVEE: Use of scene before assignment
Move update_eval_members to the top of init to avoid future issues.
2024-06-19 18:15:27 +02:00
Campbell Barton
0cc9762651 Cleanup: spelling in comments 2024-06-19 09:41:11 +10:00
Clément Foucault
ff03ab4d08 Fix: EEVEE: Overblur of textures because of TAA
This was a missing block of the TAA implementation.
TAA jitter and reprojection have a tedency to soften
the texture. Add a 1.5 bias to make them a bit sharper.

Note that this is a bit different than the usual TAA
blurring. In final render we don't do reprojection
so it is only because the texture filter (box filter
from the LOD) is applied at the same time than our pixel
filter (blackmann-harris). It is less noticeable than
the normal TAA blur, but still blurs ~2px instead of
1.5px.
2024-06-18 19:31:47 +02:00
Clément Foucault
e5f514c60c Fix: EEVEE: AO Pass: Regression in quality caused by sample count
Sample count was mismatching the LOD offset leading to
quality regression. Using the same specialization
constant as the fast GI fixes the issue.
2024-06-18 17:53:22 +02:00
Clément Foucault
90c1d5832e Fix: EEVEE: AO: Only clip occluders based on front sample
This is cheaper but avoid loosing the sample influence when
thickness is large.
2024-06-18 17:53:22 +02:00
Clément Foucault
3112799804 Fix: EEVEE: AO: LOD transition too visible at high sample count
This add dithering to the lod steping allowing for a smoother
transition.
2024-06-18 17:53:22 +02:00
Miguel Pozo
9d5f46b1b8 Cleanup: EEVEE: Remove unused variable 2024-06-18 16:15:26 +02:00
Clément Foucault
979e142965 Fix: EEVEE: Object holdout not working
This implement the holdout flag by switching to
the holdout case in the shader. This has a few benefits:
- Doesn't recompile the shaders.
- Makes the object infos mandatory (already the case in
  practice)
- Handle transparent materials properly, keeping the
  transparency working.

Fix #123284

Pull Request: https://projects.blender.org/blender/blender/pulls/123315
2024-06-18 15:35:04 +02:00
Clément Foucault
0dc5abc9e5 Fix: EEVEE: Infinite loop in shadow update
This happened in the following render test:
`render/light/all_light_types_in_volume.blend`

Unfortunately it seems non-deterministic.
To fix this, we change the heuristic to jump
out of the shadow update loop. Also introduce
a upper bound to the number of iteration.

On top of this, add a flush for every loop
to avoid huge command buffer submission.

Thanks @pragma37 for the fix.
2024-06-18 14:55:41 +02:00
Clément Foucault
e71ca93031 Fix: EEVEE: Missing barrier in light sorting compute shader
At high light count, this missing barriers would
produce invalid, non-unique `prefix_sum` indices.
This then resulted in some slots inside `out_light_buf`
never written to, leaving undefined data inside them.

If the buffer was cleared to zero, these undefined light
slots would be interpreted as sun lights and the
shadow setup compute pass would critically fail because
of out of bound memory.

Fix #123195
2024-06-18 12:39:27 +02:00
Jeroen Bakker
d13682efa8 Cleanup: Fix spelling in EEVEE
_No response_

Pull Request: https://projects.blender.org/blender/blender/pulls/123355
2024-06-18 10:57:03 +02:00
Jeroen Bakker
c525c0354f EEVEE: Film accumulation workaround for Metal/Intel iGPUs
EEVEE Film accumulation workaround for Metal/Intel iGPUs.

On Metal the Intel iGPUs do not support image read write
on array textures. However this limitation doesn't show
any artifacts when using the compute shader.

This PR is a work around that uses the film_comp shader
to process the film samples, but uses a separate film_copy_frag
shader to read the result and copy them to the frame buffer.

I deliberately didn't include the fix to the film_frag shader
as that would change the read/write resources and could lead
to performance issues for other platforms. Writable resources
are typically slower compared to read only resources.

Some code needed to be duplicated (and not added to `*_lib.glsl`)
as compilers would still raise compilation errors due to imageStore/Load
on incompatible resource access.

The Metal/Intel iGPU is also marked to have limited support as
raytracing and probes still produces big artifacts.

This workaround can be tested on any platform just by setting
`use_compute_ = true` in `Film::sync`

Related to #122361

Pull Request: https://projects.blender.org/blender/blender/pulls/123330
2024-06-18 10:53:53 +02:00
Campbell Barton
b141365fc2 Cleanup: quiet unused variable warning 2024-06-18 12:09:41 +10:00
Campbell Barton
0554ec7ec7 Cleanup: spelling in comments 2024-06-18 12:09:40 +10:00
Clément Foucault
6d375cf7f0 Fix: EEVEE: Wrong thickness for rotated objects
The previous code was using matrix multiplication to
get the local thickness to world thickness.

The correct way is to multiply the local thickness
by the scale of the object (length of each columns
of the object_to_world matrix).
2024-06-17 19:12:24 +02:00
Miguel Pozo
8014b9cbb4 Fix #123183: EEVEE: Optimize velocity geometry buffer
Avoid storing duplicated geometry buffers for instances.

Pull Request: https://projects.blender.org/blender/blender/pulls/123320
2024-06-17 18:55:27 +02:00
Alaska
08cc73a9bb Fix #123249: Orthographic DOF is influenced by near clip
Fix an issue where the DOF distance in orthographic mode is
specified distance + near clip distance, which can lead to
unpredicable results.

Pull Request: https://projects.blender.org/blender/blender/pulls/123267
2024-06-17 17:45:55 +02:00
Jeroen Bakker
832918f9d8 Fix #115344: Generated coordinates for hair psys
When using particle system the generated coordinates where not set.
The reason is that a loose resource handle was created for particle
system that didn't contain enough information to calculate orcos.

This PR will create the object info from its parent object.

Pull Request: https://projects.blender.org/blender/blender/pulls/123307
2024-06-17 13:45:23 +02:00
Miguel Pozo
86bbd2d3a5 Fix #123227 : EEVEE : Ghosting on viewport rendering
Pull Request: https://projects.blender.org/blender/blender/pulls/123308
2024-06-17 13:44:16 +02:00
Clément Foucault
9a6a822dd6 EEVEE-Next: Remove artificial bias
This bias was added when the pixel radius estimation
computation was still broken. This resulted in a shadow
bias way too big in general.

Also fix shadow pixel size being clampped to the wrong
LOD level.

Fix #123295
2024-06-17 12:48:16 +02:00
Miguel Pozo
b029608b97 Fix #123285: EEVEE Next: Ray Visibility > Camera
Add the camera visibility to the MaterialKey.
2024-06-17 12:22:30 +02:00
Jeroen Bakker
52d72d9fbb Fix #122847: Show Transparent Render Pass
EEVEE has a transparent render pass that renders materials where
the render mode is set to blended. This was introduced when EEVEE-Next
was still in development, but was never fully backported.

This PR adds the missing pieces.

Pull Request: https://projects.blender.org/blender/blender/pulls/123298
2024-06-17 09:35:03 +02:00
Jeroen Bakker
8e2f51af58 Fix #123269: Shadow jittering when navigating
When navigating the viewport, the shadow jittering wasn't always
updated anymore. Regression introduced by e1ee3ed7df

Pull Request: https://projects.blender.org/blender/blender/pulls/123282
2024-06-17 09:34:25 +02:00
Miguel Pozo
a11d3c6c01 EEVEE: Add Ray Visibility > Camera support
FIx #122980.

Pull Request: https://projects.blender.org/blender/blender/pulls/123248
2024-06-15 08:54:20 +02:00
Clément Foucault
3b4422a94b Fix: EEVEE-Next: Improve lookdev float precision
Do this by:
- Removing depth and depth test.
- Scale the sphere to the covered pixels size.
- Use infinite orthographic matrix

We can still improve this by scaling the sphere
bigger depending on the accuracy at its position.

Fix #123165
2024-06-14 20:25:55 +02:00
Clément Foucault
8a778dac25 EEVEE-Next: Shadow: Make screen_pixel_radius not use View
This allow to reuse the function in other area.
2024-06-14 20:25:54 +02:00
Clément Foucault
c5ba48427e Fix: EEVEE-Next: Lights with large radius do not work
The threshold is way too high as the light power gets very small.
It still make sense to include the power here because
some lights might be disabled for some BSDF types, and
skipping the LTC eval code can be beneficial.
So reducing the threshold to very low value near FLT_MIN
to fix the issue.

Fix #123193
2024-06-14 18:09:20 +02:00
Clément Foucault
e23e5443e7 Fix: EEVEE-Next: Missing mandatory combined pass
Cycles and EEVEE-Next disregard `use_pass_combined` option.
Avoid changing the behavior.

Fix #122188
2024-06-14 16:26:23 +02:00
Clément Foucault
7a7f64cf9d Fix: EEVEE-Next: Broken area and spot light culling in planar probes
These two lights have a second culling pass that
uses some shapes defined in view space.

These shapes need to have their handedness flipped
otherwise the test fails.

Fix #122614
2024-06-13 20:40:02 +02:00
Clément Foucault
b0eb156344 EEVEE-Next: Volume: Add artificial backface hit to close volumes
This could happen for non manifold meshes (like a water plane)
when using the accurate method.

If last hit in the volume ray is a frontface, we now consider
everything behind it in volume.
2024-06-13 16:38:49 +02:00
Hans Goudey
2d4c624a87 Fix #123171: Mesh edit mode lines index buffer crash with curve modifier
I didn't think the BMesh extraction mode could arrive at the case where
only loose edges are requested, but turns out it can because of the
mesh wrapper system where the evaluated mesh is actually a BMesh with
deformed positions.
2024-06-13 10:22:11 -04:00
Clément Foucault
f289da5bd5 Fix: EEVEE-Next: Mesh see-through in edit mode with orthographic
The stored depth buffer was not considering orthographic
viewport cameras that have negative Z depth values.

Fix #123146
2024-06-13 14:44:51 +02:00
Brecht Van Lommel
1d45bb705e Fix: EEVEE assert rendering transparent pass 2024-06-12 19:30:52 +02:00
Miguel Pozo
6a9feebf07 EEVEE: Ensure materials use all available sampler slots
This provides 2 extra sampler slots to users for materials in the cases
of meshes, and 1 extra slot for curves and point clouds.

Pull Request: https://projects.blender.org/blender/blender/pulls/123100
2024-06-12 15:43:46 +02:00
Weizhen Huang
27041ecaf8 Fix #122877: crash in EEVEE due to negative size of IndexRange
since `min_level` is clamped to 0, `max_level` should be clamped too

Pull Request: https://projects.blender.org/blender/blender/pulls/123131
2024-06-12 15:21:20 +02:00
Miguel Pozo
cfd64f2e85 Fix: EEVEE: Fix valid_N setup 2024-06-11 16:55:33 +02:00
Jeroen Bakker
0f5ddd5807 Fix #123028: Bloom still available as render pass in API and UI
The bloom render pass has been deprecated in Blender 4.2. It was still
visible in the UI in the shading popover and available in the python API.

This PR removes the UI option and deprecated the parts of the python API.
Current add-ons that use this API should still be able to use the API, but
it would not do anything. Add-ons are encourage to remove these calls.

The flags are not cleaned up so they should still work when switching back
to previous Blender versions.

Release notes have been updated to include these changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123059
2024-06-11 14:16:43 +02:00