Jove GI - Precomputed Radiance Transfer Volumes

Hi everyone! I’m the developer of the graphical framework Jove. It currently in its 1.0 state consists out of IBL tools and physically based shaders. For patch 1.1 I am creating a GI system - Precomputed Radiance Transfer Volumes or PRTV for short - that’s going to be included the main version of Jove. I also, depending entirely on feedback of course but I’m 99% sure, intend to create a separate version containing only the GI solution. Since I realise not everyone who wants a GI system wants it completely integrated into a physically based shading system. So in order to keep things organized I’ve decided to create this WIP thread instead of cluttering the main thread, which is currently really about PBS, with GI stuff. Here’s a preview I made to demonstrate and inform. If you have any questions, please ask away and I will answer!

Looks nice, Unity Free or Pro?

Very nice!

hi aieth,

that looks pretty interesting.
will it work on mac? and support deferred rendering?

lars

The system requires Unity pro. I tried to do it in Unity free but in the end had to give in and use rendertextures.

I just realisd how little I know about macs. Does mac support what Unity calls DX11? Jove GI uses compute shaders so if that runs on mac it should work fine. Its going to support deferred rendering as well. A giant voxel grid follows the player with the radiance and then its calculated at a shader level. Before release Im going add support for screenspace sampling for deferred rendering.

right now unity does not support compute shaders using open gl – only dx 11: so no macs, no linux…
that is a pitty!

Thats a downer. Compute shaders is what got the system to be so fast. Do you know if Unity has any plans for opengl compute shaders?

Interesting, but too bad that it does not work with moving objects. It would be noticeable that some objects do not use it and some on other hand do.
Do you perhaps intendt to turn it in fully dynamic supporting relatime objects too?

I guess i wasnt clear enough :slight_smile: It does work with dynamic objects. The only difference between dynamic and static objects is that dynamic objects only recieve GI, they do not contribute to it. E.g take those walls in the preview. Remove static from them and they would no longer bounce light to the floor and boxes

Oh that is excellent news. Alright now i am gona have really hard time which GI solution to pick from Asset store. Looking forward for more scenes, so we can compare which solution to pick for GI, since you mentioned its fast thats defenetly huge plus, one only minus for now is that it does not support AO like Chris GI method.

Yeah voxel cone tracing has the added benefit of acting like an SSAO algorithm. But keep in mind that with the extra performance from Jove you can run a separate SSAO effect :wink: Ill post new scenes as the GI systems nears completion. Sponza!

EDIT: Also, and I dont want to be that guy, but theres a reason why this technique and others like light propagation volumes (crysis) are in actual games and not just tech demos while voxel cone tracing is not. I mean, Epic had it implemented but gave up on it. Id love to be proven wrong as the technique is amazing, but I dont think this generation of hardware is fast enough.

Ok thats is certainly good point you made there , those cheaper solutions are actually supported by AAA engines and titles.

Looking forward to Sponza!

Me too :slight_smile: Need to finish up the GPUPU raytracing first though. Without it bake times are way too long (~4-6 hours for sponza…). Bungie managed to bake vertex AO for 1.5 million vertices in a minute. We’ll see how fast my implementation ends up but it’s pretty safe to say its gonna outclass the CPU :wink:

In the meantime, here’s a toned down version of the screenshots above with rearranged light probes giving a more realistic GI (small picture is sky gradient)

1450920--78427--$GISkyGradient.png

Hi Aith.

I’ve been reading your posts for a while an I see that you managed to make a very interesting and fast gi solution.

Some questions:

  • Does the gi run only on dx11?
  • Is it possible to eliminate the bleeding light that passes the wall as we see in your screenshots?

Thnak you. And keep up the good work!

The bleeding light is from Unitys shadows :stuck_out_tongue: That box is just 4 planes lined up. It has nothing at all to do with Jove. Yes the GI runs only on DX11. DX11 offers very flexible GPUPU (GPU programming) which is necessary to get this to run at fast frame rates. On the plus side, it makes it incredibly fast.

So are you saying that you attempted to do it in unity free but gave up ,or that its not possible in unity free.I just want to know as I want to implement this system myself and don’t want to waist my time :wink:

Basically rendertextures make everything a lot easier and performant. You basically have to choose between using structured buffers fed by a compute shader or updating a volume texture on the CPU if your on unity free. Texture.apply() kills performance so cpu volume texture is out. I tried to go the structured buffer approach but theres no such thing as shader.setglobalbuffer… basically it ended up a hassle and you also dont get hardware filtering with a buffer. Not saying it cant be done but you end up having to work around a bunch of systems that were not designed to work the way you need them to

Thanks for your reply,I’ll give it a go anyway and see if it can be done thanks again anyway;-)

Indeed. I sure hope this will get Mac support otherwise I can add it to the list of “would have been nice” and move on.

Should the author of this asset cater to Unity’s shortfall in providing a compute shader analogue here for OpenGL or should Unity be providing what i’d consider important technology themselves, sooner rather than later? I don’t know the ramifications there, what is involved, but it seems a bit remiss?