ハーフベクトル
ナビゲーションに移動
検索に移動
ハーフベクトル(英語:half vector)とは、3DCGにおいて物体表面(頂点またはピクセル)の位置からみて、視点と光源の中間のことである。
2個のベクトルを足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面(頂点またはピクセル)の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう正規化(normalize)しておく。
float4x4 World;
struct VSIn {
float4 Position: POSITION;
}
struct VSOut {
float3 HalfVector: TEXCOORD2;
}
VSOut VSMain(VSIn vsin) {
VSOut vsout = (VSOut)0;
// 頂点座標をワールド座標に変換
float4 worldPosition = mul(vertex.Position, World);
// カメラベクトルを求める
float3 cameraVector = normalize(worldPosition.xyz - cameraPosition.xyz);
// ハーフベクトルを求める
vsout.HalfVector = normalize(LightPosition.xyz + cameraVector.xyz);
return vsout;
}
ハーフベクトルは鏡面反射の強さを表現する際に使われる値であり、 鏡面反射はハーフベクトルと法線(ノーマル)が一致した際に最大値となる。