Quote:The pixel shader of the g-buffer generation step should not be that complicated to make it worth to process the geometry twice.For some materials it does get complicated though -- e.g. parallax mapping must be performed in the g-buffer-creation shader (not the lighting shader).
If you had complex parallax mapping on your entire scene, then adding a Z-pre-pass might actually be a useful optimisation.
Quote:Having access to the z-buffer and normal buffer unlocks the usage of plenty of techniques like depth of field, screen space-ambient occlusion or screen-space subsurface scattering.Depending on the API, it's easy to access the z-buffer for use in post-processing, so you're only missing out on the normal buffer ;)
There's also other 'deferred-style' renderers to take into account, like LPP or inferred, which also require a second geometry pass (like the forward-ZPP renderer), but offer other advantages like easier support for MSAA, a greater separation of shader responsibilities (lighting and material are further removed) and support for transparencies (without forward passes).