Commit Graph

7710 Commits

Author SHA1 Message Date
Hans Goudey
1e1d7034ec Cleanup: Move GPU_uniform_buffer.h to C++ 2024-03-06 21:54:28 -05:00
Campbell Barton
2d3a1aa238 Cleanup: spelling in comments 2024-03-07 13:29:18 +11:00
Miguel Pozo
1dd57369f2 Cleanup: EEVEE-Next: Remove unused parameter 2024-03-06 19:32:47 +01:00
Anthony Roberts
445fd42c61 Windows: Add ARM64 support
* Only works on machines with a Qualcomm Snapdragon 8cx Gen3 or above.
  Older generation devices are not and will not be supported due to
  some driver issues
* Requires VS2022 for building.
* Uses new MSVC preprocessor for sse2neon compatibility.
* SIMD is not enabled, waiting on conversion of blenlib to C++.

Ref #119126

Pull Request: https://projects.blender.org/blender/blender/pulls/117036
2024-03-06 16:14:34 +01:00
Miguel Pozo
500a891ac9 Fix: EEVEE-Next: Use the correct shadow radius
Typo/mistake from #118860.
2024-03-06 13:21:39 +01:00
Campbell Barton
aba193ad30 Cleanup: disable unused code 2024-03-06 14:43:15 +11:00
Miguel Pozo
bdba57e095 Fix: EEVEE-Next: PCF on perpendicular surfaces 2024-03-05 20:39:06 +01:00
Miguel Pozo
71ff93bb32 Fix: EEVEE-Next: PCF Overshadowing
Avoid overshadowing caused by shadow filtering.

Pull Request: https://projects.blender.org/blender/blender/pulls/118910
2024-03-05 20:02:47 +01:00
Miguel Pozo
c0f23e79e3 EEVEE-Next: More conservative shadow LOD selection
Ensure shadow-maps at non-zero LODs cover <1 screen texel.
This still doesn't solve projective aliasing, though.
2024-03-05 19:06:51 +01:00
Miguel Pozo
fe93664cef EEVEE-Next: Avoid shadowmap padding on 0 radius punctual lights
Use the original Light radius to compute the shadowmap projection.
Avoid unnecessary padding in shadowmaps, increasing the perceived
shadow resolution when the shadow softness is not 0.

Pull Request: https://projects.blender.org/blender/blender/pulls/118860
2024-03-05 18:59:44 +01:00
Hans Goudey
5993c517bd Cleanup: Use C++ Array, Span, int2 for lasso coords 2024-03-05 11:29:04 -05:00
Philipp Oeser
a58a2b0f5d Merge branch 'blender-v4.1-release' 2024-03-05 13:15:45 +01:00
Philipp Oeser
8c3b85d666 Fix #84848: Specific Rig Crashes blender when going into pose mode
The armature reported had two bones with a `bMotionPath` but its lengths
are zero (which causes trouble in `motion_path_cache` drawing code due
to 0 allocations).

Not exactly sure how we got there, something like
`animviz_verify_motionpaths` should take care of this already in current
code, but this might be from a time where there were not enough sanity
checks.

So now early out in `motion_path_cache` if we encounter such a
"corrupted" motion path.

Pull Request: https://projects.blender.org/blender/blender/pulls/119081
2024-03-05 13:15:18 +01:00
Campbell Barton
76867ad4c2 Cleanup: redundant "void" in function declarations for C++ 2024-03-05 11:25:35 +11:00
Miguel Pozo
fd459ae82c Fix #117977: EEVEE-Next: Broken shadows with 1GB pool size
shadow_page_unpack clamps the result to a valid page range, causing
all pages that shouldn't be rendered to render to the last valid page.

Pull Request: https://projects.blender.org/blender/blender/pulls/118979
2024-03-04 16:01:02 +01:00
laurynas
bf17fc8d79 Fix: GPU: Ensures length of curves GPUIndexBuf to be multiple of 4
Exception is thrown in gpu_storage_buffer.cc

