夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensで床や壁に穴をあける。 その② 壁の中のみに存在するオブジェクトを作る HoloLensアドベントカレンダー2022年 6日目

本日は昨日に引き続きHoloLensで床や壁に穴をあけていきます。

〇HoloLens 2022年アドベントカレンダー

 HoloLens 2022年アドベントカレンダーはQiita上で私の師であるがち本さんが開催している企画です。

 クリスマスまで毎日記事を埋めていくことが目的で本日は6日目の記事になります。

qiita.com

前回はSpatialMeshのシェーダーをMixedRealityGraphicsTools(MRGT)で提供されているシェーダーに置き換えていきました。

redhologerbera.hatenablog.com

今回はSpatialMeshのマテリアルからステンシルの機能を使用してきます。

〇壁の中のみに存在するオブジェクトを作る

床や壁に穴をあける前に前回GraphicsToolsStandardShader(以下MRGTシェーダー)で模倣したSpatialMeshのマテリアルのテストを行います。

前回作成したSpatialMeshのマテリアルのパラメータからEnable Stencil Testingを有効化してステンシルの機能を使用してきます。

 また今回テストcube(豆腐)にもステンシルを有効にしたMRGTシェーダーを使用しています。

〇SpatialMeshのマテリアル

今回実装している中でZWrite(深度バッファへの書き込み)ステンシルの併用ができないことがわかり筆者自身の理解が浅い部分があったためZWriteをオフにしています。

ステンシルの設定は次の通りです。

・StencilReference =1 (ステンシルバッファの値です)

・Stencil Comparison = Always (ステンシルを常に比較します。)

・Srencil Operation = Replace (比較したステンシル値でピクセル色を置換します。)

〇描画される壁の中のオブジェクトのマテリアル

・Stencil Reference = 1 (SpatialMeshのマテリアルと同値にしています。)

・Stencil Comparison = LessEqual (ステンシル値が1>=の場合比較されます。)

・Stencil Operation = Keep (比較したステンシル値でピクセルを維持します。)

これによって壁のオブジェクトを通して豆腐を見た場合に比較、置換され豆腐が描画されるようになります。

〇実機で確認

壁の中のみに存在する豆腐を確認できました。(今回は実機とUntiyをHoloGraphicsRemotingで接続して確認しています。)

〇問題点

今回SpatialMeshに穴をあける一環としてステンシルを使用して壁の中のオブジェクトのみを表示することができましたが、問題点としてZWriteをオフにすることで深度判定ができなくなり本来のSpatialMeshとしてのOcclusionが機能しなくなりました。

うーん失敗ですね。

次回改善策を考えていきます。