本日は HoloLens の小ネタ枠です。
HoloLensでユニティちゃんトゥーンシェーダーを使って輪郭線(アウトライン)の表現を試してみます。
MRTKのMeshOutlineによるアウトラインの表現
以下の記事で MRTK の MeshOutline を使ったアウトライン表現を試してみました。
しかし、こちらの方法では SkinnedMeshRenderer を持つゲームオブジェクトでは利用できませんでした。
bluebirdofoz.hatenablog.com
そこで今回はユニティちゃんトゥーンシェーダーを使って HoloLens でアウトラインの表現を試してみました。
HoloLensでユニティちゃんトゥーンシェーダーを使う際の注意点
ユニティちゃんトゥーンシェーダーはシングルパスインスタンシングレンダリング対応していません。
このため、デフォルトの設定で利用するとマテリアルを設定したオブジェクトが左目にのみ描画される問題が発生します。
ユニティちゃんトゥーンシェーダーをシングルパスインスタンシングレンダリングに対応させる手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
ユニティちゃんトゥーンシェーダーのアウトラインの方式
ユニティちゃんトゥーンシェーダーのアウトラインはオブジェクトを反転拡大する方式で実現されています。
ポストプロセスエフェクトを利用する方式に比べると軽量ですが、それでもトゥーンシェーダ自体が負荷が高いため、HoloLens で利用する際は FPS の低下が問題になります。
ユニティちゃんトゥーンシェーダーのアウトラインの設定方法
マテリアルを Inspector ビューで開きます。
アウトラインの設定は[Outline Settings]の欄から設定可能です。
以下の設定項目があります。
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
・値:10
動作確認
これで HoloLens 上でユニティちゃんトゥーンシェーダーを使ったアウトラインの表現ができました。
ただし前述の通り、HoloLens 上ではシェーダの描画負荷が高すぎるため、特別な理由がなければ MRTK の MeshOutline を使うことをお奨めします。