本日もMRTKのHandTrianglesShaderの勉強枠です。
前々回からHandTrianglesShaderのジオメトリシェーダーを読み解いていきます。 長いのでそのⅣです
前回はPulse_B160の処理を読み解きました。
今回はUSE_ALBEDO_TEXTUREがオンの場合、オフの場合でColor_Q157を見ていきます。
float4 Color_Q157;
#if defined(USE_ALBEDO_TEXTURE)
Pt_Sample_Texture_B157(Average_Q153,Result_Q151,_Color_Map_,_Vary_UV_,1,Color_Q157);
#else
Color_Q157 = float4(1,1,1,1);
#endif
#if defined(X)はXが定義されていた場合の条件分岐です。
ここはPass内冒頭の
#pragma multi_compile _ USE_ALBEDO_TEXTURE
によってUSE_ALBEDO_TEXTUREはプリプロセッサディレクティブを用いて処理を分岐できるようになっておりUSE_ALBEDO_TEXTUREがプロパティでonになっている場合
Pt_Sample_Texture_B157(Average_Q153,Result_Q151,_Color_Map_,_Vary_UV_,1,Color_Q157);
がコンパイルされます。
この場合
void Pt_Sample_Texture_B157(
float2 UV,
float Noise,
sampler2D Texture,
float Vary_UV,
float Map_Intensity,
out float4 Color )
{
float2 xy = UV + float2(Noise-0.5,Noise-0.5)*Vary_UV;
Color = tex2D(Texture,xy,float2(0,0),float2(0,0))*Map_Intensity;
}
の引数が次のように代入されます。
UV =Average_Q153(=面の重心ベクトル)
Noise=Result_Q151(=Cell_Noise_2D_B151の変数Result)
Texture=Color_Map(=プロパティで指定したColorMapのテクスチャ)
Vary_UV=Vary_UV(=プロパティで指定したVary_UV(デフォルトで0.075))
Map_Intensity=1
Color=Color_Q157
Pt_Sample_Texture_B157()では以下の処理が行われています。
float2 xy = UV + float2(Noise-0.5,Noise-0.5)*Vary_UV;
Color = tex2D(Texture,xy,float2(0,0),float2(0,0))*Map_Intensity;
xyには面の重心ベクトルにCell_Noise_2D_B151の変数ResultにそれぞれVary_UVを積算したものを加算した値が代入されます。
通常tex2Dは
tex2D(_Texture,uv);
でuvから_Textureの色情報を計算して返すというように2つの引数で使われる場合がほとんどです。
しかしここではColorはfloat4 Colorとして扱われているため4つの引数が用いられています。(この値も少し勉強が必要です。)
ここでfloat2(0,0)はゼロベクトルなので実質的にColorにはxyからColorMapの色情報を計算した値にMap_Intensityが強度としてかけられた値がColorとして返されます。
この値がColor_Q157へ代入されます。
USE_ALBEDO_TEXTUREがプロパティでOffの場合
Color_Q157 = float4(1,1,1,1);
とColor_Q157には(1,1,1,1)が代入されます。
今回はUse_Albedo_Textureのチェックがオンである場合とオフである場合のColorに関してみていきました。