#はじめに
前編では、SobelFilterを用いたエッジ検出を行い、特定のオブジェクトに対してOutlineを描画しました。
-> https://qiita.com/kanurapoison/items/1b36fdaa0a33f0d278d5
今回は、少し手を加えて見栄えを良くしていきます。
#Outline色変更
まずはOutlineの色を変えてみましょう。これは本当に簡単で、マテリアル内に少し修正を加えます。SobelFilterの結果に応じて、赤色に描画されるようにLerpをかけています。また、MF_GetSobelValueに対する入力としてSobelWidth=3に設定することで、Outlineを太くしています。
#壁越しの場合
次は、この描画結果をもう少し詳しく見ていきましょう。ゲームなどで多く目にする場面が”壁の向こう側にObjectが存在する”状態です。
先ほどの2Objectを壁越しに見てみると以下のようになります。壁越しでもOutlineがしっかりと描画されていることが分かります。
しかし、ゲームによっては壁越しには描画してほしくない場合もあります。その時は、もう少し修正を加えます。そのためにSceneDepthとCustomDepthの比較”を行います。壁の向こうにオブジェクトが存在する場合は、”SceneDepth < CustomDepth”となるので、そのピクセルは描画しないようにします。以下が修正を加えたマテリアルと描画結果です。以下の場合は、”SceneDepth = CustomDepth”のピクセルだけ描画するように実装しています。
描画結果
手前に壁がある部分はOutlineが描画されていないことが分かりますね!
#おまけ
また、CustomStencilValueを用いることで、下図のように、特定のオブジェクトに対してのみ壁越しの描画のon/offを切り替えることも可能です。
他にも、OverWatchでインフラサイト使用時風にもできます。(同ゲームでは、もっと複雑な処理をしていると思いますが...)