To reproduce create legacy Bezier curve and convert it to new Curves.
Code is from #116617

Pull Request: https://projects.blender.org/blender/blender/pulls/118951
2024-03-03 16:39:11 +01:00
Miguel Pozo
2223130b16 Fix: EEVEE-Next: Shadow debug shader
Make the implementation functional again.

Pull Request: https://projects.blender.org/blender/blender/pulls/118923
2024-03-01 20:13:12 +01:00
Clément Foucault
90e86ead24 EEVEE-Next: Avoid same multiplication to the same constant 2024-02-29 19:19:10 +01:00
Miguel Pozo
3090a0a7f8 Fix: EEVEE-Next: Metal shader compilation
Metal doesn't support non-square matrices.

Pull Request: https://projects.blender.org/blender/blender/pulls/118912
2024-02-29 17:02:03 +01:00
Miguel Pozo
4083f8004d EEVEE-Next: Add Shadows PCF
Add percentage closer filtering to shadowmap sampling and a
`shadow_filter_radius` property to lights to control it.

Notes:
* This adds PCF to `eevee_shadow_tracing_lib`, but not to
  `eevee_shadow_lib`, which is used by volumes (not required) and
  thickness.
* PCF is computed based on the LOD0 size. This assumes that higher
  LODs are only used when the shadowmap resolution is actually good
  enough to match the render resolution.

Pull Request: https://projects.blender.org/blender/blender/pulls/118220
2024-02-29 15:47:16 +01:00
Miguel Pozo
5f838bd5c5 Fix: EEVEE-Next: Shadow tile update tagging
Tiles tagged for update in eevee_shadow_tag_update_comp can be
untagged in eevee_shadow_tilemap_init_comp, since those tiles
might be tagged as rendered.
Regression from 9e015f703c
2024-02-29 15:36:02 +01:00
Brecht Van Lommel
1355285c0e Merge branch 'blender-v4.1-release' 2024-02-29 13:52:19 +01:00
Jacques Lucke
4d13f56f63 Fix: cut off quaternion text overlay 2024-02-29 13:13:00 +01:00
Campbell Barton
6c78f79740 Cleanup: pass matrices by reference instead of value 2024-02-28 17:16:18 +11:00
Hans Goudey
d338261c55 Cleanup: Pass Span by value
Also pass Span instead of `const Array &`
and use parantheses for BLI includes.
2024-02-27 23:09:54 -05:00
Campbell Barton
7db790c4b7 Cleanup: spelling in comments 2024-02-28 12:13:20 +11:00
Hans Goudey
c3f1bacc80 Fix #118798: Weight paint overlay broken
The normal VBO is necessary but not requested after it was split
from the old pos_nor VBO from before bace4c9a29.
2024-02-27 14:42:12 -05:00
Jacques Lucke
086b808671 Merge branch 'blender-v4.1-release' 2024-02-27 20:40:29 +01:00
Jacques Lucke
c96e0a24bf Fix #116598: disable color overlay for rotation values
Currently, we don't support this. Depending on the geometry type, the rotations
are either displayed as black, magenta or there is a crash. Better disable this for
now until we have a proper implementation. It's not quite obvious how rotation
values should be converted to a color, so this also needs some design work.

Pull Request: https://projects.blender.org/blender/blender/pulls/118808
2024-02-27 20:30:01 +01:00
Miguel Pozo
edbf01d232 Merge branch 'blender-v4.1-release' 2024-02-27 20:23:35 +01:00
Miguel Pozo
71fffa57fd Fix #116232: EEVEE: NaN reflection normals
Same fix as #114960.
2024-02-27 20:22:28 +01:00
Miguel Pozo
3560f7ec41 EEVEE-Next: Reduce volume probe blending and remove remapping
See 118342
2024-02-27 18:54:08 +01:00
Campbell Barton
66a8cb6f72 Merge branch 'blender-v4.1-release' 2024-02-27 21:32:08 +11:00
Campbell Barton
3d18896e4b Fix #102526: Fix crash performing nested viewport drawing
Performing an off-screen draw call while drawing the viewport isn't
supported, add a check that raises an exception when called from Python
instead of crashing.

