Tile-based deferred shading

Published June 25, 2013
Advertisement
I've been absent from this site for a while now, mainly for academic reasons (tons of deadlines, you know the drill).

I have dedicated some small amounts of spare time on my personal projects as well though, and last night I was finally able to complete something which was on my to-do list for quite a while: Tile-based deferred shading

Here's a result image (click to enlarge):
render-250613.png

This is a small scene with 1024 quite densely packed active dynamic pointlights using a physically based BRDF with support for a wide range of materials (including pretty accurate rendering of metals).
This frame was rendered in 9,34 ms (107,7 frames/sec) at a resolution of 1280x720 on a mid-range DX11 graphics card with all engine systems enabled and actually doing work (eg. audio, physics, etc.). This was rendered without applying any form of culling on the lights beside the tile-based culling in the compute shader.

Note: Point light intensities and cutoff distances are generated randomly, hence the sharp edges for some lights.

The implementation supports both point and spot lights. Directional lights are rendered in a separate pass.

It still needs some work when it comes to optimization, but I'm already pretty damn satisfied with the results smile.png

EDIT:

Got the frame time of the exact same scene down to 7,4ms
Previous Entry We are live!
Next Entry Decals, finally!
5 likes 6 comments

Comments

riuthamus

This looks amazing. Would you be willing to share how you did some of this?

June 25, 2013 09:23 PM
Radikalizm

Sure thing :)

My implementation was pretty much based on a presentation by Johan Andersson at DICE about DX11 rendering.

The slides can be found here: http://dice.se/publications/directx-11-rendering-in-battlefield-3/

It gives a pretty nice overview of the entire process, assuming you're familiar with compute shaders and DX11's shading pipeline in general.

I'm sure there'll be code samples around as well online if you look around for a while.

June 25, 2013 09:30 PM
riuthamus

We are well aware, just was curious as to how different this method is to the differed rendering for lighting. We have a nasty issue of trying to get differed rendering to play with forward rendering... as some of our elements do not work with differed rendering.

I saw some of the other stuff you are doing with your engine and it looks appealing. Anyway thanks again and hope all is well with your project

EDIT: Do you know how this system handles shadows? Our issue with our point light system now is it bleeds through the blocks. We added dynamic shadows but that rapes through the FPS... fairly quickly when you add in 10 lights or more. Thoughts on this?

RuinValor_2013-03-30_22-00-27-57.png

June 25, 2013 09:37 PM
Radikalizm

I still have to figure out how I want to do shadows with this system, as the idea of creating a special case in my compute shader for doing shadows for a variable amount of shadowing lights doesn't really sound appealing.

I'll probably just start by rendering shadowing lights on top of the tiled lighting results with regular deferred shading.

Normally seeing I'll try to always limit my shadowing lights to the absolute minimum required to make a scene look good. If the contribution of a certain shadowing light is not significant enough (what you specify as significant is up to yourself of course) I just turn off shadow mapping for that light.

To be honest with you, I don't even have any test scenario's right now where I have 10 simultaneous shadow map generating lights.

Then again you could try to play around with your shadow map resolution and maybe some more efficient culling strategies while generating your shadow maps.

As for requiring forward rendering, I assume you're talking about rendering transparent materials? Most engines don't really seem to care all that much about lighting complexity when it comes to rendering transparent objects, so they just render them on top of the lit scene with maybe a few lights enabled.

June 25, 2013 09:54 PM
Krohm

There's a Forward++ vs deferring rendering comparison from last GDC. Personally I've never been completely sold on deferred but whatever the DICE presentation is linked, I think this data should have to go too.

June 27, 2013 06:15 AM
riuthamus

That is amazing thank you very much!

June 27, 2013 06:22 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement