It’s extremely noticeable in shadows, I added a post process to show AO in light so you can see it better.
Quality is at 100 and it still looks like this.
If possible, I’d edit the engine C++ to remove all dithering from rendering, it’s so ugly
I edited PostProcessAmbientOcclusion.usf and changed the first few lines. These are the new lines:
// ambient occlusion
// AO_SAMPLE_QUALITY = 0 : no AO sampling, only upsampling
// AO_SAMPLE_QUALITY = 1 : no dither/per pixel randomization
// AO_SAMPLE_QUALITY = 2 : efficient high frequency 4x4 pattern without jitter for TemporalAA
// AO_SAMPLE_QUALITY = 3 : efficient high frequency 4x4 pattern with jitter for TemporalAA
// SHADER_QUALITY 0-4
#if SHADER_QUALITY == 0
// very low
#define USE_SAMPLESET 3
#define SAMPLE_STEPS 3
#define QUAD_MESSAGE_PASSING_BLUR 2
#elif SHADER_QUALITY == 1
// low
#define USE_SAMPLESET 3
#define SAMPLE_STEPS 3
#define QUAD_MESSAGE_PASSING_BLUR 2
#elif SHADER_QUALITY == 2
// medium
#define USE_SAMPLESET 3
#define SAMPLE_STEPS 3
#define QUAD_MESSAGE_PASSING_BLUR 2
#elif SHADER_QUALITY == 3
// high
#define USE_SAMPLESET 3
#define SAMPLE_STEPS 3
#define QUAD_MESSAGE_PASSING_BLUR 2
#else // SHADER_QUALITY == 4
// very high
#define USE_SAMPLESET 3
#define SAMPLE_STEPS 3
#define QUAD_MESSAGE_PASSING_BLUR 2
#endif
#if QUAD_MESSAGE_PASSING_BLUR == 0
#define QUAD_MESSAGE_PASSING_NORMAL 0
#define QUAD_MESSAGE_PASSING_DEPTH 0
#elif QUAD_MESSAGE_PASSING_BLUR == 1
#define QUAD_MESSAGE_PASSING_NORMAL 0
#define QUAD_MESSAGE_PASSING_DEPTH 0
#elif QUAD_MESSAGE_PASSING_BLUR == 2
#define QUAD_MESSAGE_PASSING_NORMAL 1
#define QUAD_MESSAGE_PASSING_DEPTH 0
#elif QUAD_MESSAGE_PASSING_BLUR == 3
#define QUAD_MESSAGE_PASSING_NORMAL 1
#define QUAD_MESSAGE_PASSING_DEPTH 1
#endif