Ref: !118780
2024-02-27 21:29:38 +11:00
Jeroen Bakker
be0c57a0a8 Cleanup: EEVEE: Use uint for enum specialization
Enums are stored as uints, but due to a missing implementation they
where stored in shaders as ints. As draw manager now supports uints
as specialization constants we can update these constants to be
stored as uints on the shader side as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/118788
2024-02-27 08:38:31 +01:00
Campbell Barton
9795c432e1 Cleanup: avoid redundant copy-by-value for 4x4 matrices & float3 2024-02-27 17:57:50 +11:00
Hans Goudey
f83471fa95 Cleanup: Use C++ matrix type in mesh render data 2024-02-26 11:46:01 -05:00
Hans Goudey
53f1ebf232 Cleanup: Pass field directly to mesh render data creation
Avoid the need to set use_hide afterwards when other things are stored directly.
2024-02-26 11:46:01 -05:00
Hans Goudey
5463dd1f69 Cleanup: Rename mesh extraction file
The "pos_nor" file only extracts postions after bace4c9a29.
2024-02-26 11:28:33 -05:00
Clément Foucault
c04eb58134 EEVEE-Next: Make denoising roughness correct for refraction
Avoid overblurred refractions.

Fix #110760
2024-02-26 16:21:08 +01:00
Jeroen Bakker
8dce2a422b EEVEE-Next: Specialization Constants for Film Accumulation
On lower end hardware the film accumulation has bad performance. Sometimes
upto 10ms. This PR improves the performance somewhat by adding a
specialization constant around the renderpasses that are actually needed for
rendering, the number of samples and if reprojection is enabled.

`enabled_categories`: Based on the enabled render passes some outer loops are
enabled/disabled that handle the specific render passes. This improves the performance
as no memory will be reserved for branches that are never accessed.

`samples_len` & `use_reprojection`: GPU compilers tend to optimize texture fetches
when they to the outer loop. This is only possible when the inner loop can be unrolled.
In the case of the film accumulation the inner loop couldn't be unrolled. By adding a
specialization constant would allow unrolling of the inner loop.

On old or low-end devices the improvement is around 40%. On newer devices
the improvement is 50+%. Performance of this shader is similar to
the godot.

| GPU                  | Before | New   |
|----------------------|--------|-------|
| NVIDIA GTX 760       | 3.5ms  | 2.4ms |
| GFX1036 (RDNA2 iGPU) | 9.9ms  | 6.2ms |
| AMD Radeon Pro W7500 | 2.1ms  | 0.9ms |

Pull Request: https://projects.blender.org/blender/blender/pulls/118385
2024-02-26 16:19:26 +01:00
Jeroen Bakker
e5b9bbe0ae Draw: Add support for uint specialization constants
When implementing film accumulation specialization constants we came
across a missing implementation for uint as specialization constant.
This is a split-off from the original patch to add support for uint.

When using it is important to compile with asserts on. uint can be casted
to int without knowning. There are assert mechanism that point you to
these cases.

Pull Request: https://projects.blender.org/blender/blender/pulls/118750
2024-02-26 16:18:09 +01:00
Hans Goudey
bace4c9a29 Mesh: Improvements to position and normal draw extraction
Currently there are two vertex buffers that contain mesh normals. First, the
normals are extracted and stored interleaved with positions. Then there is
a second vertex buffer for just normals. Interleaving them makes some
sense, since they change together, but it fights with the contiguous storage
benefits of `Mesh` and generally makes code more difficult to optimize.

