The issue is almost certainly the Marlin firmware you’re using. Do you know which version it is?
On all but the most recent versions of Marlin, the fan outputs were commonly used for lasers, and they’re only updated by the firmware about 10 times per second, which is not nearly fast enough to do grayscale or dithering with a laser.
To make it worse, they also tend to “ramp up” the power when turning them on, so the fans don’t pull too much current when starting to spin. You basically have to recompile the firmware with the ramping disabled and the update rate for the fan outputs set to 1khz instead of 10hz.