Hi everyone!
How to disable highlight specular (standard shader) in deferred?
I want to use real time spots with shadows, but without specular highlight from lights.
Use the “Standard (Specular setup)” shader and set the specular color to black, smoothness to 0.0.
You didn’t understand me.

So, you want the indirect specular from the environment, but not the specular from lights you place? You’ll have to override the Internal-DeferredShader.shader with a custom one that skips the direct specular calculations. If you only want to disable the highlight on specific lights there’s no real way to do that and still use the built in lighting systems, at least that I know of. I think I tried to tie something to the light color’s alpha, but found that value wasn’t being sent to the shaders.
Yes! Right.
I tried to remake the shader Internal-DeferredShader.shader, but could not find where it is turned off.
If you’re trying to do this in 5.3 or earlier, you’ll have to dig deep into the standard .cginc files and include a modified copy of that along side your copy of the deferred shading shader. For 5.4 and later you’re in luck in that all you should need is to add one line after the #pragma multi_compile lines:
#define _SPECULARHIGHLIGHTS_OFF 1
That should end up disabling the specular highlights in the same way that the Standard shader allows you to under the “Forward Rendering Options”.
Does this still work in Unity 2017 and beyond? I’m pretty sure in Unity 5.x this worked when added to my deferred shaders, but it’s totally ineffective on the Unity 2017 final release.
You would need to add that #define to a modified Internal-DeferredShading.shader and override the built in one with your modified file. I believe it’ll still work. But again, this hack is an all or nothing approach that removes highlights for all lights.