Yes, you need to use a special shader for this.
Try this: https://gist.github.com/pharan/81d4fad36d7d712fe134a872b803a83a
Use this code to replace materials on your SkeletonAnimation:
skeletonAnimation.CustomMaterialOverride[originalMaterial] = replacementMaterial; // Use this to replace the material.
//...
skeletonAnimation.CustomMaterialOverride.Remove(originalMaterial); // Use this to restore the original material.
//...
skeletonAnimation.CustomMaterialOverride.Clear(); // Alternate way to restore all original materials.
If you want the whole screen to turn grayscale, that would have nothing to do with Spine. You need an Image Effect (with a shader) that you can add to the Unity camera to make it render grayscale.