Your comments

The best way that is supported by all platforms is to write it into the mesh data. For instance, you can pick an unused UV channel, and on the CPU preprocess the mesh and write the indices into the UV channel, and then you can read the UV channel in the shader to get the index

I'm unable to reproduce this. It could be a broken install though, see if this helps! If not, let me know :) http://acegikmo.com/shaderforge/faq/?Q=erroronnewversion#erroronnewversion

There's no built-in way of doing it, but you could probably add a global vector property, and call it MySampler_TexelSize, and I think you'd get the proper value.

Currently not I'm afraid, as mentioned above

This is a known issue.


In case you wonder as for why it happens - if your scene view doesn't have "animate materials" checked, the shader variable _Time won't increase, which means nothing will animate, not even in Shader Forge. The way I partially solved it was to, in the shader, write _Time + _EditorTime, and in Shader Forge simply set the _EditorTime variable every frame. (_Time can't be manually set)

Now, the result of this is that if animate materials is checked (or the game is running), and SF is open, it will run at twice the speed. Ideally, the shader should only have the unity _Time variable, but then you won't be able to see things animate in SF unless it tells the user to enable "animate materials".


It might be possible to force animate materials on, or add a little prompt/notification with a button, but even then, it might mean that if the scene view is hidden, _Time still won't be set.


So yeah, there's no straightforward solution. Perhaps the best middleground would be to detect if the scene view is visible, has animate materials checked, or if the game is running, and simply stop incrementing _EditorTime in that case. Though I worry that there may be edge cases where it won't animate.



I'll have a look at this in the next update

That's not really possible in SF, because you have no control over the look of the outline. You could set up an additional mesh renderer with another shader though, that has this effect. It's usually just an inverse fresnel multiplied by a color, with an offset along the normal of the mesh. This will give you an outline-ish effect. Otherwise, this is usually done as a post-effect

Make sure you're using Unity 5.5. Unity 5.3 was supported up until SF 1.30.

For versioning info: http://acegikmo.com/shaderforge/faq/