Commit Graph

6903 Commits

Author SHA1 Message Date
Johannes J
769fe07668 GPU: Fix signed/unsigned mismatches in shader code
This fixes a crash when switching to face selection mode in the UV
editor.

Pull Request: https://projects.blender.org/blender/blender/pulls/111094
2023-08-14 11:22:03 +02:00
Clément Foucault
d844c5a13a Metal: Add support for Multi-Viewport
This seems to work but there is an issue with fragment
shader not getting the correct value.

Authored by Apple: Michael Parkin-White
2023-08-13 23:46:53 +02:00
Clément Foucault
c7dce76619 Metal: Various fixes
Authored by Apple: Michael Parkin-White
2023-08-13 23:42:06 +02:00
Hans Goudey
3d6a8ab54f Cleanup: Remove unused argument to PBVH draw 2023-08-12 12:17:25 -04:00
Jacques Lucke
cc4d5c432c RNA: move headers to C++
Also see #103343.

Pull Request: https://projects.blender.org/blender/blender/pulls/111022
2023-08-10 22:40:27 +02:00
Jeroen Bakker
72d3e43a3b Vulkan: Enable Draw Manager Test Cases
This PR enabled the draw manager test cases when compiling with
`WITH_VULKAN_BACKEND=On`. Currently they should pass all the tests
in draw_pass_test.cc that also pass for OpenGL. The draw_visibility
test seems to be faulty (also for OpenGL).

The vulkan backend doesn't have all the features implemented to
pass the Eevee testcases and are expected to fail.

Pull Request: https://projects.blender.org/blender/blender/pulls/110994
2023-08-10 21:41:52 +02:00
Aras Pranckevicius
d973355b3a Cleanup: reduce amount of math-related includes
Using ClangBuildAnalyzer on the whole Blender build, it was pointing
out that BLI_math.h is the heaviest "header hub" (i.e. non tiny file
that is included a lot).

However, there's very little (actually zero) source files in Blender
that need "all the math" (base, colors, vectors, matrices,
quaternions, intersection, interpolation, statistics, solvers and
time). A common use case is source files needing just vectors, or
just vectors & matrices, or just colors etc. Actually, 181 files
were including the whole math thing without needing it at all.

This change removes BLI_math.h completely, and instead in all the
places that need it, includes BLI_math_vector.h or BLI_math_color.h
and so on.

Change from that:
- BLI_math_color.h was included 1399 times -> now 408 (took 114.0sec
  to parse -> now 36.3sec)
- BLI_simd.h 1403 -> 418 (109.7sec -> 34.9sec).

Full rebuild of Blender (Apple M1, Xcode, RelWithDebInfo) is not
affected much (342sec -> 334sec). Most of benefit would be when
someone's changing BLI_simd.h or BLI_math_color.h or similar files,
that now there's 3x fewer files result in a recompile.

Pull Request #110944
2023-08-10 14:51:40 +03:00
Clément Foucault
4d74b91d5c Fix EEVEE-Next: Shadow: Missing shadow on first frame
This was caused by the free unused data pass in the
init phase that would reset the clip data of the first
tilemap.

Uploading and checking for an invalid index fixes the
issue.
2023-08-09 18:15:36 +02:00
Campbell Barton
8d0268b09c Cleanup: spelling in comments 2023-08-09 11:20:59 +10:00
Campbell Barton
8198de0b0b Cleanup: format disabled code (missed in recent cleanup) 2023-08-09 11:13:55 +10:00
Campbell Barton
1a675d0c47 Cleanup: format disabled code 2023-08-09 10:49:53 +10:00
Campbell Barton
faaac97239 Cleanup: format 2023-08-09 10:46:10 +10:00
Brecht Van Lommel
6e6716c180 Cleanup: compiler warnings 2023-08-08 17:37:24 +02:00
Jeroen Bakker
8de4b5a5ed Vulkan: Shader Compilation Errors
Fixing several shader compilation errors when using the vulkan backend.

