SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity
http://www.webtech.co.jp/spritestudio/
MIT License
39 stars 15 forks source link

全般 Zバッファを有効にするにはどうすればよいですか? #78

Open SpriteStudio opened 9 years ago

SpriteStudio commented 9 years ago

シェーダの「ZWRITE」を「On」にすればZバッファに書き込むことができるようになります。

ただし、下記の制限があります。

1.「Sprite_SpriteStudio_Mix.shader」の「ZWRITE」を「On」に書き換える(他のシェーダ……特に「Sprite_SpriteStudio_Add.shader」のZWRITEは書き換えてはいけません)

  1. ViewのRenderSetting内の「Render-Queue Base」か、シェーダ内の”Queue”タグを「Geometry」に書き換える

    ご注意

上記の方法は「一度「画面全部」をDot by Dotでテクスチャレンダリングしてから、それらをバックバッファに書き込む」ことをしない限り、 「どうしても、バックバッファサイズに合わせたプリミティブの大きさの問題から、テクセルと描画ピクセルとの1:1の関係が守れなくなった結果、拡大・縮小され、半透明描画ピクセルがスプライトパーツのエッジ部に(GPU計算上で)出る」 ことになる点に留意してください。

補足

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

これはZバッファを「比較している(「通常」時は書き込みも必要ですが)」限りにおいては、描画順に関係なく、「どの順序で重ねても、ピクセル色の合成結果が同じ」になるためです。 一方「減算」「乗算」は、「常に下に描画されているピクセル色との合成」が前提であり、「一度合成してしまうと(普通の方法では)合成済みの2ピクセルの間に、別ピクセルの合成を割り込ませることはできない」ために、使用できなくなります。

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

3D 描画物が「加算」以外の演算方法で半透明合成を使っている場合、期待される動作にならない可能性があります。 これはメッシュの中のプリミティブの定義順=プリミティブの描画順で合成順序が変わり、最終的なピクセル合成結果が変わるためです。