PCF filtering over dual paraboloids is non-trivial to say the least. Although the curvature of the results could yield softening with fewer block-shaped artifacts (Poisson sampling is often used to get around this), the density of the pixels changes depending on how far away from the center you are, so you would effectively be sampling close-together shadow points near the center and farther-away points near the edges.
Ultimately I was wrong about the type of filtering we wanted to do to the shadows—we did at one point want to use anti-aliasing with VSM shadows, but because of the large gap between our near and far planes there were too many artifacts.
We are sticking to PCF, which has hardware support for blending 4 shadow samples at a time but we need more than that.
Since this is a run-time sampling set we need to be able to manually sample left, right, up, and down from the center texel, so we need to sample into the cube texture manually. Otherwise we would need to calculate in spherical coordinates where the neighboring texels are which would be incredibly slow, especially since PlayStation 4 and Xbox One have intrinsics to calculate where to sample on cube textures. Sampling a cube texture natively outputs these same intrinsics once for each sample, whereas by manually using the intrinsics we can reuse their results and create the absolute minimal code for the multiple samples we need.
Simply drawing the cube texture’s faces to a single 2D texture would not help reduce this complexity, but it helps us shift towards texture atlases for shadows which will in the end allow us to apply all the shadows in our scene in one pass.
L. Spiro