夜風のMixedReality

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

MixedRealityToolKit v2 Examplesを触ってみる Standerdshader/MaterialGallery その⑤

 前回からMixedRealityToolKit v2のExamplesを触っていますが、今回はその⑤回目の記事です。

f:id:Holomoto-Sumire:20191021100255j:plain

 内容に入る前に…

 なんとMRTKTeamのCameron Mickaさんからメッセージを頂きました!全部日本語で書いていますが、見ていただいていたようです。

 第3回でChannelMapに関して理解がいまいちだったのですが、「ここ見て!」と公式ドキュメントの場所を教えていただきました。

 こちらは全文英語の記事で、ぱっと読んだだけでは「完全に理解した!」とはならなかったので、デモシーンを見た後最後にまとめとして解説していきたいと思います。

 前回4列目の左4つを見ていきましたが、今回は残り3つから見ていきます。

f:id:Holomoto-Sumire:20191024183122j:plain

 

TriplanarMapping

f:id:Holomoto-Sumire:20191027112449j:plain

 これはchecker_albedoとよばれる画像が張り付けられています。

f:id:Holomoto-Sumire:20191027112745j:plain

 Triplanar Mappingとはプログラムでメッシュをテクスチャリングする手法のことで、通常3DモデルはUV展開と呼ばれるどのメッシュ(面)に画像のどの部分を割り当てるか?をモデリング時に設定します。

 この機能はUV展開がされていないオブジェクトに使用されるようです。

bluebirdofoz.hatenablog.com

 UV展開に関しては上記のブログ記事が参考になります。

 しかしUnityで見てみてもただ単にオブジェクトにテクスチャが貼られているようにしか見えません。

 Inspectorで中身を見てみるとTriplanar Mappingの項目がありチェックが入り有効化されています。

f:id:Holomoto-Sumire:20191027115651j:plain

  Local Space、Blend Sharpnessの二つの項目があります。

 Local Spaceはここにチェックが入っている場合LocalスペースでTriplanar Mappingが計算されるようです。 ここのチェックを外すことでTriplanarMappingの効果を確認できました。 

 ここまだ謎ですがとりあえず動作を確認できました。 


MaterialGallery Triplanar Mappinr

 BlendShapnessはMappingの混ざり合いのようです。

 これは複雑な地面などに向いてそうです。

 

EdgeSmoothing


MaterialGallery EdgeSmoothing

 EdgeSmoothingオブジェクトはAnimationによってQuadのEdge(縁)が脈打つようにぼかしがかかります。

 AnimationでEdge Smoothingの値を変化させているようです。

f:id:Holomoto-Sumire:20191027125451j:plain

 これはUIなどで注目してほしいときなど効果的に使えそうです。

 「角が丸く透明度が有効な場合のエッジの平滑化」とあるのでどうやら透明度の持てるRendering Modeで第1回で扱ったRound Cornersと併用して使うことで効果的な表現ができるようです。

 

StencilTest


MaterialGallery StencilTest

 今回見ていく中で個人的に一番面白いと感じたオブジェクトです。

 動画のように枠の内部からのぞいた時のみオレンジ色のオブジェクトを見ることができます。

 これを使えばHoloLensの有名アプリであるHoleLenz Gateのような表現ができそうです。


HoloLens "HoleLenz Gate"

f:id:Holomoto-Sumire:20191027162517j:plain

 StencilTestの作りを見てみると、ShaderBallの子オブジェクトとしてPortal、Frameの二つがあります。

 詳しく見てみるとFrameはBorder Light、Round Corners、Environment Coloringが有効化されていますが特にStencilTestオブジェクトの機能にかかわりはなく、Stencilを行っているのはPortalがキーのようです。

 ではPortalのinspectorで中を見てみます。

f:id:Holomoto-Sumire:20191027163352j:plain

 Advanced Optionsの中にStencilTestにかかわる設定箇所があるようです。

nn-hokuson.hatenablog.com

 Stencilに関して詳しくは上記の記事が参考になりますが、描画の際に度の順番で行うかのようです。

 これを見るからに他の空間には[0]が割り当てられていますがPortalの部分だけ[1]が割り当てられていて同様の処理を行われたShaderBallオブジェクトというオレンジのオブジェクトのみが見えるようになる仕組みのようです。

f:id:Holomoto-Sumire:20191027165214p:plain

イメージ

 Render Queue Overrideの値が1999に設定されていています。

Render QueueはRenderingの順序(=描画の順序)を設定しているようでRender Queue Overrideはその名の通りRender Queueを上書きしているようです。

 ShaderBallの値(2000)よりPortalは先に描画される設定のため、Portalを通して出ないとShaderBallは描画されることはなく、このような表現が可能になるようです。

 この辺りはすべて見終わった後の応用で実際に作りながら理解を深めてみたいと思います。

 

 今回は4列目の後半を見ていきました。

次回は最後の5列目を見ていきたいと思います。 といっても5列目も一見するだけで個性的なオブジェクトが並んでいるため前半、後半に分けてみていきたいと思います。