夜風のMixedReality

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

ゼロから始めるUnityShader開発 第九章 スケーリング行列

本日はシェーダー枠です。

前回は平行移動行列を見ていきました。

平行移動行列は座標変換において使用される行列で、イメージとしてはワールド座標系に位置するあるオブジェクトの子オブジェクトを移動させる際などに使用される行列です。

3Dグラフィックスで使用される行列は主に座標変換などで衣装されることが多いですが、次のような行列の種類があります。

回転行列

平行移動行列

スケーリング行列

せん断行列

投射行列

ビュー行列

今回はこの中からスケーリング行列についてみていきます。

〇スケーリング行列とは?

スケーリングとはその名前の通り拡大縮小のスケールを意味します。

3DCGではトランスフォームの項目にスケールの値が一般的にあり、簡単に拡大縮小を行うことができます。

例えば、あるキューブのスケールを変更する場合、キューブを構成する頂点はキューブの原点に対して移動する必要があります。

この座標変換に用いられているのがスケーリング行列になります。

〇スケーリング行列

スケーリング行列は次のようにあらわされます。

 \displaystyle
S = 
\begin{pmatrix}
\ S_x & 0 & 0 \\
\ 0 & \ S_y & 0 \\
0 & 0 & S_z
\end{pmatrix}  \

たとえば初期座標 = (1, 2, 3)にある点を持つオブジェクトのスケールを2倍にすることを考えます。

すると新たな座標は次のようになります。

新たな座標 = スケーリング行列×元の座標

各成分で計算すると次のようになります。

 \displaystyle
NewPos_x = (2 * 1) + (0 * 2) + (0 * 3) + (0 * 1) = 2\\
NewPos = (0 * 1) + (2 * 2) + (0 * 3) + (0 * 1) = 4\\
NewPos_z = (0 * 1) + (0 * 2) + (2 * 3) + (0 * 1) = 6\\
\

これを求めることで変換後の座標は (2, 4, 6)

直感的で簡単な内容ではありますが、行列にすることで各成分を一括で操作できるため便利な反面非常に抵抗があるようになります。

本日は以上です。

〇参考

edgeservices.bing.com