MRが楽しい

MRやVRについて学習したことを書き残す

HoloLensでユニティちゃんトゥーンシェーダーを使って輪郭線の表現を行う

本日は HoloLens の小ネタ枠です。
HoloLensでユニティちゃんトゥーンシェーダーを使って輪郭線(アウトライン)の表現を試してみます。
f:id:bluebirdofoz:20210927232254j:plain

MRTKのMeshOutlineによるアウトラインの表現

以下の記事で MRTK の MeshOutline を使ったアウトライン表現を試してみました。
しかし、こちらの方法では SkinnedMeshRenderer を持つゲームオブジェクトでは利用できませんでした。
bluebirdofoz.hatenablog.com

そこで今回はユニティちゃんトゥーンシェーダーを使って HoloLens でアウトラインの表現を試してみました。

HoloLensでユニティちゃんトゥーンシェーダーを使う際の注意点

ユニティちゃんトゥーンシェーダーはシングルパスインスタンシングレンダリング対応していません。
このため、デフォルトの設定で利用するとマテリアルを設定したオブジェクトが左目にのみ描画される問題が発生します。

ユニティちゃんトゥーンシェーダーをシングルパスインスタンシングレンダリングに対応させる手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

ユニティちゃんトゥーンシェーダーのアウトラインの方式

ユニティちゃんトゥーンシェーダーのアウトラインはオブジェクトを反転拡大する方式で実現されています。
ポストプロセスエフェクトを利用する方式に比べると軽量ですが、それでもトゥーンシェーダ自体が負荷が高いため、HoloLens で利用する際は FPS の低下が問題になります。

ユニティちゃんトゥーンシェーダーのアウトラインの設定方法

マテリアルを Inspector ビューで開きます。
アウトラインの設定は[Outline Settings]の欄から設定可能です。
f:id:bluebirdofoz:20210927232344j:plain

以下の設定項目があります。

Outline Mode

アウトラインの生成方法を指定します。
[Normal Direction(法線反転)]と[Position Scalling(ポジションスケーリング)]の2つの方式が選択できます。

複雑な形状のものはデフォルトの[Normal Direction(法線反転)]を利用して問題ありません。
ただし、Cube オブジェクトのようなエッジの鋭い立体物は[Normal Direction(法線反転)]の方式だとアウトラインに不連続性が発生しやすくなります。

Outline Width

アウトラインの幅を指定します。

Outline Color

アウトラインのカラーを指定します。

Blend Base Color to Outline

ベースカラーをアウトラインのカラーに混ぜて、アウトラインの色を馴染ませます。

Outline Smpler

アウトラインの幅を位置ごとに変化させます。
UVマップに対応した白(最大幅)~黒(最小幅)のテクスチャで指定します。

Offset Outline with Camera Z-axis

カメラの奥行方向の重なり距離に応じてアウトラインの描画有無を調整します。
尻尾のマテリアルで本項目を調整してみた例が以下になります。
・値:0
f:id:bluebirdofoz:20210927232358j:plain

・値:10
f:id:bluebirdofoz:20210927232409j:plain

動作確認

これで HoloLens 上でユニティちゃんトゥーンシェーダーを使ったアウトラインの表現ができました。
f:id:bluebirdofoz:20210927232419j:plain

ただし前述の通り、HoloLens 上ではシェーダの描画負荷が高すぎるため、特別な理由がなければ MRTK の MeshOutline を使うことをお奨めします。