* `eevee_lightprobe_irradiance_load_comp`: local variables used same name as push constants.
* `compositor_summed_area_table_compute_complete_y_prologues`: loop with texture_size call

Pull Request: https://projects.blender.org/blender/blender/pulls/110891
2023-08-07 14:49:08 +02:00
Clément Foucault
453cc9b84a EEVEE-Next: Irradiance Pool Size
Add pool size to allow predictable memory
footprint.
2023-08-06 20:30:08 +02:00
Clément Foucault
5d2e351baf EEVEE-Next: Irradiance Grid Compositing
This allows irradiance volume that have less priority to
transfer lighting to the ones with higher priority.
Meaning interactive relighting from the world or
lookdev HDRI is now supported if the world isn't baked
inside the volume data.

This should improve workflow with larger scenes and
interactivity with light setups.

To help setup with dynamic objects, this patch introduce
3 new parameter to remove some components from the
irradiance grids.

Pull Request: https://projects.blender.org/blender/blender/pulls/110838
2023-08-06 16:30:12 +02:00
Clément Foucault
5ac026c23a EEVEE-Next: Irradiance Volume validity weighting
This avoid samples inside walls to contribute to
the interpolated lighting. This help preventing
light leaking.

Pull Request: https://projects.blender.org/blender/blender/pulls/110851
2023-08-06 13:43:17 +02:00
Campbell Barton
8b8fe49d34 License headers: add SPDX-FileCopyrightText 2023-08-06 18:59:05 +10:00
Clément Foucault
d870f9e841 EEVEE-Next: Add back visibility group for irradiance volumes 2023-08-05 20:23:38 +02:00
Clément Foucault
46a17df415 Fix EEVEE-Next: Incorrect Irradiance Volume sorting
`world_to_grid_transposed` contains the resolution of
the grid and is also transposed which isn't what we
need for computing the volume.
2023-08-05 19:47:16 +02:00
Campbell Barton
9ea8477c23 Cleanup: various non-functional C++ changes 2023-08-05 13:57:29 +10:00
Campbell Barton
7f34ad736a Cleanup: spelling in comments 2023-08-05 13:54:25 +10:00
Hans Goudey
07019e7ef5 Cleanup: Remove more struct keywords from C++ headers 2023-08-04 22:47:29 -04:00
Hans Goudey
ffe4fbe832 Cleanup: Move editors headers to C++
See #103343

Pull Request: https://projects.blender.org/blender/blender/pulls/110820
2023-08-05 02:57:52 +02:00
Hans Goudey
c15d391e86 Cleanup: Various cleanups in newly C++ headers
Mostly remove unnecessary struct and typedef keywords.
Move a few more small wm headers to C++ as well.
2023-08-04 17:55:14 -04:00
Hans Goudey
bc8c892c65 Cleanup: Move WM headers to C++
Also move a few more headers that included WM headers.

Pull Request: https://projects.blender.org/blender/blender/pulls/110815
2023-08-04 23:11:22 +02:00
Miguel Pozo
2f6af7a4b9 EEVEE Next: Fix: Normal RenderPass viewport display flicker
The active display should always be rendered,
even if the current sample doesn't write to it.
2023-08-04 18:15:38 +02:00
Brecht Van Lommel
efe10cee5c Cleanup: compiler warning with clang 2023-08-04 17:01:09 +02:00
Miguel Pozo
a5e62537a5 Fix: Compilation error after 41c83d6cfc 2023-08-04 16:50:53 +02:00
Miguel Pozo
ff470f3f2e EEVEE Next: Volumes
Port of EEVEE unified volume rendering to EEVEE Next, using compute
shaders.

Improvements:
- Skip empty volume outside object bounds. (Large performance
  increase)

Currently missing:
- Shadows and irradiance integration.
- Grid-space TAA.

Main Task: #105672

Pull Request: https://projects.blender.org/blender/blender/pulls/107176
2023-08-04 16:47:16 +02:00
Miguel Pozo
41c83d6cfc EEVEE Next: Sculpt support
Add sculpt support to EEVEE Next.

