【Unity】Z書き込みアリのSpriteシェーダ
UnityのSpriteシェーダはデフォルトだとZバッファに書き込みを行わない。
そこでデフォルトシェーダを改造し、Zバッファに書き込むシェーダを作成する。その手順。
Unityは5.5.1p3。
手順
1.デフォルトのシェーダを取得
Unityのサイトからビルトインシェーダをダウンロードする。
zipを解凍し、DefaultShaderExtra/Sprites-Default.shaderファイルがそれ。Unityにインポートする。
↓が今回のDL元。
2.名前変更
一行目、Sprites/Default
になってるのを分かりやすい名前に修正する。
今回はTSKT/Sprites/ZWrite
にした。
3. Queue変更
"Queue"="AlphaTest"
説明は↓のあたり。Rendering Orderの項目。
4. RenderType変更
"RenderType"="TransparentCutout"
5. ZWrite変更
ZWrite Off
となっているのをZWrite On
にする。
6. アルファテスト追加
frag
メソッド内に↓を追加する。0.5は適当な数値に調整すれば良い。
clip(c.a - 0.5);
これはいわゆるアルファテストで、αが一定以下のピクセルを破棄する。これがあるために、今回つくったシェーダでは半透明な領域やフチ部分は汚くなってしまう。
まあ、やらないと透明な領域までZバッファが書き込まれてしまい、欠けてほしくない部分が欠けたりしてまずいのだ。半透明は諦めよう。
ちなみにこんな感じで汚くなる。絶望的。
default
zWriteOn