前回からMixedRealityToolKit v2のExamplesを触っていますが、今回はその⑤回目の記事です。
内容に入る前に…
なんとMRTKTeamのCameron Mickaさんからメッセージを頂きました!全部日本語で書いていますが、見ていただいていたようです。
第3回でChannelMapに関して理解がいまいちだったのですが、「ここ見て!」と公式ドキュメントの場所を教えていただきました。
I love the detailed documentation you are adding for each row of the Material Gallery! If you are curious about channel maps, or would like to create your own channel maps, you can find a bit more information here: https://t.co/y9wM9JRt2z #MRTK
— Cameron Micka (@tcmicka) October 25, 2019
こちらは全文英語の記事で、ぱっと読んだだけでは「完全に理解した!」とはならなかったので、デモシーンを見た後最後にまとめとして解説していきたいと思います。
前回4列目の左4つを見ていきましたが、今回は残り3つから見ていきます。
〇TriplanarMapping
これはchecker_albedoとよばれる画像が張り付けられています。
Triplanar Mappingとはプログラムでメッシュをテクスチャリングする手法のことで、通常3DモデルはUV展開と呼ばれるどのメッシュ(面)に画像のどの部分を割り当てるか?をモデリング時に設定します。
この機能はUV展開がされていないオブジェクトに使用されるようです。
UV展開に関しては上記のブログ記事が参考になります。
しかしUnityで見てみてもただ単にオブジェクトにテクスチャが貼られているようにしか見えません。
Inspectorで中身を見てみるとTriplanar Mappingの項目がありチェックが入り有効化されています。
Local Space、Blend Sharpnessの二つの項目があります。
Local Spaceはここにチェックが入っている場合LocalスペースでTriplanar Mappingが計算されるようです。 ここのチェックを外すことでTriplanarMappingの効果を確認できました。
ここまだ謎ですがとりあえず動作を確認できました。
MaterialGallery Triplanar Mappinr
BlendShapnessはMappingの混ざり合いのようです。
これは複雑な地面などに向いてそうです。
〇EdgeSmoothing
EdgeSmoothingオブジェクトはAnimationによってQuadのEdge(縁)が脈打つようにぼかしがかかります。
AnimationでEdge Smoothingの値を変化させているようです。
これはUIなどで注目してほしいときなど効果的に使えそうです。
「角が丸く透明度が有効な場合のエッジの平滑化」とあるのでどうやら透明度の持てるRendering Modeで第1回で扱ったRound Cornersと併用して使うことで効果的な表現ができるようです。
〇StencilTest
今回見ていく中で個人的に一番面白いと感じたオブジェクトです。
動画のように枠の内部からのぞいた時のみオレンジ色のオブジェクトを見ることができます。
これを使えばHoloLensの有名アプリであるHoleLenz Gateのような表現ができそうです。
StencilTestの作りを見てみると、ShaderBallの子オブジェクトとしてPortal、Frameの二つがあります。
詳しく見てみるとFrameはBorder Light、Round Corners、Environment Coloringが有効化されていますが特にStencilTestオブジェクトの機能にかかわりはなく、Stencilを行っているのはPortalがキーのようです。
ではPortalのinspectorで中を見てみます。
Advanced Optionsの中にStencilTestにかかわる設定箇所があるようです。
Stencilに関して詳しくは上記の記事が参考になりますが、描画の際に度の順番で行うかのようです。
これを見るからに他の空間には[0]が割り当てられていますがPortalの部分だけ[1]が割り当てられていて同様の処理を行われたShaderBallオブジェクトというオレンジのオブジェクトのみが見えるようになる仕組みのようです。
Render Queue Overrideの値が1999に設定されていています。
Render QueueはRenderingの順序(=描画の順序)を設定しているようでRender Queue Overrideはその名の通りRender Queueを上書きしているようです。
ShaderBallの値(2000)よりPortalは先に描画される設定のため、Portalを通して出ないとShaderBallは描画されることはなく、このような表現が可能になるようです。
この辺りはすべて見終わった後の応用で実際に作りながら理解を深めてみたいと思います。
今回は4列目の後半を見ていきました。
次回は最後の5列目を見ていきたいと思います。 といっても5列目も一見するだけで個性的なオブジェクトが並んでいるため前半、後半に分けてみていきたいと思います。