MixedRealityToolKit(以下MRTK)にはExamplesというデモサンプル集が含まれています。
Examplesを理解すればMRTKの機能の使い方を学習することやノンコーディングでのアプリ開発が可能になります。
今回は UX/StandardShader/ClippingExamplesを見ていきます。
〇デモシーンの概要
このデモシーンでは MRTK StandardShaderをClipping primitive(ClippingPlane,ClippingSphere,ClippingBox)と組み合わせて心臓のオブジェクトをクリッピングしています。
ClippingPlane,ClippingSphere,ClippingBoxに関しては過去の記事を参考にしてください。
〇シーンの解説
シーン内には二つのクリスタルのようなキューブ、球体と心臓の3Dオブジェクトがあります。
ジェスチャーを使ってキューブ、球体を移動させ心臓のオブジェクトにめり込ませると、キューブ、球体の部分のみ心臓のオブジェクトがClipping(切り取り)されます。
概要でも触れていますが、キューブ、球体にはそれぞれClippingBox.cs,ClippingShere.csがアタッチされていて、Rendererに心臓のオブジェクトのメッシュであるnode_id30というオブジェクトが設定されています。
ClippingPlane,ClippingShere,ClippingBoxの使い方は次のようになります。
〇ClippingPlane,ClippingShere,ClippingBoxの使い方
実にシンプルです。
RenderersのSizeにClippingしたいメッシュの数を設定。
Sizeに対応してElementにClippingしたいメッシュを設定。
これだけでClippingを行うことができます。
またClipping SideはInside、Outsideの二種が設定でき、Clipping○○.csがアタッチされたオブジェクトの内側、外側どちらをClipingするかを設定できます。
例えばここの設定をOutsideに変更すると上の図のようにClippingShereが機能する球体の内部だけがClippingされます。
また Use on pre RenderのチェックボックスでカメラのOnPreRenderイベントを用いるかを設定することができます。
〇心臓オブジェクト側の設定
Clipping自体はClippingBox,Shere,Planeで行うことができますが、心臓オブジェクト側にもClippingに関する設定を行うことができます。
オブジェクトに設定されているMRTK StandardShaderにはClopping Borderという設定項目があり、ここでClippingされた際のBorderの色とその大きさに関して設定することができます。
このシーンでは心臓という人の臓器に対しClippingで切り取りなかのロゴを見ましたが、オブジェクトにこだわればユーザーが自由に中をのぞける人体模型なども作ることができそうです。
またSpatialMappingのメッシュと組み合わせて建築の場などで現実の壁にClippingオブジェクトを当てることでSpatialMappingのメッシュがClippingされてパイプラインや配線などが見えるという使い方もできそうです。