夜風のMixedReality

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

MRTK HandTrianglesShaderの中身を読み解く その⑨ ジオメトリシェーダーを読み解く Ⅵ

本日は日曜日なので昨日に引き続き時間をかけながら一つ一つ読み解いているMRTKのHandTrianglesShaderの中身を読み解きます。

〇Color

        // Color
        float4 Result_Q161;
        float k = max(Color_Q157.r,max(Color_Q157.g,Color_Q157.b))*_Desaturated_Intensity_;
        Result_Q161 = lerp(float4(k,k,k,1),Color_Q157,float4(Saturation_Q160,Saturation_Q160,Saturation_Q160,Saturation_Q160))*(1.0-_Vary_Color_*Result_Q150)*Fade_Color_Q160;
        Result_Q161.rgb *= _Intensity_;

コメントアウトを見る限りカラーを処理しているようです。

Color_Q157はUSE_ALBEDO_TEXTUREによって変わります。

USE_ALBEDO_TEXTUREが定義されている場合

Color_Q157=tex2D(Texture,xy,float2(0,0),float2(0,0))*Map_Intensity;

となります。

kにはColor_Q157のR,G,B成分の一番大きい値にマテリアルで設定したDesaturated_Intensity(デフォルトでは0)が積算された値が代入されます。。

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

Lerp関数はベクトルにおいて線形補間を行う関数のようです。

(参考にさせていただきました。)

qiita.com

これは

Lerp(float4(k,k,k,1),Color_Q157,float4(Saturation_Q160,Saturation_Q160,Saturation_Q160,Saturation_Q160)){

return float(k,k,k,1)+float4(Saturation_Q160,Saturation_Q160,Saturation_Q160)*(Color_Q157-float(k,k,k,1))

}

となります。

_Pulse_Enabledが未定義場合SaturationQ160は1が代入されています。この値はPuse_B160()で指定されます。

Fade_Color_Q160には_Pulse_Enabledが未定義の場合1が代入されています。この値はSaturationQ160同様Pulse_B160()で指定されます。

Lerp(float4(k,k,k,1),Color_Q157,float4(Saturation_Q160,Saturation_Q160,Saturation_Q160,Saturation_Q160))にFade_Color_160を積算したものがResult_Q161に代入されます。

Result_Q161のRGB成分にマテリアルで指定した Intensityの値(デフォルトで5)が代入されます。

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

以上がジオメトリシェーダーでのColorの処理になります。