うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】RenderType が Opaque の シェーダに アルファ 0を適応する

Opaque のシェーダ に対して アルファを入れても無視されてしまう

f:id:hacchi_man:20200513231806p:plain:w300

            fixed4 frag (v2f i) : SV_Target
            {
                if (i.uv.x < 0.2 || i.uv.x > 0.8 || i.uv.y < 0.2 || i.uv.y > 0.8)
                {
                    return fixed4(0, 0, 0, 1);
                }
                return fixed4(1, 1, 1, 0);
            }


clip を利用することでその問題を解決できます

clip関数 は 引数に 0未満の値を渡すことで描画をスキップしてくれます

そのため先程の処理にclipを追加すると、このように真中をくり抜いてくれます

f:id:hacchi_man:20200513231904p:plain:w300

            fixed4 frag (v2f i) : SV_Target
            {
                if (i.uv.x < 0.2 || i.uv.x > 0.8 || i.uv.y < 0.2 || i.uv.y > 0.8)
                {
                    return fixed4(0, 0, 0, 1);
                }
                clip(-0.1);
                return fixed4(1, 1, 1, 0);
            }