本日もMRTKのHandTrianglesShaderの中身を読み解いていきます。 昨日はフラグメントシェーダーのTransition_B171()を読み解きました。
今回は最終的に定まったカラーの合成とフラグメントシェーダーの終わりまでを見ていきます。
前回の記事はこちら
// Mix_Colors half4 Color_At_T_Q173 = lerp(Fill_Color_Q171, Line_Color_Q171,float4(inLine_Q168, inLine_Q168, inLine_Q168, inLine_Q168)); float4 Out_Color = Color_At_T_Q173; float Clip_Threshold = 0.00; bool To_sRGB = false; result = Out_Color; float clipVal = (Out_Color.a < Clip_Threshold) ? -1 : 1; clip(clipVal); return result;
Coloe_At_T_Q173にはSmoothstep関数同様lerp関数で線形補完された値が入ります。
最小値Fill_Color_Q171、最大値Line_Color_Q171の間でfloat4(inLine_Q168, inLine_Q168, inLine_Q168, inLine_Q168)のそれぞれの成分で補完が行われます。
Fill_Color_Q171はTransition_B171の帰り値でFill_Colorに相当します。
Out_Colorには直前のColor_At_T_Q173の値がそのまま代入されます。(なぜ一度別の変数置いたのだろう・・・? この辺りはNote, this shader is generated from a tool and is not formated for user readability.の所以なのかもしれません)
Clip_Thresholdには0.00が代入されます。
To_sRGBにはfalseが代入されます。
result にはOut_Color、つまりはColor_At_T_Q173の値がそのまま代入されます。
clipVal には(Out_Color.a < Clip_Threshold) の真偽によって-1,1が代入されます。ここでClip_Thresholdの値は0が代入されているためOut_Color.aが0より小さい場合真になります。
clip関数は以前オブジェクトをスライスするシェーダーで扱いましたが、関数内のいずれかの成分が0以下の場合ピクセルの描画を破棄します。
つまりClipValが-1の場合描画が破棄されます。
return result
最後にすべての処理を終えたresultが返されます。
以上がHandTrianglesShaderのフラグメントシェーダーの処理です。これでMRTKのHandTrianglesShaderの処理をすべて見ました。
次回以降具体的にどのパラメータが何を機能しているかを調べるためにもっと深読みしていきます。