One of the problems with classic deferred rendering is that to support the built-in hardware anti-aliasing, we must implement some extra shader code to correctly sample from the MSAA G-Buffer. More recent improvements in Direct3D have made this problem easy to solve by using the
SV_Coverage pixel shader system-value semantics to run the shader for each sample and to determine which samples are covered by the current fragment.
It is necessary that all render targets are created with multisampling enabled. This includes the render targets of the G-Buffer, the depth buffer, and also the light accumulation buffer of the light renderer. Our implementations of the
LightRenderer classes already support multisampling provided we pass in the correct sample description to the
GBuffer constructor, for example,
new SampleDescription(4, 0).
ScreenAlignedQuadRenderer must be modified to use the multisampling...