Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

Tile-based deferred shading

Sign in to follow this  


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):

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


Got the frame time of the exact same scene down to 7,4ms
Sign in to follow this  


Recommended Comments

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

Share this comment

Link to comment

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.

Share this comment

Link to comment

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?



Share this comment

Link to comment

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.

Share this comment

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!