2023年8月26日土曜日

Outline Shader 2

前にアウトラインシェーダについて書いたけど、今回はその続き。

ディファードレンダリングの中で枠線を描くと全体に枠線が描かれてしまう為、ある特定のキャラにだけ枠線を書くとか、色を変えるとかが出来ない。

HLSLの魔導書には、別にしたい部分だけフォワードレンダリングでやれば実現できると書いてある。

やっては見たものの、色々と問題があった。


問題1:枠線がすべて描かれない

枠線が中途半端

法線のテクスチャが無いため深度バッファしか使えない。
一応枠線が描かれるが、中途半端にしか描かれない。


問題2:手前のオブジェクトに線が描かれてしまう

奥のキャラに青枠線を書いているが手前のキャラの枠線みたい

Z Prepassで作った深度バッファを元に描画しているため、他のオブジェクトと重なるような構図だと、手前のオブジェクトにも枠線が描かれてしまう。

これはフォワードレンダリング対象のみの深度バッファにすれば解決しそうだけど、複数色対応させる場合、フォワードレンダリング対象の各オブジェクトが重なったら同じことが起こってしまう。


問題3:カメラが近いと汚くなる


カメラが対象のオブジェクトに近づくと面が塗られてしまう。

カメラとオブジェクトの距離によって、パラメータを多少調整する必要がありそう。
ディファードレンダリングで枠線描いたときには、いくら近づいても問題なかったのに。



これらの問題を解決する方法を思いつかないので、個別のアウトラインは別の方法で対応したほうが良さそう。




0 件のコメント:

コメントを投稿