It creates a new resource handle for sculpt object, since
BKE_object_boundbox_get returns a wrong (zeroed) bounding box.

This also adds a new `resource_handle` function to the `draw::Manager`
that works like the default one, but lets the caller optionally override the
object matrix and/or bounds.

Pull Request: https://projects.blender.org/blender/blender/pulls/110703
2023-08-04 16:38:04 +02:00
Campbell Barton
0caf227530 License headers: use SPDX-FileCopyrightText for *.inl and *.osl files 2023-08-04 13:24:17 +10:00
Hans Goudey
81f51e5433 Cleanup: Remove mistakenly duplicated file in C++ conversion
Mistake in 731d296f35
2023-08-03 20:04:50 -04:00
Campbell Barton
adf58a77ff Cleanup: use LISTBASE_FOREACH & LISTBASE_FOREACH_BACKWARD macros 2023-08-04 08:51:13 +10:00
Campbell Barton
f7be60eff0 Cleanup: format 2023-08-04 08:46:18 +10:00
Campbell Barton
7afd938dde Cleanup: various non-functional C++ changes 2023-08-04 08:45:57 +10:00
Miguel Pozo
63f29fdcfe EEVEE Next: Fix: Ambient Oclussion Pass
Fix regression after #110219.
Avoid using layer views, instead of adding the MIP_SWIZZLE_VIEW usage
to renderbuffers.
2023-08-03 17:48:35 +02:00
Clément Foucault
4d75c0484a EEVEE-Next: Use reflection lightprobes for raytrace fallback 2023-08-03 17:29:31 +02:00
Hans Goudey
dc7979a056 Cleanup: Make geometry set naming more consistent
Remove the "_for_read" suffix from methods to get geometry and geometry
components. That should be considered the default, so the suffix just
adds unnecessary text. This is consistent with the attribute API and
various implicit sharing data access methods.

Use "from_mesh" instead of "create_with_mesh". This is consistent with
the recently used naming for the `IndexMask` API.

Pull Request: https://projects.blender.org/blender/blender/pulls/110738
2023-08-03 17:09:18 +02:00
Miguel Pozo
26d75293e8 EEVEE Next: Fix: Render region
` RenderData::border` and `View3d::render_border` are independent of each other.
Render region can be enabled even if the `V3D_RENDER_BORDER` flag is disabled.
And using the viewport render border shouldn't disable the camera view outer borders.

Pull Request: https://projects.blender.org/blender/blender/pulls/110761
2023-08-03 17:08:23 +02:00
Clément Foucault
0dc3318ffd EEVEE-Next: Irradiance Bake: Virtual Offset
Implement capture point bias. This offsets the capture
points to reduce the amount bad capture locations (i.e.:
inside objects, near walls etc...).

Two new parameters are added:
- Capture Surface Bias: Ensure a minimum distance between
capture points and surrounding geometry. This is expressed as the
relative distance between two capture point. Requires re-bake
to take effect.
- Capture Escape Bias: Moves capture points enclosed inside
objects above the nearest surface. This bias defines how far a
capture point can be moved for escaping the object. This is
expressed as the relative distance between two capture point.
Requires re-bake to take effect.

This is called virtual offset in the reference material.

A quick prepass runs before the baking to offset the samples away
from any surface that could potentially make bad samples.

In order to speedup the process, we create cluster list of surfels
near each irradiance grid point. This allow access to neighboring
surfels that can contribute to the virtual offset which should
never be more than half a cell wide.

Pull Request: https://projects.blender.org/blender/blender/pulls/110355
2023-08-03 16:47:05 +02:00
Miguel Pozo
567a2e5a6f EEVEE Next: Overscan support
Add overscan support for both viewport and final renders.

Pull Request: https://projects.blender.org/blender/blender/pulls/110313
2023-08-03 16:19:08 +02:00
Clément Foucault
8e33b20de9 EEVEE-Next: Irradiance Bake: Add validity based dilation
Implement invalid sample points filling. Improves invalid regions
but introduce light leak.

