lit - vs
2 つのドット積と指数から照明係数を計算することによって、照明の部分的なサポートを提供します。
構文
lit dst、src |
---|
where
- dst は宛先レジスタです。
- src はソース レジスタです。
注釈
頂点シェーダーのバージョン | 1_1 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
点灯 | x | x | x | x | x | x |
ソース ベクターには、次の擬似コードに示す値が含まれていると見なされます。
src.x = N*L ; The dot product between normal and direction to light
src.y = N*H ; The dot product between normal and half vector
src.z = ignored ; This value is ignored
src.w = exponent ; The value must be between -128.0 and 128.0
次のコード フラグメントは、実行された操作を示しています。
dest.x = 1;
dest.y = 0;
dest.z = 0;
dest.w = 1;
float power = src.w;
const float MAXPOWER = 127.9961f;
if (power < -MAXPOWER)
power = -MAXPOWER; // Fits into 8.8 fixed point format
else if (power > MAXPOWER)
power = MAXPOWER; // Fits into 8.8 fixed point format
if (src.x > 0)
{
dest.y = src.x;
if (src.y > 0)
{
// Allowed approximation is EXP(power * LOG(src.y))
dest.z = (float)(pow(src.y, power));
}
}
変換先の y コンポーネント (dest.y) を評価する場合は、精度の小さい算術演算を使用できます。 実装では、power 引数で少なくとも 8 つの分数ビットをサポートする必要があります。 ドット積は正規化ベクトルを使用して計算され、クランプの制限は -128 から 128 です。
エラーは 、logp - vs と exp - vs の組み合わせに対応するか、8 ビットのカラー コンポーネントに対して約 1 ビット以下にする必要があります。
関連トピック