fxファイルを増やして分岐させるのも一個の手段ですね。
後は、シェーダー内でif文で分岐したり(非推奨)
計算ロジックだけでif文無しで分岐っぽい事をさせてみたりね。
グローバル変数で、groundEnabeleみたいなのをつけて、
地面を描画する時には、CPU処理からgroundEnabeleに1を入れます。
コード:
a=i.pos;
a=(b*groundEnabele)+(c*(1-groundEnable));
こうしてやると、aの値に足されるのは、
地面である場合はbの値が適用され、
地面出ない場合はcの値が適用される事になります。
こんな具合でシェーダーを一つにまとめてみるのも手段ですね。
DrawCallの回数を抑え込む為に時々上記の様なやり方はしますが、
まぁそこまで気にしなくて良いと思うのでfxファイルを分岐しちゃっていいと思います。