さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【Unity】Z書き込みアリのSpriteシェーダ

 UnityのSpriteシェーダはデフォルトだとZバッファに書き込みを行わない。

 そこでデフォルトシェーダを改造し、Zバッファに書き込むシェーダを作成する。その手順。

 Unityは5.5.1p3。

手順

1.デフォルトのシェーダを取得

 Unityのサイトからビルトインシェーダをダウンロードする。

 zipを解凍し、DefaultShaderExtra/Sprites-Default.shaderファイルがそれ。Unityにインポートする。

 ↓が今回のDL元。

unity3d.com

2.名前変更

 一行目、Sprites/Defaultになってるのを分かりやすい名前に修正する。

 今回はTSKT/Sprites/ZWriteにした。

3. Queue変更

 "Queue"="AlphaTest"

 説明は↓のあたり。Rendering Orderの項目。

docs.unity3d.com

4. RenderType変更

"RenderType"="TransparentCutout"

docs.unity3d.com

5. ZWrite変更

ZWrite OffとなっているのをZWrite Onにする。

6. アルファテスト追加

 fragメソッド内に↓を追加する。0.5は適当な数値に調整すれば良い。

clip(c.a - 0.5);

 これはいわゆるアルファテストで、αが一定以下のピクセルを破棄する。これがあるために、今回つくったシェーダでは半透明な領域やフチ部分は汚くなってしまう。

 まあ、やらないと透明な領域までZバッファが書き込まれてしまい、欠けてほしくない部分が欠けたりしてまずいのだ。半透明は諦めよう。

 ちなみにこんな感じで汚くなる。絶望的。

default

f:id:enuenupi:20170210181048p:plain

zWriteOn

f:id:enuenupi:20170210181123p:plain

できたコード

gist.github.com