This PR removes the normals interleaved with the positions and changes
the code for extracting positions and normals from meshes to be simpler
and faster, mainly by not using the "extract iterators" as described by the
#116901 design task. That moves most of the branching outside of hot
loops, so we don't do the same work for every mesh element. This also
gives us the option of not calculating or extracting normals in more
situations like wireframe display in the future.

This is only a small part of the work for #116901, so the state of the code
after this PR will have more design inconsistencies. I'll keep working to
resolve those in the future.

In general I observed at least a 5-40% improvement in FPS in playback
of files with large meshes.

Pull Request: https://projects.blender.org/blender/blender/pulls/116902
2024-02-26 16:01:14 +01:00
Clément Foucault
038fc84ab3 EEVEE-Next: Add light support for refraction closures
This adds support by just reusing the GGX reflection LTC
look-up table. This avoid more memory usage for another
table.

This is quite a hack and has no real physical ground.
We already have a roughness remapping function for
reusing sphere-probe for refraction and matching the
blur level. We can reuse this function and use it
for sampling the reflection LUT.

Then getting the theta LUT parameter is done by
computing the angle between the refraction direction
and the reversed normal.

This works because the table is parametrized using the
angle between the view vector and the normal. This angle
is the same as the angle between the reflection vector
and the normal. So to get the equivalent lobe in the
refraction direction we get the angle between the
refraction direction and the reversed normal.

Note: This has issues shadow-map tagging but it should
be fixed separately.

Pull Request: https://projects.blender.org/blender/blender/pulls/118589
2024-02-26 15:20:16 +01:00
Miguel Pozo
1446b05ca4 Merge branch 'blender-v4.1-release' 2024-02-26 12:51:59 +01:00
Miguel Pozo
a106ff9f56 Fix #118634: EEVEE: Set clip threshold per material
Pull Request: https://projects.blender.org/blender/blender/pulls/118681
2024-02-26 12:49:29 +01:00
Campbell Barton
a8cc6bb75b Cleanup: spelling in comments 2024-02-26 10:23:52 +11:00
Eugene Kuznetsov
7f43699ebf DRW: Curves: Indexbuf optimization for large numbers of curves
This optimizes a few loops that become significant bottlenecks during
viewport rendering of scenes with large numbers of curves.

To render a curves object, Blender needs to generate a potentially
very large (but trivial) index buffer. As previously implemented,
this index buffer is generated in an extremely inefficient manner,
with a single-threaded loop and an explicit function call per entry.
The buffer then needs to be pushed onto the GPU, which is also a fairly
slow task.

The PR generates the index buffer directly on the GPU with compute
shader.

Pull Request: https://projects.blender.org/blender/blender/pulls/116617
2024-02-25 17:22:58 +01:00
Clément Foucault
06d3627c43 EEVEE-Next: Make closure evaluation fully type agnostic
The goal of this task is to remove noise in the most common material
layering configuration.

Subsequently, this also split the evaluation of different closure to
their own buffer to avoid discontinuity when denoising them.

This commit does a few things:
- [x] Removes use of global for closure random number.
- [x] Refactor the forward evaluation to be closure type agnostic.
- [x] Refactor the gbuffer lib to be closure type agnostic.
- [x] Reduces the number of picked closure to 3 maximum or less.
- [x] Use GPU_MATFLAG_COAT to tag the use of multiple usage of glossy BSDF.
- [x] Use two closure bin for Glossy when more than one.
- [x] Set closure bin per type for best noise level for most materials.
- [x] Change the gbuffer header to put the closure at their bin index.
- [x] Add a method to get a closure from the gbuffer from a specific bin.
- [x] Split lighting passes per Closure.

Pull Request: https://projects.blender.org/blender/blender/pulls/118079
2024-02-24 00:00:11 +01:00
Miguel Pozo
e842e9fd4c EEVEE-Next: Concatenate info strings
Pull Request: https://projects.blender.org/blender/blender/pulls/118674
2024-02-23 18:39:53 +01:00