Wednesday, September 30, 2009

River of Lights

Work in progress shot here. More than 8000 lights attached to particles in this hallway.Resolution is 1280x720 and the GPU still runs with 158 frames per second. The whole level has about 16k lights.


Anonymous said...

will you release this as a demo with source? perhaps as an article on an upcoming Shader X book?

DanM said...

Just wondering if you were still planning on putting your SIGGRAPH paper up. It's been a bit since you said it would be "soon." Thanks!

Anonymous said...

Please can we see a video of this in action? Or the full size screenshot?

Sander van Rossen said...

How does the framerate vary when you move closer and further away from the particles/lights?
I can imagine that the framerate would go down rather quickly when each light takes more space on the screen.
... Assuming you're using deferred lighting or something like that, which you most likely are ;)

Unknown said...

in what GPU ?

Jasper said...

Very nice! I look forward to seeing the finished version.

Brian Karis said...

Impressive. I can't wait to see it running.

castano said...

Lights but no shadows?

Pat Wilson said...

This is fantastic, I love it!

LogicalError: I suspect you are correct. It would be interesting to use an even lower-resolution light accumulation buffer for particles, and then blend that into the light buffer for the scene.

DanielW said...

A few shadowed lights > 8000 unshadowed lights

Pat Wilson said...

For sufficiently high numbers of sufficiently small lights, why are many un-shadowed lights any different from a few shadowed lights?

Brian said...

... because for lights this small the result is visually indistinguishable from just drawing a bunch of additive particles to represent the light glow.

I guess I don't see a compelling use case for this. A sufficiently large number of un-shadowed lights turns into a complex ambient term, which can almost certainly be represented in a far more compact and efficient form ... unless you're planning on somehow carefully placing those lights to approximate a larger occluded light source. But at that point ... have you gained anything over a single shadowed light?

Wolfgang Engel said...

SIGGRAPH paper: this should be released on the Bungie website at some point. I don't know how long it will take.
We are currently on the NVIDIA GPU conference showing off the demo. If you want to drop by our booth please come by.
The lowest framerate in the whole level is 158 fps. This is the worst case scene.
We tested with two GPUs. The one you see here is a GeForce 285 GTX. The lowend GPU we used is the 9600 GT because it has a similar characteristics as the 360 and PS3. On this GPU the lowest framerate in here is about 40 - 50 fps.
The scene has several lights with shadows. You just can't see them.

Usually there are a dozen lights with shadows. I will show off a video at some point.

A few shadowed lights > 8000 unshadowed lights
This is true but you are starting from the wrong assumptions. You can have a few hundred lights in a level and use a cached shadow map system. So the shadows are only attached to the lights that are visible. I wrote about it on this blog. Look for cached shadow maps.

The lighting is full-res. So the light buffer is not a quarter size.

Brian: if you can live with this and you don't see the advantage of what we do here then this is good for you.

In general we run all the physics and rendering on one GPU here. So the particle with lights bounce from walls.

So far I think we use probably 20 - 30 lights with shadows in one level. Those are not cached but running the whole time.

In case GDC accepts my proposal I want to demonstrate a system that is capable to show off 100's of uncached shadows attached to lights on the next GDC. If not you might stop by our booth and see a demo of this at GDC in March next year.

Tang said...


Victor Coda said...

Not very realistic, though. And you can do this directly in the shader with cycle on GTX 285, in one pass.

Wolfgang Engel said...

Not very realistic, though
Still programmers art, so we are working on this.

And you can do this directly in the shader with cycle on GTX 285, in one pass.
Thanks for the tip. I will keep this certainly in mind :-)