Announcement

Collapse
No announcement yet.

Global Illumination alternatives

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Originally posted by hallatore View Post
    This has nothing with what I stated above, this is something else.

    Are your lights set to movable? And what happens if you turn up the intensity on the skylight?

    This is my scene with/without the skylight set to movable.

    [ATTACH=CONFIG]35578[/ATTACH]

    [ATTACH=CONFIG]35579[/ATTACH]
    Are you using DFGI? In my scene there is a lot noise on DFGI.

    Comment


      Originally posted by Shrimp View Post
      Are you using DFGI? In my scene there is a lot noise on DFGI.
      I think I am? It's all dynamic shadows and a 2 week old master build of the engine.

      Do you have a good guide on how to set it up. What I found was a bit diffuse.

      Comment


        Originally posted by hallatore View Post
        I think I am? It's all dynamic shadows and a 2 week old master build of the engine.

        Do you have a good guide on how to set it up. What I found was a bit diffuse.

        I didn't see GI from your image,but it also looks good.I built master branch today and tested a scene with DFGI but found some problems.There is GI(II) indeed but too noisy.Click image for larger version

Name:	ScreenShot00000.jpg
Views:	1
Size:	88.6 KB
ID:	1074732

        Comment


          Can anyone else reproduce that DF shadowing breaks when play-previewing meshes placed (with instance setting for DF checked) with the foliage tool? I'm totally bamboozled by this issue now..

          edit: it's a bug, so if anyone else experiences it know that it will be fixed at some point.
          Last edited by Ravneson; 04-21-2015, 03:18 AM.

          Comment


            @DanielW: I wonder if you could share what you are currently working on in regards to DF AO/GI? Like noise reduction or general performance optimization? Keep up the good work!
            ArtStation - Portfolio

            Comment


              During the GDC demo (Dec-Mar) I did
              * GPU management of the distance field objects. Instead of the rendering thread uploading all the distance field objects every frame, the GPU manages adds / removes / updates. This allows many thousands of dynamic objects to exist in the scene and was key to supporting the scale of the GDC kite demo.
              * Support for instanced static meshes. The above GPU object management was necessary for this to be reasonably performant with trees. There were something like 2 million trees, these are culled down to just the ones near the camera very quickly.
              * Heightfield occlusion - provides DFAO from Landscapes
              * Distance Field GI prototype - Surfels (oriented disks) are placed on objects, lit by lights each frame to compute direct lighting (shadowing provided by distance field ray tracing), then compute GI transfer to pixels on your screen from all the nearby disks. Shadowing is provided from the same distance field cone traces as DFAO. Bounce distance is limited to ~10m, there's some leaking, and it's about 4x slower than it needs to be to run on mid spec PC / consoles. This was intended to be a general purpose GI method for the GDC open world demo that works on any static meshes but it wasn't coming together fast enough so I shelved it in favor of heightfield GI.
              * Heightfield GI - provides GI from Landscapes, with a bounce distance of about 90m. Costs 2.6ms on 980GTX. This was done by creating a GBuffer atlas of the landscape components (diffuse, height, normal) then computing direct lighting for that, then computing the indirect lighting transfer to the pixels on your screen. It integrates with the DFAO pipeline to make use of adaptive shading and DF local occlusion. This is a pretty good feature for open world games and can still be optimized a lot (it was made in 2 weeks).

              Then I took a month or so break in there to recover =)

              Right now I'm revisiting DFAO, trying to improve the quality and performance so that it stands alone and can be used on consoles. I made 4x performance gains over the worst case by compositing all the per-object distance fields into a global one stored in clipmaps that follow the viewer and are updated incrementally. Then cone tracing only has to go through one volume texture instead of ~150. The quality is basically the same - I use the per-object distance fields for the beginning of a shadow cone trace where the self-shadowing is so crucial and the global DF for further out.

              I also switched to computing DFAO at a fixed resolution based on the screen instead of the Irradiance Cache-like algorithm I was using before that did adaptive shading. The problem with adaptive shading is that it only helps in the best case - the worst case like foliage still has to do the cone traces at the high resolution, which kill performance. The result is more stable performance and less noise / splotchiness / shifting.

              Once that is wrapped up, I plan to return to DFGI and fix up the major issues with it:
              * Multi-bounce GI. I want to solve this by computing shadowing in the hemisphere of a Surfel by cone tracing the distance fields, then storing off that directional shadowing representation. That will be used to shadow sky lighting (which will be come indirect sky lighting), direct lighting from other Surfels (which will become second bounce indirect lighting). This will be much faster now that I have a global distance field to sample.
              * Doesn't work indoors due to over-occlusion. I want to solve this by combining the two shadow depth visibility functions - one from the pixel being lit, the other from the Surfel. Each visibility function has good quality near the point it is representing, but low quality elsewhere, so combined it makes the best of both worlds.
              * Insufficient bounce distance. With the combination of shadowing from both the receiver and the Surfels I can double the bounce distance without introducing a bunch more leaking.
              * Performance cost too high. Right now the Surfel lighting is very naive, culling only happens on an object granularity. I want to generate the Surfel tree using clustering so it is not object-based (light cuts), then I should get a big speedup.
              * Bright singularity artifacts. Having faster Surfel lighting via the better Surfel tree should hopefully allow the 4x higher Surfel density that is needed to improve these.

              Anyway, that's the plan. We'll see how it actually pans out.
              Last edited by DanielW; 04-21-2015, 05:05 PM.

              Comment


                Thanks for that detailed breakdown!
                ArtStation - Portfolio

                Comment


                  Always nice to hear updates about this kind of thing, even when half of it goes over my head there's stuff to take away from it.

                  Looking forward to Heightfield GI as well =]

                  Comment


                    Good to know! The 90m bounce distance for terrain specular doesn't seem like enough, but then you're tracing a 2.5d g-buffer representation, which is a heck of a lot like screenspace raytacing to begin with.

                    Comment


                      Originally posted by DanielW View Post
                      During the GDC demo (Dec-Mar) I did
                      * GPU management of the distance field objects. Instead of the rendering thread uploading all the distance field objects every frame, the GPU manages adds / removes / updates. This allows many thousands of dynamic objects to exist in the scene and was key to supporting the scale of the GDC kite demo.
                      * Support for instanced static meshes. The above GPU object management was necessary for this to be reasonably performant with trees. There were something like 2 million trees, these are culled down to just the ones near the camera very quickly.
                      * Heightfield occlusion - provides DFAO from Landscapes
                      * Distance Field GI prototype - Surfels (oriented disks) are placed on objects, lit by lights each frame to compute direct lighting (shadowing provided by distance field ray tracing), then compute GI transfer to pixels on your screen from all the nearby disks. Shadowing is provided from the same distance field cone traces as DFAO. Bounce distance is limited to ~10m, there's some leaking, and it's about 4x slower than it needs to be to run on mid spec PC / consoles. This was intended to be a general purpose GI method for the GDC open world demo that works on any static meshes but it wasn't coming together fast enough so I shelved it in favor of heightfield GI.
                      * Heightfield GI - provides GI from Landscapes, with a bounce distance of about 90m. Costs 2.6ms on 980GTX. This was done by creating a GBuffer atlas of the landscape components (diffuse, height, normal) then computing direct lighting for that, then computing the indirect lighting transfer to the pixels on your screen. It integrates with the DFAO pipeline to make use of adaptive shading and DF local occlusion. This is a pretty good feature for open world games and can still be optimized a lot (it was made in 2 weeks).

                      Then I took a month or so break in there to recover =)

                      Right now I'm revisiting DFAO, trying to improve the quality and performance so that it stands alone and can be used on consoles. I made 4x performance gains over the worst case by compositing all the per-object distance fields into a global one stored in clipmaps that follow the viewer and are updated incrementally. Then cone tracing only has to go through one volume texture instead of ~150. The quality is basically the same - I use the per-object distance fields for the beginning of a shadow cone trace where the self-shadowing is so crucial and the global DF for further out.

                      I also switched to computing DFAO at a fixed resolution based on the screen instead of the Irradiance Cache-like algorithm I was using before that did adaptive shading. The problem with adaptive shading is that it only helps in the best case - the worst case like foliage still has to do the cone traces at the high resolution, which kill performance. The result is more stable performance and less noise / splotchiness / shifting.

                      Once that is wrapped up, I plan to return to DFGI and fix up the major issues with it:
                      * Multi-bounce GI. I want to solve this by computing shadowing in the hemisphere of a Surfel by cone tracing the distance fields, then storing off that directional shadowing representation. That will be used to shadow sky lighting (which will be come indirect sky lighting), direct lighting from other Surfels (which will become second bounce indirect lighting). This will be much faster now that I have a global distance field to sample.
                      * Doesn't work indoors due to over-occlusion. I want to solve this by combining the two shadow depth visibility functions - one from the pixel being lit, the other from the Surfel. Each visibility function has good quality near the point it is representing, but low quality elsewhere, so combined it makes the best of both worlds.
                      * Insufficient bounce distance. With the combination of shadowing from both the receiver and the Surfels I can double the bounce distance without introducing a bunch more leaking.
                      * Performance cost too high. Right now the Surfel lighting is very naive, culling only happens on an object granularity. I want to generate the Surfel tree using clustering so it is not object-based (light cuts), then I should get a big speedup.
                      * Bright singularity artifacts. Having faster Surfel lighting via the better Surfel tree should hopefully allow the 4x higher Surfel density that is needed to improve these.

                      Anyway, that's the plan. We'll see how it actually pans out.
                      Wow this is much better than trello.
                      I always found that roadmap particularly lacking since team members don't update the contents of the cards often, so i very much appreciate what you're writing here.
                      Also, i find your propositions well thought, so i'm beginning to really hope on this. Especially on the speed increases. If we could reach the 8/10 ms with DFAO and DFGI even with their shortcomings i would be very happy.

                      Comment


                        Originally posted by DanielW View Post
                        During the GDC demo (Dec-Mar) I did
                        ...
                        Echoing what others have said, this is a really great write-up. Thank you.

                        Comment


                          I download zip file for the master branch and when I try to compile it get a bunch of errors.
                          Assets: Military Ammunition (Released)
                          Plugins: BlueManBPFunctionLibrary C++ plugin (Free), Blue Man Vehicle AI Plugin (Released), Air Resistance C++ Plugin (WIP), Blue Man Vehicle Physics Plugin (Marketplace)
                          Projects: Giants Of Destruction

                          Comment


                            Originally posted by Blue man View Post
                            I download zip file for the master branch and when I try to compile it get a bunch of errors.
                            Did you say n when setup asked to overwrite files?

                            "edit"
                            Noticed the latest Master did not have any overwrites, so must be something else.
                            Last edited by Graute; 04-23-2015, 10:15 AM.

                            Comment


                              I will post a picture soon.
                              Assets: Military Ammunition (Released)
                              Plugins: BlueManBPFunctionLibrary C++ plugin (Free), Blue Man Vehicle AI Plugin (Released), Air Resistance C++ Plugin (WIP), Blue Man Vehicle Physics Plugin (Marketplace)
                              Projects: Giants Of Destruction

                              Comment

                              Working...
                              X