Z軸があるUnityシーンに配置した場合Zソートしか効かないのか知りたい

<ご注意>
この方法はSS5Player for Unityでは可能ですが、SS6Player for Unity以降では使用できません。
SS6Player for Unity以降では、Zバッファに書き込まなくてもカメラからの深度での順序を守って描画されます。
Zバッファに書き込む必要がある場合、一度アニメーションをRenderTextureにレンダリングしてから、(UnityのSpriteやPlaneを使用して)描画することを推奨します。

Zバッファを有効にし、書き込むことをできるようにするには、以下の手順でシェーダの「ZWRITE」を「On」に切り替える必要がございます。

  1. 「Sprite_SpriteStudio_Mix.shader」の「ZWRITE」を「On」に書き換えます。
    「プロジェクト名/unity/manual/Assets/SpriteStudio/Shader」の中に格納されています。
    ※他のシェーダ(特に「Sprite_SpriteStudio_Add.shader」)のZWRITEは書き換えないでください。
  2.  Unity上で、「View」の「RenderSetting」、「Render-Queue Base」を「Geometry」に変更してください。
    または、シェーダ内の「Queue」タグを「Geometry」に書き換えることでも、切り替えが可能です。

Zバッファを有効にする際の注意点

Zバッファを有効にする際に、以下の制限が課せられます。
これらの制限があっても問題ない場合のみ、有効に切り替えるようお願いいたします。

  • 使用できるターゲット合成効果が「通常」「加算」のみになります。乗算・減算など、確実に後ろが描画Z軸順で変色する合成は使用できません。
  • 不透明アトリビュートは常に1.0(100%)でなくてはなりません。
  • パーツのテクスチャに半透明ピクセルを使用できません。
    Zバッファの照合結果がおかしくなるためです。

また、こちらの方法を利用した際は、一度「画面全部」をDot by Dotでテクスチャレンダリングしてから、それらをバックバッファに書き込みを行ってください。

バックバッファサイズに合わせたプリミティブの大きさの問題から、テクセルと描画ピクセルとの1:1の関係が守れなくなった結果、拡大・縮小され、半透明描画ピクセルがスプライトパーツのエッジ部に(GPU計算上で)出てしまうためです。

補足説明

「通常=ミックス」(半透明ピクセルない場合に限る)と「加算」のみが使用可能な理由

これはZバッファを「比較している(「通常」時は書き込みも必要ですが)」限りにおいては、描画順に関係なく、「どの順序で重ねても、ピクセル色の合成結果が同じ」になるためです。

一方「減算」「乗算」は、「常に下に描画されているピクセル色との合成」が前提であり、「一度合成してしまうと(普通の方法では)合成済みの2ピクセルの間に、別ピクセルの合成を割り込ませることはできない」ために、使用できなくなります。

3D描画物と同時に描画する場合

3D 描画物が「加算」以外の演算方法で半透明合成を使っている場合、期待される動作にならない可能性があります。

これはメッシュの中のプリミティブの定義順=プリミティブの描画順で合成順序が変わり、最終的なピクセル合成結果が変わるためです。

関連ページ

SS6Player For Unity

SS6Player For Unityについての詳細はこちらもご覧ください。

SS5Player For Unity

SS5Player For Unityについての詳細はこちらもご覧ください。