Open SpriteStudio opened 9 years ago
シェーダの「ZWRITE」を「On」にすればZバッファに書き込むことができるようになります。
1.「Sprite_SpriteStudio_Mix.shader」の「ZWRITE」を「On」に書き換える(他のシェーダ……特に「Sprite_SpriteStudio_Add.shader」のZWRITEは書き換えてはいけません)
上記の方法は「一度「画面全部」をDot by Dotでテクスチャレンダリングしてから、それらをバックバッファに書き込む」ことをしない限り、 「どうしても、バックバッファサイズに合わせたプリミティブの大きさの問題から、テクセルと描画ピクセルとの1:1の関係が守れなくなった結果、拡大・縮小され、半透明描画ピクセルがスプライトパーツのエッジ部に(GPU計算上で)出る」 ことになる点に留意してください。
これはZバッファを「比較している(「通常」時は書き込みも必要ですが)」限りにおいては、描画順に関係なく、「どの順序で重ねても、ピクセル色の合成結果が同じ」になるためです。 一方「減算」「乗算」は、「常に下に描画されているピクセル色との合成」が前提であり、「一度合成してしまうと(普通の方法では)合成済みの2ピクセルの間に、別ピクセルの合成を割り込ませることはできない」ために、使用できなくなります。
3D 描画物が「加算」以外の演算方法で半透明合成を使っている場合、期待される動作にならない可能性があります。 これはメッシュの中のプリミティブの定義順=プリミティブの描画順で合成順序が変わり、最終的なピクセル合成結果が変わるためです。
シェーダの「ZWRITE」を「On」にすればZバッファに書き込むことができるようになります。
ただし、下記の制限があります。
上記の原則的制限の下に、以下の手順で有効にできます。
1.「Sprite_SpriteStudio_Mix.shader」の「ZWRITE」を「On」に書き換える(他のシェーダ……特に「Sprite_SpriteStudio_Add.shader」のZWRITEは書き換えてはいけません)
ご注意
上記の方法は「一度「画面全部」をDot by Dotでテクスチャレンダリングしてから、それらをバックバッファに書き込む」ことをしない限り、 「どうしても、バックバッファサイズに合わせたプリミティブの大きさの問題から、テクセルと描画ピクセルとの1:1の関係が守れなくなった結果、拡大・縮小され、半透明描画ピクセルがスプライトパーツのエッジ部に(GPU計算上で)出る」 ことになる点に留意してください。
補足
"通常=ミックス"(半透明ピクセルない場合に限る)と"加算"のみが使用可能な理由
これはZバッファを「比較している(「通常」時は書き込みも必要ですが)」限りにおいては、描画順に関係なく、「どの順序で重ねても、ピクセル色の合成結果が同じ」になるためです。 一方「減算」「乗算」は、「常に下に描画されているピクセル色との合成」が前提であり、「一度合成してしまうと(普通の方法では)合成済みの2ピクセルの間に、別ピクセルの合成を割り込ませることはできない」ために、使用できなくなります。
3D描画物と同時に描画する場合
3D 描画物が「加算」以外の演算方法で半透明合成を使っている場合、期待される動作にならない可能性があります。 これはメッシュの中のプリミティブの定義順=プリミティブの描画順で合成順序が変わり、最終的なピクセル合成結果が変わるためです。