差分

ナビゲーションに移動 検索に移動

ハーフベクトル

1,813 バイト追加, 2020年4月28日 (火) 03:42
ページの作成:「'''ハーフベクトル'''(英語:half vector)とは、3DCGにおいて物体表面(頂点またはピクセル)の位置からみて、視点…」
'''ハーフベクトル'''([[英語]]:half vector)とは、[[3DCG]]において物体表面([[頂点]]または[[ピクセル]])の位置からみて、視点と光源の中間のことである。


2個の[[ベクトル]]を足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面([[頂点]]または[[ピクセル]])の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう[[正規化]](normalize)しておく。<source lang="HLSL">
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;
}
</source>ハーフベクトルは[[鏡面反射]]の強さを表現する際に使われる値であり、 鏡面反射はハーフベクトルと[[法線]]([[ノーマル]])が一致した際に最大値となる。
==関連項目==

* [[シェーダー]]
* [[フラットシェーディング]]
* [[グローシェーディング]]
* [[フォンシェーディング]]
* [[フォン・ライティング]]
** [[アンビエント・ライティング]]
** [[ディフューズ・ライティング]]
** [[スペキュラー・ライティング]]
* [[ブリン・フォン反射モデル‎]]

案内メニュー