The outline pass will default to be a forward pass. If you’re using a deferred rendering path and a shader has a deferred pass (which the surface shader is generating in this case) all forward passes will be ignored. You’d have to write an outline pass that works with deferred.
Also be weary that disabling the ZWrite for a deferred pass can have some weird artifacts.
The alternative is to use two separate materials, one that renders the object using deferred and one that renders the outline as a separate forward pass. But in that scenario the outline will always be rendered after the deferred pass so disabling the ZWrite will not result in it being a silhouette only outline like it would when rendering using the forward rendering path.
Thanks for your impatient answer very much:smile: My knowledge about renderer or shader within Unity is kinda scrappy and incoherent. I want to get a solid knowledge about them. Is there some good book or systematic articles for learning?