WIP: Eevee-next: Reflection Probes #108497

Closed
Jeroen Bakker wants to merge 24 commits from Jeroen-Bakker:eevee-next-reflection-probes into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Member

This PR adds support for reflection probes in Eevee-next.

Requirements

  • For up to a number of reflection probes in the scene the reflection probes cubemaps are generated.
  • The cubemaps will be stored in the reflection probes cubemap (same texture that contains the world reflection map.
  • Cubemaps of reflection probes will use alpha channel to indicate that the world cubemap should be integrated.
  • A storage buffer will contain additional information about the cubemap, layout and positioning in the world.
  • In the deferred renderpass we should go over each cubemap in the storage buffer detect if it is 'near' and evaluate the reflection probe.

Unclear stuff

  • How to determine if something is near. Initially I would use inside the inner scope of the reflection probe.

NOTE: Reflection planes are out of scope.

This PR adds support for reflection probes in Eevee-next. **Requirements** - For up to a number of reflection probes in the scene the reflection probes cubemaps are generated. - The cubemaps will be stored in the reflection probes cubemap (same texture that contains the world reflection map. - Cubemaps of reflection probes will use alpha channel to indicate that the world cubemap should be integrated. - A storage buffer will contain additional information about the cubemap, layout and positioning in the world. - In the deferred renderpass we should go over each cubemap in the storage buffer detect if it is 'near' and evaluate the reflection probe. **Unclear stuff** - How to determine if something is near. Initially I would use inside the inner scope of the reflection probe. > NOTE: Reflection planes are out of scope.
Jeroen Bakker added this to the 4.0 milestone 2023-06-01 09:36:34 +02:00
Jeroen Bakker self-assigned this 2023-06-01 09:36:34 +02:00
Jeroen Bakker added 6 commits 2023-06-01 09:36:39 +02:00
commit f6b871b57a45710b550314b29b9efe75454bddde
Merge: f8e24de1764 ad6fa96041
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Fri May 26 08:41:34 2023 +0200

    Merge branch 'main' into eevee-next-world-shader

commit f8e24de1764691d9776ed9e6df9378e81aaaaee9
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Fri May 26 08:30:28 2023 +0200

    Fix cubemap array.

commit 27e98ea4d0b96ec6e3bf98943d0ca961fb7278c5
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 18:03:39 2023 +0200

    Mark initial world dirty.

commit fb7c5cadf25c58185ab0c29d25792f5d74509028
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 17:56:58 2023 +0200

    Use same reflection as eevee-legacy

commit 773c58ba3caf38b90f6235dfafefb9ddffc378d5
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 15:24:33 2023 +0200

    Incorrect merge.

commit 6e6281a8456970134f2ab2b55dc06baf40029334
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 15:23:52 2023 +0200

    Revert "Merge branch 'eevee-next-irradiance-cache' into eevee-next-world-shader"

    This reverts commit 272eb1da8243ca5030a69b9a034f6879e56f2017, reversing
    changes made to d09a8d09e1028fa9d96da4956715368f4a102be4.

commit 7dc261508a6cb76e49b7f3d201b6bd52879f6c8c
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 15:16:22 2023 +0200

    Fixed many small issues.

commit 9ad112740dddaa1848fffa66b3255d35fc8d7c54
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 11:08:03 2023 +0200

    Remove flags structure.

commit e243f56f207a253a4a21a03e50769e573cb10ac1
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 10:12:16 2023 +0200

    Fix compilation issue

commit 272eb1da8243ca5030a69b9a034f6879e56f2017
Merge: d09a8d09e10 4ad77fcc74
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Thu May 25 10:12:06 2023 +0200

    Merge branch 'eevee-next-irradiance-cache' into eevee-next-world-shader

commit 4ad77fcc74
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Wed May 24 22:51:44 2023 +0200

    EEVEE-Next: Add progress to irradiance bake

commit d09a8d09e1028fa9d96da4956715368f4a102be4
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 14:28:39 2023 +0200

    Removed comments.

commit 94d4d77936347c4c97282c3cbef65585f2cd9cb7
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 14:19:23 2023 +0200

    Rendering of cubemap.

commit fc91ed10a9
Merge: 487ab2073b a9beb62449
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue May 23 12:31:50 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit cb2dd516503afbb9eacdfc3f3005c335374c518d
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 11:49:20 2023 +0200

    Initial world probe pipeline.

commit 2167d5c32eb23b29bb0132c5da96478fc3eec9d9
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 11:32:29 2023 +0200

    Renames and reorganizing code according to code review.

commit 7d1ec9cfd49a2beb1a54d33d023b700fce811414
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 11:18:24 2023 +0200

    Rename module to eevee_reflection_probes

commit 01382ca4eb60742ebabe56f40143ffbd1242215e
Merge: 3e2cd9ab68a 4997748e5e
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 11:15:07 2023 +0200

    Merge branch 'main' into eevee-next-world-shader

commit 3e2cd9ab68a5a316d07628a2801941f0523fc2ff
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Tue May 23 09:28:35 2023 +0200

    Research how to use GPUMaterials

commit 1381e4c4171cdf776dbf74b56aee4d08a5261170
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Mon May 22 16:00:59 2023 +0200

    Add initial CubemapsModule.

commit 45d5339f3ac711ebf7f7eaeed1168a0561e082a3
Merge: 1ab265f535 2164515fab
Author: Jeroen Bakker <jeroen@blender.org>
Date:   Mon May 22 13:00:02 2023 +0200

    Merge branch 'main' into eevee-next-world-shader

commit 487ab2073b
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun May 7 16:06:04 2023 +0200

    EEVEE-Next: Irradiance Bake: Avoid asserts on Metal

    This avoid triggering the asserts in place in the Metal
    backend. However it does not work yet.

commit 63a2736e5e
Merge: 12fc600d7f c796cbebef
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri May 5 16:18:36 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit 12fc600d7f
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri May 5 16:14:11 2023 +0200

    EEVEE-Next: Fix compilation error with Metal

commit 76777bb874
Merge: dcf3392cec 29053c5c02
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri May 5 14:54:31 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit dcf3392cec
Merge: e6d1a42d12 358ce4f52b
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 30 22:14:57 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit e6d1a42d12
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 30 22:06:59 2023 +0200

    EEVEE-Next: Irradiance Cache: Add version control for new parameter

commit 502d9db82c
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 30 22:02:56 2023 +0200

    EEVEE-Next: Irradiance Cache: Add support for cancelling operator

commit 95b8b71908
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 30 21:35:42 2023 +0200

    EEVEE-Next: Irradiance Cache: Reserve slot for world irradiance

    This doesn't implement the world irradiance extraction process,
    but only reserve the storage for it.

commit 12095b8e16
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 30 21:10:55 2023 +0200

    EEVEE-Next: Irradiance Cache: Use scene bounds for surfel cache

    This remove the per irradiance grid approach. The idea is to do the light
    transport only once for each visibility collection and store the
    irradiance for all irradiance grid using this visibility mask.

    This removes the need for the lightprobe near/far clip parameters.

commit 0388f93e79
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Apr 27 19:59:11 2023 +0200

    EEVEE-Next: Irradiance Cache: Store final format

commit f14c7e804c
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 22 18:08:27 2023 +0200

    EEVEE-Next: Irradiance Cache: Load irradiance in atlas

    This approach allow streaming of visible grids and
    has a controlled memory budget.

commit 3452d3998c
Merge: d3e761cda3 99f5e60b86
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 22 17:37:49 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit d3e761cda3
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 16 22:00:56 2023 +0200

    EEVEE-Next: Make Spherical harmonic follow object transform

    This make the baking step output local space spherical harmonics which
    need to be rotated back to world before being evaluated.
    In practice we rotate the evaluated direction.

commit a5310b7720
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Apr 13 20:12:32 2023 +0200

    EEVEE-Next: Adapt code to new irradiance cache

commit b1af33d52a
Merge: 892f7077bc 7e764ec692
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Apr 13 14:12:40 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit 892f7077bc
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Apr 13 11:51:59 2023 +0200

    Add new lightprobe cache

    Waiting for the commit to be in master.

commit 2018d6c8c1
Merge: d30ad0e381 c26083b6be
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Apr 13 11:40:30 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit d30ad0e381
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Wed Apr 5 12:47:24 2023 +0200

    Cleanup: EEVEE-Next: Avoid implicit type cast

commit a0610ef654
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 2 20:09:20 2023 +0200

    EEVEE-Next: IrradianceBake: Fix shadow tagging & rendering

commit ff5db3a72e
Merge: 74d89d0b24 70970299ef
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Apr 2 16:23:52 2023 +0200

    Merge branch 'eevee-next-irradiance-cache' of projects.blender.org:pragma37/blender into eevee-next-irradiance-cache

commit 74d89d0b24
Merge: 9461d7fc9a 7592ec35d3
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 17:17:19 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit 9461d7fc9a
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 17:10:23 2023 +0200

    EEVEE-Next: IrradianceBake: Add spherical harmonic encoding

    This adds a separate pass to project the neighbor surfels to the final
    irradiance sample points.

commit 6a6ff3310a
Merge: 85bbf53f84 e652d0002b
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 13:31:18 2023 +0200

    Merge branch 'main' into eevee-next-irradiance-cache

commit 85bbf53f84
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 12:02:46 2023 +0200

    EEVEE-Next: Fix wrong irradiance surfel spawning area

commit 14973fabe6
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 12:00:33 2023 +0200

    BLI: Rotation: Add CartesianBasis `transform_point` and `invert`

commit 34adebcf43
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sat Apr 1 11:54:02 2023 +0200

    GPU: FrameBuffer: Fix empty framebuffer update

    The framebuffer default size was only set during the first bind. This
    is because the `dirty_attachments_ tag` wasn't set and thus the
    framebuffer size was never passed down to the GL.

    Split to `default_size_set()` to not affect other code paths that use
    `size_set()`.

commit 70970299ef
Author: Miguel Pozo <pragma37@gmail.com>
Date:   Wed Mar 29 18:48:24 2023 +0200

    Shadow tag usage for surfels

commit bfeb1a1a8d
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Wed Mar 29 21:01:09 2023 +0200

    EEVEE-Next: IrradianceBake: Fix light bounce

    Light bouncing needs a feedback mechanism. We cannot reuse the same
    radiance for scattering light and accumulating it.

    This splits the final accumulation to `radiance` and bouncing light into
    `incomming_light` and `outgoing_light`.

commit 5dc6535591
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Wed Mar 29 14:52:44 2023 +0200

    EEVEE-Next: IrradianceBake: Fix integration power and inconsistencies

    Now it follows proper conventional notation.

commit a484f43a17
Author: Miguel Pozo <pragma37@gmail.com>
Date:   Tue Mar 28 20:05:15 2023 +0200

    Irradiance Cache: Display Grid

commit 114713c354
Author: Miguel Pozo <pragma37@gmail.com>
Date:   Tue Mar 28 20:00:19 2023 +0200

    Workaround compilation error on Win Nvidia drivers

commit a4c571dc8e
Author: Miguel Pozo <pragma37@gmail.com>
Date:   Tue Mar 28 19:59:35 2023 +0200

    Fix irradiance_grid.world_to_grid

commit 22ccf83700
Author: Miguel Pozo <pragma37@gmail.com>
Date:   Tue Mar 28 17:51:27 2023 +0200

    Cleanup: Fix typo

commit 73f96fe216
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 28 18:12:28 2023 +0200

    EEVEE-Next: IrradianceBake: Implement multi bounce support

    This is still broken as the light seems to never converge.

commit db3028a624
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 28 13:21:04 2023 +0200

    EEVEE-Next: IrradianceBake: Implement light propagation

commit 4e3eb2f7a5
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 28 13:18:22 2023 +0200

    EEVEE-Next: IrradianceBake: Fix crash caused by motion blur

commit 5de76bbbff
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 28 13:17:25 2023 +0200

    EEVEE-Next: IrradianceBake: Fix light-leak

    This fixes the light leaking issue caused by the surfel lists.
    The fix consists in clumping more surfel together when creating the lists
    then rewire the coplanar surfels to more valid surfels up and down the
    same list.

commit da91a2ccb0
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Mar 26 15:39:17 2023 +0200

    EEVEE-Next: IrradianceBake: Fix memleak

commit 75b62a9cfb
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri Mar 24 20:46:02 2023 +0100

    EEVEE-Next: IrradianceBake: Add surfel list & sorting

commit 6f6c3afe91
Merge: 0297bde629 9c8cb823a0
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri Mar 24 17:45:20 2023 +0100

    Merge branch 'main' into eevee-next-irradiance-cache

commit 0297bde629
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri Mar 24 17:34:39 2023 +0100

    EEVEE-Next: Debug: Fix surfel debugging showing background

commit caa0e7edcf
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Fri Mar 24 17:34:20 2023 +0100

    EEVEE-Next: IrradianceBake: Correct surfel placement from grid objects

commit 6669771215
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Mar 23 18:16:22 2023 +0100

    EEVEE-Next: LightBake: Fix few mistakes preventing correct baking & debug

    Was missing manager sync, a buffer read and copy-on-write tagging.

commit e696507aa5
Merge: 38f6de30cf b57b22388c
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Mar 23 16:44:05 2023 +0100

    Merge branch 'main' into eevee-next-irradiance-cache

commit 38f6de30cf
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Mar 23 16:41:48 2023 +0100

    EEVEE-Next: LightCache: Solidify the baking pipeline

commit e6de2fc4f7
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Thu Mar 23 16:39:02 2023 +0100

    EEVEE-Next: GI: Add irradiance sample count option

commit 7b3d4c9e49
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 21 20:15:59 2023 +0100

    EEVEE-Next: LightCache: Add basis of new lightcache version

    This should allow to keep both version working during the period where
    both eevee versions are available.

commit 795bc96cfe
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Tue Mar 21 12:25:17 2023 +0100

    EEVEE-Next: LightCache: Add GL & GPU context functions

commit dddfcd6f7a
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Mon Mar 20 22:07:21 2023 +0100

    EEVEE-Next: LightProbe: Add auto update detection

    This allow probe update and deletion to trigger an auto bake.

commit 52a7125ce3
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Mon Mar 20 19:45:25 2023 +0100

    EEVEE-Next: LightCache: Port basic lightcache structure to C++

    This removes the complexity of resource sharing as it isn't even leveraged
    yet. So keep the code as simple as possible for now.

commit 408c5d7281
Author: Clément Foucault <foucault.clem@gmail.com>
Date:   Sun Mar 19 21:33:55 2023 +0100

    EEVEE-Next: Irradiance-Cache: Add surfel placement

    Spawning surfels uses a new shader pipeline (called `capture`) to avoid
    the complexity of modifying the deferred or forward pipeline.
    The shaders are light to compile and should only be compiled on bake.

    This is very WIP: the surfel projection box is hardcoded and the 3
    projections are done every frame. The surfels are placed in a regular
    grid because of the raster pipeline used to spawn them.

    Note: While this is really fast, I am not sure this will scale well for
    highly detailed lighting conditions. In the case where the surfel density
    is too low, the aliasing might create really poor result.
Jeroen Bakker added this to the Viewport & EEVEE project 2023-06-01 09:36:49 +02:00
Jeroen Bakker added the
Type
Design
Module
Viewport & EEVEE
labels 2023-06-01 09:45:06 +02:00
Jeroen Bakker requested review from Clément Foucault 2023-06-01 09:45:18 +02:00
Jeroen Bakker added 1 commit 2023-06-01 11:45:30 +02:00
Jeroen Bakker added 2 commits 2023-06-05 10:22:26 +02:00
Jeroen Bakker added a new dependency 2023-06-16 15:08:06 +02:00
Jeroen Bakker added 6 commits 2023-06-20 08:14:07 +02:00
Jeroen Bakker added 1 commit 2023-06-20 09:11:30 +02:00
Jeroen Bakker added 1 commit 2023-06-20 13:05:02 +02:00
Jeroen Bakker added 1 commit 2023-06-22 09:08:05 +02:00
Jeroen Bakker added 1 commit 2023-06-22 15:41:04 +02:00
Jeroen Bakker added 1 commit 2023-06-23 10:36:01 +02:00
Jeroen Bakker added 1 commit 2023-06-23 14:28:56 +02:00
Jeroen Bakker added 3 commits 2023-06-23 15:51:31 +02:00
Jeroen Bakker closed this pull request 2023-06-23 16:01:07 +02:00

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#108497
No description provided.