ARアプリ オブジェクトのアウトライン2作目

AR

こちらにも記したように、アップデートに伴い今まで使用していたアウトラインが使えなくなってしまったので別の方法を模索しようと思います



模索

調べてみると、アウトライン用のシェーダーを作成→マテリアルを対象オブジェクトにアタッチというものが多く見受けられました

今作ではオブジェクトのマテリアルはオブジェクトの色変更時にすべてドロップダウンの要素に取り込みます

従って、アウトライン用のマテリアルまで読み込まれてしまうと困るのでこの方式は使えません

理想はレンダーフィーチャーからレイヤー管理でアウトラインを与える方式になります

よさそうなのを発見したので試してみることに

動画を見ながらシェーダーグラフを作成し、このような感じになりました

これをレンダーフィーチャーにセットし、レイヤーをアウトライン用にセットします

実行してみると、良い感じにアウトラインが描かれるのですが、なぜか隣接オフジェクトにもアウトラインが付与されてしまいました

カメラの方のレイヤー設定等を色々変えてみたところ、アウトラインを単体表示する事には成功したものの、今度はフレームレートが30まで落ちてしまい、アプリとして成り立たなくなってしまいました

原因を調べたところ、おそらく半透明描画による負荷であろうという結論になり、やむおえずこの方法は断念することにしました

他の方法を色々試してみましたが、唯一成功した物を以下に記します

このようにシェーダーグラフを組み

使用しているURPアセットデータのInspectorウインドウからレンダーフィーチャーのRender Objectsを追加し

作成したシェーダーグラフ入りのマテリアルをセット、レイヤーをOutlineに変更

フレームレートを落とすことなく単体にアウトラインが表示されました!

しかし、隣のオブジェクトを選択すると・・・

何故かアウトラインが付かない部分があります・・・

もふもふ
もふもふ

こまったもふ(; ・`д・´)

どうやら原因はFilters→Queue→Opaqueにあるようです

描画対称を透明か不透明かで分けているようです

これを解消するために、同じレンダーフィーチャーを追加し、設定を透明にしてみると・・・

全体を表示してくれました!!

フレームレートの低下も見られないのでこのまま採用することにします。



まとめ

マテリアルをオブジェクトに付与することなくオーバーライドで選択対象単体のみアウトラインを表示する方法

相応のシェーダーを作成→レンダーフィーチャーを設定→オブジェクトに半透明部分があればレンダーフィーチャーを2つ用意し、透明部分、不透明部分に分ける

タイトルとURLをコピーしました