単位ベクトルの定義
\begin{align}
1 &= |e| \\
&= \sum R = \sum_{x^2 \in R } x^2 = \sum_{i=1}^{n} x^2_i \\
&= (x^2_1 + x^2_2 + \cdots + x^2_n) \\
\end{align}
三次元ベクトルのZを解く
\begin{align}
X^2 + Y^2 + Z^2 &= 1 \\
Z^2 &= 1 - (X^2 + Y^2) \\
Z &= \sqrt{1 - (X^2 + Y^2)}
\end{align}
コードにしてみる
float z = sqrt(1.0 - (x*x + y*y))
求める要素の方向は分からないので、方向が確定していない場合は使えない。
演算効率
ALU x 4, SFU x 1 (ALU x 2, ALU[FMA] x 1, SFU x 1)
それぞれの演算装置の計算に4サイクル必要として、20サイクル。
NormalMap のチャンネルを節約することで、テクスチャサンプルが減るのであれば演算コストはペイできる。