本日はShader学習枠およびHoloLensのアプリ表現枠です。
MixedRealityGraphicsTools(MRGT)で提供されているMRGTStandardShaderでは、様々な機能が提供されていますが、そのうちの一つにステンシルと呼ばれる機能があります。
今回はステンシルを使用して宝探しアプリを作成します。
○ステンシルとは?
ステンシル(Stencil)は『切り抜き』を意味する言葉です。
シェーダーはピクセルごとに色を塗りつぶすプログラムですが、塗りつぶす際にステンシルバッファという値を持つことができます。
シェーダーは一般的に後ろにあるオブジェクトから描画され、上塗りされていきますが、ステンシルバッファの値を使用することであるピクセルの前にすでに描画されているステンシルバッファと比較し、場合によっては新しく塗りつぶすピクセルを破棄する(塗らない)という機能がステンシルになります。
前回の記事ではMRGTStandardShaderで提供されるステンシルの機能を開設しながら実装しました。
○実機での表現
今回は宝探しアプリなので手で持って動かすための虫眼鏡をモデリングしました。
この虫眼鏡はレンズ部の間に一枚メッシュを挟んでおり、レンズとステンシルのマテリアルをアタッチできるようにしました。
レンズ部分はReflectionsの機能を使用してより反射が目立つようにしています。
現状スカイボックスが映りこんでしまっている点が課題ですが、かなり実際のレンズに近い見た目になります。
レンズ部の内部のメッシュはステンシルを使用しています。
レンダリングされるキューブにもステンシルを使用することでレンズ越しに見れるようになります。
Unity上での見た目は次のようになります。
以上で実装が完了しました。
実機で見るとレンズ越しにオブジェクトが見れるようになります。現状SkyBoxなどが白く描画されてしまう問題があるので、このあたりは今後の改善点になりますが、宝探しアプリができました。