🦁
URP環境で動作するビルトインのSpriteシェーダまとめてみた
SpriteRenderのMaterialにアタッチして使用するシェーダである
Diffuse
インスペクターで以下である
SpriteとColorを設定するシンプルなシェーダー
External Alpha(_AlphaTex)、Enable External Alpha(_EnableExternalAlpha)に関しては、
下記のソース見る限り、ETC1(アルファチャンネル使用できない)の時、
_EnableExternalAlphaが0なので、color.aは、color.aを取得する
つまり、_MainTexで黒い箇所は、透明になるということなのか?
端末があれば分かるのだが、ETC1の端末がないから確認できない。。。
fixed4 SampleSpriteTexture (float2 uv)
{
fixed4 color = tex2D (_MainTex, uv);
#if ETC1_EXTERNAL_ALPHA
fixed4 alpha = tex2D (_AlphaTex, uv);
color.a = lerp (color.a, alpha.r, _EnableExternalAlpha);
#endif
return color;
}
fixed4 SpriteFrag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
c.rgb *= c.a;
return c;
}
PixelSnapは、アトラス化した際に謎の線がはいった時に使用するものらしい
Mask
インスペクターで以下である
Diffuseシェーダーとインスペクターは同じであるが、テクスチャを設定してもテクスチャが表示されない
下記のソースコード見る限り、テクスチャからカラーを取得してきていないので当然と言えば当然である。
何のためにあるのだろうか。。。
fixed4 frag(v2f_masking IN) : SV_Target
{
fixed4 c = SampleSpriteTexture(IN.uv);
// for masks: discard pixel if alpha falls below MaskingCutoff
clip (c.a - _Cutoff);
return _Color;
}
Discussion