Grid sample points are considered invalid if they have a ratio of
front-face ray hit under the given threshold. This is a post-processing
pass on the baked lighting that fills dark regions produced by
invalid sample location (e.g.: inside walls) with valid neighbor
samples data.

Two new parameters are added:

- Dilation Threshold: Validity threshold under which grid samples are
considered invalid. Invalid samples will gather valid lighting data
from valid neighbors inside the dilation radius.
- Dilation Radius: Radius of the dilation process. Expressed in grid
sample distance.

The validity of each point is progressively refined just like the
lighting data during the baking process.

The dilation process is implemented as a post-processing pass during
the loading of the grid data into the irradiance atlas. This allows
live tweaking the dilation parameters.

Pull Request: https://projects.blender.org/blender/blender/pulls/110386
2023-08-03 15:48:33 +02:00
Clément Foucault
17db856686 EEVEE-Next: Ray-tracing Denoise Pipeline
This is a full rewrite of the raytracing denoise pipeline. It uses the
same principle as before but now uses compute shaders for every stages
and a tile base approach. More aggressive filtering is needed since we
are moving towards having no prefiltered screen radiance buffer. Thus
we introduce a temporal denoise and a bilateral denoise stage to the
denoising. These are optionnal and can be disabled.

Note that this patch does not include any tracing part and only samples
the reflection probes. It is focused on denoising only. Tracing will
come in another PR.

The motivation for this is that having hardware raytracing support
means we can't prefilter the radiance in screen space so we have to
have better denoising. Also this means we can have better surface
appearance with support for other BxDF model than GGX. Also GGX support
is improved.

Technically, the new denoising fixes some implementation mistake the
old pipeline did. It separates all 3 stages (spatial, temporal,
bilateral) and use random sampling for all stages hoping to create
a noisy enough (but still stable) output so that the TAA soaks the
remaining noise. However that's not always the case. Depending on the
nature of the scene, the input can be very high frequency and might
create lots of flickering. That why another solution needs to be found
for the higher roughness material as denoising them becomes expensive
and low quality.

Pull Request: https://projects.blender.org/blender/blender/pulls/110117
2023-08-03 15:32:06 +02:00
Miguel Pozo
9db289924f EEVEE Next: Motion Blur fixes
Fix motion blur for viewport re-projection and final image renders.

Pull Request: https://projects.blender.org/blender/blender/pulls/110114
2023-08-03 12:48:12 +02:00
Jason Fielder
ee96947abc Fix #110372: Curve edit handles fixed in Metal backend
There were two separate issues occurring here:

With some other recent changes to curve handles, an early exit was
added when the handles should not display, however, this early exit
was not discarding geometry in the Metal implentation, but leaving
values undefined. Resulting in random geometry flickering on screen.
This may not previously have happened in certain modes if the vertex
buffers were zero-initialised up-front (which only happens with certain
debug flags).

Curve handle geometry generation would render incorrectly when
outputting triangleStrips IF the transparent border was disabled.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/110719
2023-08-03 11:34:52 +02:00
Jason Fielder
0f39e46914 DRW: Support optimal prim type for indirect curves in Metal
Adds support for generating curve primtiives avoiding the
use of primtiive restarts. This maixmises geometry performance
when using Metal.

Also ensure that the existing index buffer optimization path is
skipped for indirect draw calls where counts are not known at
submission time.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/109972
2023-08-03 11:19:48 +02:00
Campbell Barton
de391cf811 Cleanup: use nullptr instead of zero 2023-08-03 19:17:43 +10:00
Campbell Barton
c6f3f19648 Cleanup: reduce variable scope when removing in a while loop 2023-08-03 19:17:43 +10:00
Pratik Borhade
1cf4bc2719 Fix #110694: Edit bones draw as they were in pose mode
During the refactor 4aef0204ac, assignment of overlay color for edit
mode was removed from get_bone_wire_color.

Pull Request: https://projects.blender.org/blender/blender/pulls/110715
2023-08-03 11:03:39 +02:00