今回はShader勉強枠です。
今回はMRTKで提供されているワイヤフレームシェーダーに関して調査します。
〇MRTKのワイヤフレームシェーダーとは?
MRTKでは[SpatialAwareness(空間認識)]で作成された[SpatialMesh(空間メッシュ)]を描画するためのマテリアルとしてデフォルトで[MRTK_Wireframe]というマテリアルがあります。
このマテリアルで使用されているシェーダーが[MixedReality Toolkit/Wireframe]シェーダーになります。
Shader全文はこちらになります。
今回は子のシェーダーを勉強のために読み解いていきます。
〇プロパティ
[MRTK Wireframe]シェーダーでは次のプロパティを保持しています。
・RenderingMode
レンダリングのモードでTransparent、Opaceなどが指定できます。
・CullMode
[CullMode]はカリングを指定し、メッシュの裏側、表側、両面を描画するなどを設定します。デフォルトでは[Back]が指定され、メッシュの裏面がカリングされ、表面のみが描画されるようになっています。
SpatialMeshで使用することが想定されているため、Meshの裏面は表示されないようになっています。
・BaseColor
SpatialMeshの色を指定しています。デフォルトでは黒で実機上で表示されない設定になっています。
・WireColor
SpatialMeshのワイヤフレーム色です。
・WireframeThickness
ワイヤフレームの太さを指定します。
〇カスタムシェーダーGUI
このシェーダーはシェーダーGUIによって[Microsoft.MixedReality.Toolkit.Editor.MixedRealityWireframeShaderGUI]クラスで拡張されUnityのマテリアルとして表示されています。
FallBack "Mixed Reality Toolkit/Standard" CustomEditor "Microsoft.MixedReality.Toolkit.Editor.MixedRealityWireframeShaderGUI"
この[CustomEditor]部をコメントアウトすることでShader本来で表示されるプロパティが表示されます。
[MixedRealityWireframeShaderGUI]クラスの[Styles]ではマテリアルに表記される[Header]を定義します。
protected static class Styles { public static string mainPropertiesTitle = "Main Properties"; public static string advancedOptionsTitle = "Advanced Options"; public static GUIContent baseColor = new GUIContent("Base Color", "Color of faces"); public static GUIContent wireColor = new GUIContent("Wire Color", "Color of wires"); public static GUIContent wireThickness = new GUIContent("Wire Thickness", "Thickness of wires"); }
[GUIContent]はUnityによって提供されているクラスでGUIの要素を指定します。
Unityのレファレンスによると[GUIStyle]と密接に連携しており、GUIContent により「何」を表示するか定義し、GUIStyle は「どのように」表示するか定義しているようです。
GUIContentで2つの要素を作成しています。
ここでは第一引数として表示名を指定し第二引数でTooltipを指定しています。
public GUIContent(string text, string tooltip) : this(text, (Texture) null, tooltip) { }
例えば
public static GUIContent baseColor = new GUIContent("Base Color", "Color of faces");
では変数名上をマウスで重ねると[Color of faces]というツールチップが表示されるようになります。
今回は以上です。
次回もカスタムシェーダーGUIについて読み解きながらWireframeShaderを読み解いていきます。