これまでMRTKv2のStanderdShader/MaterialGalleryデモシーンを見ていきました。
今回はその最終回です。
今回見ていくのはClippingPlane、ClippingSphere、ClippingBoxという三つのオブジェクトです。
〇ClippingPlane
ClippingPlaneオブジェクトはまるで医療用CTやMRIを撮った時のようにAnimationによってオブジェクトの断面が変化しています。
ShaderBallオブジェクトの子オブジェクトとしてAnimatorというAimationがアタッチされたオブジェクトの子オブジェクトにClippingPlaneオブジェクトがあります。
Clippingとは切り取ることなのでこのオブジェクトで行っているのはAnimatorオブジェクトのAnimationがClippingPlaneオブジェクトを動かし、ShaderBallオブジェクトをClippingしています。
ではInspectorから中身を見ていきます。
ClippingPlaneを見てみるとPlaneという名前ではありますが、MeshRendererやColliderなどはなく、ただClippingPlaneというスクリプトがアタッチされています。
ClippingPlane.csはMixedRealityToolKitExamplesではなくMixedRealityToolKit/Utilites/ShanderdShaderにあるようです。
Renderersの設定項目があり、ShaderBallとShaderBallInnerの二つのMeshRendererが設定されています。
どうやらClippingPlane.csは独自の大きさを持ち、Renderersに設定したMeshと接触した場合Clipping Sideに設定された向きに(InsideかOutsideか)Clippingを行っているようです。
ここではShaderBallオブジェクトという灰色のオブジェクトと、ShaderBallInnerというオレンジのオブジェクトがあり、それぞれCull ModeがFront,Backと別れており、外部を描画する灰色のオブジェクトと内部を描画するオレンジのオブジェクトで断面を表現しています。
また、ClippingPlaneは向きと大きさを持つため、ClippingSideだけでなくScaleやTransformを変更することで任意の向きにClippingすることが可能です。
ClippingはShaderの設定ではなくMRTKStanderdShaderが設定されているMaterialが設定されているオブジェクトのMesh RendererをClippingPlane.csで設定することによって行っているようですが、MRTKStanderdShaderにもClippingに関する設定項目があります。
Clipping Borderという設定ですが、どうやらここはClippingされた際の断面からの光の色と大きさの設定のようです。
Widthがその名の通りBorderの大きさ、Colorが色になるようです。
〇ClippingSphere
MaterialGallery ClippingSphere
ClippingSphereはClippingPlaneと同様の仕組みですが、Planeではなくその名の通りSphere(球体)でClippingを行っています。
AnimationでClippingPlane同様ClippingSphere.csがアタッチされたオブジェクトを動かしているようです。
ClippingShereの使い方はClippingPlane同様ですが、Planeと違いShereの場合面が立体に閉じているため、Clipping SideをOutsideに変更することで面白い効果を引き出せます。
MaterialGallery ClippingShere Test
〇ClippingBox
こちらも今までの2つと同様で今度はBoxのバージョンです。
違いはClippingBox.csがアタッチされていることです。
また、ClippingBoxオブジェクトはClippingShereオブジェクト、ClippingPlaneオブジェクトと異なり内部を描画するためのInnerのオブジェクトがなく、Cull ModeがOffとなっていることで表面も裏面も一つのオブジェクトで描画しています。
今回までMaterialGalleryというMixedRealityToolKit v2 ExamplesのStanderdShaderにかかわるデモシーンを見ていきました。
オブジェクトの数も多く一つ一つ見てくことは大変でしたが、MixedRealityToolkit StanderdShaderはUnlitやClipping等UnityのStanderdShaderでは別々のShaderに分けられているものが一つのStanderdShaderにまとめられていて使いやすく感じます。
次回公式ドキュメントを和訳しながら理解を深め実践編を行ってみたいと思います。