頂点シェーダの処理
各点の座標の決定
現在このエフェクトは、モデルの0点(読み込み直後ではX:0 Y:0 Z:0)からプログラムで指定する座標に向かいラインを伸ばしています。この、ラインを伸ばす座標を、コード中では「TargetPos」という変数で制御しています。
//ターゲット用座標 float3 TargetPos = float3(0,0,100);
ある点からある点にラインを伸ばす
このような、ある点からある点の座標が必要な時には、HLSL標準関数の一つ、「lerp」を使用します。
lerp(a,b,c); lerp関数は、変数a~変数bまでの値を線形補間し、c(0.0~1.0)の位置の値を返します。
float型、matrix型(行列型)などの各種型が使用できる非常に汎用性の高い関数なのでぜひとも覚えておいてください。
今回のエフェクトでは、元モデルのZ座標をlerpの第三引数に使っています。
float3 NowPos = lerp(ZeroPos,TargetPos,Pos.z);
図にすると以下のような形になります。
変数C(0.0~1.0)は0~100%でとらえると分かりやすいかと思います。
これで始点~終点への座標は設定できたので、次はラインの幅を設定していきます。
ラインのビルボード化
まずビルボード、という単語について解説します。
ビルボードとは、直訳すると"看板"となりますが、3Dプログラムでは「常にこちらを向き続けるポリゴン」のことを指します。
通常のビルボードは、常にカメラ方向を向く挙動を取ります。どの視点から見ても一定の面を見せ続けます。
パーティクルや太陽など、円に近い物体(どの方向から見ても形状が変化しない物)などに広く利用されています。
今回は空間に線を引くため、こちらのラインビルボードを使います。ラインビルボードは特定の軸以外の2軸でカメラの方向を向く挙動を取り、木などを大量に配置する場合や、ビームや銃弾などに使われる、ラインエフェクトなどで使用されます。

