Deferred Rendering with Unity3D?
Awareon has specific lighting needs as a stealth game. Our migration to the Unity engine solves some problems, but presents a few more.
Deferred Rendering versus Forward Rendering is the big question.
I’d be happy to hear from any shader experts out there. I’m trying to get a grasp on the tradeoffs. I’m going to be running tests all week, but since I’m not well-versed in shaders, it’s going to be time-consuming. Here’s what I’ve sorted out so far, pros and cons:
- Turning lights on / off is super simple. That’s a big plus for our gameplay.
- Shadows are nicely dramatic.
- It’s not as pretty for lighting. Even with the dual-lightmap fallback, the real-time lighting creates noticeable gradient stepping.
- MSAA doesn’t work for deferred rendering, but I can implement FXAA instead.
- Do light probes work correctly in deferred? How about with dynamic light sources?
- Translucency does not work in shaders? This is the part where I have no idea yet what the repercussions will be. How badly will this affect particle systems? Or skin shaders? Or a force-field effect / shader?
- Beast lightmaps are gorgeous.
- Any real-time shadows must follow a directional light? So far in my tests that makes any dynamic objects indoors look rather poor, but I haven’t tried it with light probes yet.
- Light probes would be very useful to gather light information for stealth.
- For turning lights on / off, swapping lightmaps seems exceedingly complex and inefficient from what I’ve checked into so far. That’s been discouraging.
- A solution for turning lights on / off would be to pair a dynamic light with a static one, by having the static light contain the defined shadows as a much dimmer source. This works well in my tests so far, but brings in the same gradient stepping artifacts as the deferred rendering solution.
I’m also looking into the feasibility of turning deferred rendering on / off depending upon the scene, for instance in an area that has a body of water.