本日は日曜日なので昨日に引き続き時間をかけながら一つ一つ読み解いている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)が積算された値が代入されます。。
Lerp関数はベクトルにおいて線形補間を行う関数のようです。
(参考にさせていただきました。)
これは
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)が代入されます。
以上がジオメトリシェーダーでのColorの処理になります。