夜風のMixedReality

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

MRTK Standard Shader ドキュメントを読み解く その④ 追加機能に関するドキュメント

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

MRTK v2のExamplesに含まれているデモシーンを見ながらStanderdShaderに関して勉強していました。

 一つのデモシーンを見ながらMRTK StandardShaderに触れて、前回からドキュメントを読み解いています。

 英語の記事になりますので、まずは英語を勉強もかねて見ていきます。

※この記事は公式ドキュメントの画像を使用しています。

 前回の記事はこちら

redhologerbera.hatenablog.com

 〇PrimitiveClipping

 プリミティブプレーンの内側、外側のどちらかをクリップするのかを指定する機能を備えた、高性能の平面、球体、ボックス型のクリッピング機能です。

 ClippingExamplesシーンに高度な使用法を示すシーンがありますが以前見たMaterialGalleryにも同様の機能がありました。

redhologerbera.hatenablog.com

  ClippingPlane.cs、 ClippingSphere.cs、ClippingBox.csの三つのスクリプトで簡単に制御できます。

〇MeshOutline

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

 多くの場合メッシュアウトラインを行う手法として、後処理を用います。非常に優れたクォリティーを見せるもののMixedRealityデバイスでは高負荷になる可能性があります。

 MRTKではMeshOutline.csおよびMeshOutlineHierarchy.csを使用してMeshRendererの周囲にアウトラインをレンダリングできます。

 このコンポーネントを使用するとアウトライン化されるオブジェクトの追加のレンダーパスが導入されますが、MixedRealityように設計されているため後処理を行うことはありません。

 この機能は両面の描写が必要なオブジェクトなどではうまく機能しないことや、重なり合うオブジェクトで問題が発生することがあります。

 アウトラインの動作はMRTK StandardShaderと組み合わせて使用するように設計されています。

 OutlineMaterialは通常unlitの(照明効果を受けない)ソリッドカラーですが、様々な効果を表現できるように変更できます。

 OutlineMaterialのdefaultの構成は次のようになっています。

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

 ①Depth Write(深度書き込み)

アウトラインがほかのオブジェクトと干渉することを防ぐためにOutlineMaterialでは無効化します。

 ②Vertex Extrusion(頂点押し出し)

アウトラインをレンダリングする場合有効にします。

 ③Use Smooth Normals

この設定はオブジェクトによっては使用します。 Vertex Extrusionは頂点の法線方向に頂点を移動することで行いますが、一部メッシュでは法線によって押し出されるとアウトラインに不均一性が発生してしまうことがあります。 例えばキューブ(6面体)をVertex Extrusionで展開した場合展開された面と面の間に隙間ができてしまいます。

 これらの不連続性を修正するためにはこの機能にチェックを入れ有効化してMeshSmoother.csによって生成される別の法線セットを使用することができます。

 MeshSmoother.csはメッシュ状に滑らかにされた法線を自動的に生成するために使用するコンポーネントです。 空間内の同じ場所にあるメッシュ内の頂点をグループ化し、それらの法線を平均することで平滑化されたメッシュをコピーしているため、Vertex Extrusionによってアウトラインの不均一性が発生している場合のみ使用してください。

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

①MeshSmootherで平滑化されたキューブ ②法線方向に不連続性が発生している

 アウトラインの機能はMeshRendererにアウトライン用のMaterialを追加し以前MaterialGallery その⑥の記事で扱ったVertexExtrusionと同じようにVertex Extrusionによって法線方向にメッシュを展開することで行っているようです。

 展開した際のアウトラインの不連続性が発生した場合MeshSmootherを使用することできれいなアウトラインを実現しているようです。

redhologerbera.hatenablog.com

 今回はクリッピングとアウトラインを見ていきました。

 アウトラインに関してもデモシーンは見ていませんがMaterialGalleryで扱った機能を用いて実装しているようです。

 次回はドキュメントを最後まで勉強します。