夜風のMixedReality

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

MRTK HandTrianglesShaderの中身を読み解く その① properties{}

本日もShaderの勉強枠です。

本日はより実践的なShaderを読み解く一つとしてMixedRealityToolkitに同梱されているPulseShaderからHandTrianglesShaderを読み解きます。

〇Properties

 ここではUnityのマテリアルで扱えるパラメーターが記述されます。

Properties {

    [Header(Colors)]
        _Intensity_("Intensity", Range(0,5)) = 5
        _Fill_Color_("Fill Color", Color) = (0.317647,0.317647,0.317647,1)
        _Line_Color_("Line Color", Color) = (0.717647,0.717647,0.717647,1)
        [Toggle(USE_ALBEDO_TEXTURE)] USE_ALBEDO_TEXTURE("USE ALBEDO TEXTURE", Float) = 1
        [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {}
        _Vary_UV_("Vary UV", Range(0,1)) = 0.71
        _Vary_Color_("Vary Color", Range(0,1)) = 0.7
        _Desaturated_Intensity_("Desaturated Intensity", Range(0,1)) = 0
     
    [Header(Edges)]
        _Edge_Width_("Edge Width", Range(0,10)) = 1
        _Filter_Width_("Filter Width", Range(1,5)) = 1.5
     
    [Header(Pulse)]
        [Toggle] _Pulse_Enabled_("Pulse Enabled", Float) = 1
        _Pulse_("Pulse", Range(0,1)) = 0.346
        _Pulse_Width_("Pulse Width", Range(0,5)) = 1
        _Pulse_Outer_Size_("Pulse Outer Size", Range(0,2)) = 1.05
        _Pulse_Lead_Fuzz_("Pulse Lead Fuzz", Range(0,1)) = 0.67
        _Pulse_Tail_Fuzz_("Pulse Tail Fuzz", Range(0,1)) = 0.8
        _Pulse_Vary_("Pulse Vary", Range(0,1)) = 0.075
        _Pulse_Line_Fuzz_("Pulse Line Fuzz", Range(0.01,1)) = 0.2
        _Pulse_Noise_Frequency_("Pulse Noise Frequency", Range(0,2000)) = 777
        _Pulse_Origin_("Pulse Origin", Vector) = (0.5, 0, 0, 0)
        _Pulse_Color_Width_("Pulse Color Width", Range(0,1)) = 1
        _Pulse_Amplify_Leading_("Pulse Amplify Leading", Range(0,2)) = 0
     
    [Header(AutoPulse)]
        [Toggle] _Auto_Pulse_("Auto Pulse", Float) = 1
        _Period_("Period", Float) = 2.7
     
    [Header(Edge Timing)]
        _Line_End_Time_("Line End Time", Range(0,1)) = 0.5
        _Fill_Start_Time_("Fill Start Time", Range(0,1)) = 0.5
     
    [Header(Wrist Fade)]
        _Wrist_Fade_Start_("Wrist Fade Start", Range(0,1)) = 0.1
        _Wrist_Fade_End_("Wrist Fade End", Range(0,1)) = 0.16
     
    [Header(Flip V For Hydrogen)]
        [Toggle] _Flip_V_("Flip V", Float) = 0
     
    [Header(Fly)]
        _Max_Hover_("Max Hover", Range(0,1)) = 0.004
        _Max_In_Angle_("Max In Angle", Range(0,2)) = 0.6
        _Max_Out_Angle_("Max Out Angle", Range(0,2)) = 0.4
     

}
●Colors

このプロパティではPulseの塗りつぶしの色、Edge(メッシュのアウトライン)の色、Color Mapでテクスチャを設定することができます。

f:id:Holomoto-Sumire:20200101211512j:plainf:id:Holomoto-Sumire:20200101211459j:plain

    [Header(Colors)]
        _Intensity_("Intensity", Range(0,5)) = 5
        _Fill_Color_("Fill Color", Color) = (0.317647,0.317647,0.317647,1)
        _Line_Color_("Line Color", Color) = (0.717647,0.717647,0.717647,1)
        [Toggle(USE_ALBEDO_TEXTURE)] USE_ALBEDO_TEXTURE("USE ALBEDO TEXTURE", Float) = 1
        [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {}
        _Vary_UV_("Vary UV", Range(0,1)) = 0.71
        _Vary_Color_("Vary Color", Range(0,1)) = 0.7
        _Desaturated_Intensity_("Desaturated Intensity", Range(0,1)) = 0

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

ここで

 [Toggle(USE_ALBEDO_TEXTURE)] USE_ALBEDO_TEXTURE("USE ALBEDO TEXTURE", Float) = 1

 属性[Toggle]はそのあとに続くプロパティをチェックボックスにします。(オン/オフ)

        [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {}

の属性[NoScaleOffse]はそのあとに続くテクスチャのTilingとOffsetを非表示にするものです。

● Edges

Edge(メッシュのアウトライン)の太さ、ぼかしを設定することができます。

f:id:Holomoto-Sumire:20200101210543j:plainf:id:Holomoto-Sumire:20200101222053j:plain

[Header(Edges)]
        _Edge_Width_("Edge Width", Range(0,10)) = 1
        _Filter_Width_("Filter Width", Range(1,5)) = 1.5

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

●Pulse

 このShaderの肝となるプロパティです。

 Pulseの周期の長さや大きさ、Pulse自体のぼかしなどを調整することができます。

  [Header(Pulse)]
        [Toggle] _Pulse_Enabled_("Pulse Enabled", Float) = 1
        _Pulse_("Pulse", Range(0,1)) = 0.346
        _Pulse_Width_("Pulse Width", Range(0,5)) = 1
        _Pulse_Outer_Size_("Pulse Outer Size", Range(0,2)) = 1.05
        _Pulse_Lead_Fuzz_("Pulse Lead Fuzz", Range(0,1)) = 0.67
        _Pulse_Tail_Fuzz_("Pulse Tail Fuzz", Range(0,1)) = 0.8
        _Pulse_Vary_("Pulse Vary", Range(0,1)) = 0.075
        _Pulse_Line_Fuzz_("Pulse Line Fuzz", Range(0.01,1)) = 0.2
        _Pulse_Noise_Frequency_("Pulse Noise Frequency", Range(0,2000)) = 777
        _Pulse_Origin_("Pulse Origin", Vector) = (0.5, 0, 0, 0)
        _Pulse_Color_Width_("Pulse Color Width", Range(0,1)) = 1
        _Pulse_Amplify_Leading_("Pulse Amplify Leading", Range(0,2)) = 0

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

●AutoPulse

 このプロパティでは、自動的にPulseを発生させる機能とそのPulseの周期を設定できます。

 スクリプトなどで外部からPulseを扱う場合や、不規則なPulseを行うなどの場合を除いてこのチェックボックスを有効にしない場合Pulseを扱うことができません。

  [Header(AutoPulse)]
        [Toggle] _Auto_Pulse_("Auto Pulse", Float) = 1
        _Period_("Period", Float) = 2.7

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

● Edge Timing

 HandTriangles ShaderのPulseではLine(メッシュのアウトライン)、Fill(メッシュの塗りつぶし)と大きく分けて二つの小さなPulseを表現できます。

 EdgeTimingはPulseの読み込み時のLineのPulseの読み込み終了時間、FillのPulseの開始時間を設定できます。

この設定次第ではEdge(メッシュのアウトライン)が描画される前に塗りつぶしを先に描画することもできます。

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

  [Header(Edge Timing)]
        _Line_End_Time_("Line End Time", Range(0,1)) = 0.5
        _Fill_Start_Time_("Fill Start Time", Range(0,1)) = 0.5

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

●Wrist Fade

 HandTriangles ShaerはHoloLens 2のHandTrackingでの手のオブジェクトの表現に使われますが、このパラメータは手首部のフェード(減衰)を設定できます。

  [Header(Wrist Fade)]
        _Wrist_Fade_Start_("Wrist Fade Start", Range(0,1)) = 0.1
        _Wrist_Fade_End_("Wrist Fade End", Range(0,1)) = 0.16

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

●Flip V For Hydrogen

このチェックボックスを有効化するとPulseの方向が反転します。

   [Header(Flip V For Hydrogen)]
        [Toggle] _Flip_V_("Flip V", Float) = 0

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

●Fly

 Pulseのはじめ、終わりのそれぞれのMeshの展開の大きさ、メッシュの方向を設定できます。

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

   [Header(Fly)]
        _Max_Hover_("Max Hover", Range(0,1)) = 0.004
        _Max_In_Angle_("Max In Angle", Range(0,2)) = 0.6
        _Max_Out_Angle_("Max Out Angle", Range(0,2)) = 0.4

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

以上がHandTrianglesShaderのpropertiesになります。

扱えるプロパティの数が多いですが、基本的な記述になっています。