夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ゼロから始めるUnityShader開発 第九章 平行移動行列

今回はシェーダー枠です。

前回は回転行列についてみていきました。

redhologerbera.hatenablog.com

回転行列は座標返還で使用されます。 3DCGの世界ではローカル座標、多くの物体に対してトランスフォームというプロパティが存在します。

 ワールド座標とは別にローカル座標の概念もあり、あるワールド座標に存在するオブジェクトを基準とした座標系で位置を定義することができます。

 このような座標変換を行う際に行列が使用されます。 その中でも座標変換に回転が使用されれる場合に回転行列が使用されます。

 またオブジェクトの移動に関しては平行移動行列と呼ばれる行列が使用されます。

 今回はこの平行移動行列についてみていきます。

〇平行移動行列とは?

平行移動行列の前にオブジェクトの移動を考えてみます。

例えば蓋つきカップが原点に存在するとします。この際にカップのふたを外すことを考えると鉛直軸に対して移動させればよいです。

では、誰かがカップを持っているイメージで原点から離れ、さらにコップに回転がかかっている状況を考えてみます。

 先ほどと同様にふたを外すことを考えると、コップを基準とした場合単純に鉛直軸に対しているだけですが、原点から見ると斜めに複雑な移動をしていることがわかります。

 このような場合、回転どうよう、異なる座標系に対してオブジェクトを移動させるときは行列が用いられ、特に異なる座標家に対して移動を行う行列を平行移動行列と呼びます。

 Unityなどを親しんでいる人にとってはローカル座標での移動というと理解がしやすいと思います。

〇平行移動行列

平行移動行列は次のようにあらわされます。

 \displaystyle
\begin{bmatrix}
1 & 0 & 0 & T_X \\
0 & 1 & 0 & T_Y \\
0 & 0 & 1 & T_Z \\
0 & 0 & 0 & 1
\end{bmatrix}
  \

行列にすることで難しく見えますが各成分についてみていきましょう。

まず座標(x,y,z)にある点をそれぞれtだけ動かすことを考えます。

この際にx成分について移動後の座標は

x=x+t というようになります。

同様にyやzについてもあらわすことができます。

この操作を行列で表すことで一括に操作することができます。

では次にローカル座標系の例を見ていきます。

原点から離れた位置にあるオブジェクトの子オブジェクトを平行移動させることを考えます。

この時は1親オブジェクトに対してのワールド座標系での平行移動行列2子オブジェクトに対しての親オブジェクトを基準とする平行移動行列 の足し算で求めることができます。

では、親オブジェクトに回転が加わっている場合を見ていきます。

この場合は1親オブジェクトの座標を求めるための平行移動行列、2親オブジェクトの回転座標へ変換するための回転行列 3子オブジェクトの平行移動行列

というステップで求めることができます。

なお行列は座標系の返還に等しいので、順番を間違えてしまった場合異なる結果となる場合があります。

平行移動行列は簡単にまとめると私たちが一般的に使用している移動の計算をXYZを一括に表せるように行列で示したものになります。

本日は以上です。