Sorry, I forgot to mention a few things: you should set:
And also enable alpha cutoff by adding the following line (which discards pixels when alpha test fails), this seems to be missing in your shader above:
clip(yourTexture.a - _Cutoff);
With this combination, you should set
0 to make sure that everything is rendered at the same depth.
I have just written a shader that does all this for you (and anyone who is interested), please find it attached below.
Using this shader you can set the
Color to a transparent black color and set
Color Overlay to
1 to get the desired transparent shadow effect. Note that when
Color Overlay is less than
1, it will be visible that draw order is actually inverted for this ZTest setup.
After some testing, this shader will most likely be added to the official spine-unity packages. Then later, we could potentially add a
Reverse Draw Order parameter at
SkeletonRenderer to also draw everything in the correct order without any color overlay.
Thank you so much! I love Spine not only for it's a wonderful software, but also for such a responsible team!
After comparing you shader code with mine, I found out I've made a mistake of using
c.a = step(_CutOff, c.a);
clip(baseColor.a - _Cutoff);
which causes the alpha pixels are not really being clipped! :lol:
Now it's working perfectly after setting the _Cutoff value to almost 1! :nerd:
I still have a question about the 'Z-Spacing'. In my understanding, the 'Z-Spacing' makes the pieces of the spine to separate from each other in Z-Axis to get a correct render order.
However, when I set the 'Z-Spacing' to zero, the render order of shadow seems to get messed up:
If I set the value to -0.00001, the problem still occurs with a small probability:
The problem is gone when I set the 'Z-Spacing' to very small value like -0.001.
Is this problem occurs because I'm using a perspective main camera? I've set the camera transparency sort axis to z-axis in my project, but the problem still occurs:
I just want to get an expert reply from you! It's not a big problem for setting the 'Z-Spacing' to -0.001 does not mess up anything. 😃