StandardShader Smoothness Anti-aliasing issues.

Working on a VR project in 2017.1 with forward rendering, 8xmsaa and renderscale set to 1.2f. Everything is looking lovely and crisp except for materials with high smoothness values. Hopefully the attached screenshot clearly illustrates the issue.

Note that removing all maps and setting the normal map weighting to 0 produces the same result. I’ve also exhausted every combination of mipmap settings.

I’ve read various older posts about how this kind of artefact is because the normal isn’t being normalized in the standard shader or something but after enough digging I think the standard shader calls ‘NormalizePerPixelNormal’ before the metallic and specular passes which does indeed normalize it as long as the shader target >= 30.

I would also like to note that this is much more obvious/distracting within the headset itself than the image below.

Many thanks in advance to anyone who has an idea what this might be and takes the time to reply!


Other details. Linear HDR colour space, auto graphics api, graphics jobs, single pass rendering.

OK so I worked out what it was and sharing here in case anyone has a similar problem. Despite how the picture looks above, on further inspection there is actually no difference in the aliasing. It’s just that the contrast in luminance makes it look that way. Once I realised that, I wondered if the normals might not be averaging out continuously. I set my assets normals to ‘calculated’ and you can see the difference it makes below.

So the answer turned out to be the normals of the asset.

The LHS has calculated normals and although it’s quite subtle here, the difference in HMD is huge.

3 Likes

If you can make your own shaders, you’d benefit from a modified Standard shader when working in VR to account for geometric roughness:

Here’s the Shader Forge implementation:

Credit to Alex Vlachos and and Joachim Holmer.

3 Likes