【Unity】MVP行列による座標変換の概念と用語の整理

Uniteのクォータニオン完全マスターの動画を見ていたら座標変換の説明がとてもわかりやすかったので、
復習と用語の整理を兼ねてまとめてみました。

モデル変換

最初はモデリング時の原点を中心としたモデル空間にあります。

f:id:halya_11:20181129235936p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

まずこれがワールド空間のどこに置かれているのか計算します。
それがモデル変換で、その時に使うのがモデル行列です。

f:id:halya_11:20181130000040p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

ここまでの用語をまとめます。

名前 説明
モデル空間 / オブジェクト空間 モデリング時の原点を中心とした空間
モデル行列 モデル空間をワールド空間に変換する行列
モデル変換 モデル空間をワールド空間に変換すること
モデル座標系 / オブジェクト座標系 モデリング時の原点を中心とした座標系
ワールド空間 モデリング時の原点を中心とした座標系

モデル/オブジェクトという二通りの呼称を使っているため若干ややこしくなっていますが、
Unityがオブジェクトという言葉も使っている(UnityObjectToClipPosなど)ため敢えて書いています。

ビュー変換

次にこれをカメラから見ることを考えます。

f:id:halya_11:20181130000226p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

ワールド空間で表されているものを、「カメラの位置を原点としてカメラが向いている方向をZ軸の正方向とした空間」に変換します。
この変換をビュー変換と呼び、ビュー変換後の、カメラを原点とした空間をビュー空間と呼びます。

f:id:halya_11:20181130000424p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

この節の用語をまとめます。

名前 説明
ビュー空間 カメラの位置を原点としてカメラが向いている方向をZ軸の正方向とした空間
ビュー行列 ワールド空間をビュー空間に変換する行列
ビュー変換 ワールド空間をビュー空間に変換すること

モデル変換はモデル空間「から」の変換を表す言葉であるのに対して、
ビュー変換はビュー空間「へ」の変換を表すので若干ややこしいです。

プロジェクション変換

次にプロジェクション変換です。これは若干複雑です。
まずプロジェクション変換の目的は、ビュー空間にある座標をxyzがぞれぞれ-1から1に収まるような座標に変換することです。
変換後の座標を正規化デバイス座標といいます。
また、変換後の空間をプロジェクション空間といいます。

f:id:halya_11:20181130001425p:plain:w400

プロジェクション変換をするには、ビュー空間の座標にプロジェクション行列を掛けます。

f:id:halya_11:20181130000950p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

ここでややこしいのは、プロジェクション行列をかけただけではプロジェクション変換は完了していないということです。
プロジェクション行列をかけた後に透視変換という変換を行うことで、やっとプロジェクション変換が完了します。
そして透視変換はGPUで自動的に行われます。
そのためプロジェクション行列では途中までしかやらないということです。

このあたりの話は下記の記事に詳しく書いています。

light11.hatenadiary.com

ちなみに透視変換は行列計算ではなく、wの値で割るだけの計算です。

f:id:halya_11:20181130001737p:plain:w400
【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube のキャプチャ

しかしプロジェクション行列という名前は混乱を招きますね。。
かけたらプロジェクション変換が完了するかのような印象を受けます。

この節の用語をまとめます。

名前 説明
プロジェクション変換 ビュー空間にある座標をxyzがぞれぞれ-1から1に収まるような座標に変換すること
プロジェクション空間 / クリッピング空間 xyzがぞれぞれ-1から1に収まるような空間
正規化デバイス座標系 / クリッピング座標系 xyzがぞれぞれ-1から1に収まるような座標系
プロジェクション行列 プロジェクション変換を途中までやる行列
透視変換 ビュー空間の座標にプロジェクション行列をかけたものをwで割ってプロジェクション空間に変換すること

用語一覧

最後に本記事で出てきた用語を一覧化しておきます。

名前 説明
モデル空間 / オブジェクト空間 モデリング時の原点を中心とした空間
モデル行列 モデル空間をワールド空間に変換する行列
モデル変換 モデル空間をワールド空間に変換すること
モデル座標系 / オブジェクト座標系 モデリング時の原点を中心とした座標系
ワールド空間 モデリング時の原点を中心とした座標系
ビュー空間 カメラの位置を原点としてカメラが向いている方向をZ軸の正方向とした空間
ビュー行列 ワールド空間をビュー空間に変換する行列
ビュー変換 ワールド空間をビュー空間に変換すること
プロジェクション変換 ビュー空間にある座標をxyzがぞれぞれ-1から1に収まるような座標に変換すること
プロジェクション空間 / クリッピング空間 xyzがぞれぞれ-1から1に収まるような空間
正規化デバイス座標系 / クリッピング座標系 xyzがぞれぞれ-1から1に収まるような座標系
プロジェクション行列 プロジェクション変換を途中までやる行列
透視変換 ビュー空間の座標にプロジェクション行列をかけたものをwで割ってプロジェクション空間に変換すること

関連

light11.hatenadiary.com

参考

【Unity道場 大阪スペシャル in モリサワ 2017】クォータニオン完全マスター - YouTube

esprog.hatenablog.com

marina.sys.wakayama-u.ac.jp