Happy My Life

日常とか技術とか

ゲームの数学 for UE4 座標系編

前回に引き続き、ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまでの2章の話を。ここでは座標系の解説をしている。

座標系は、コードの話はあまりなくて(話のしようがない)、知識として知っておくべき事が書かれている。ここでは、重要そうなネタをメインに書いていく。

右手系、左手系

2Dの座標系や3Dの座標系でもっともく使われるデカルト座標系(x,yや、x,y,zを使ったよくある座標系)の解説が書かれており、続けてデカルト座標系ではおなじみの右手系、左手系の話となる。右手系、左手系とは、X、Y、Zの座標軸の定義の違いを表している。詳細は座標系 (Direct3D 9)にも書かれている。

右手系、左手系をざっくり分類すると以下の様になる。

  • 右手系:OpenGL
  • 左手系:Direct X、Unity、UE4、CryEngine

以前であれば、OpenGL向けのサンプルコードをDirect X向けに移植するときは、右手系、左手系を意識したのだが、ゲームエンジンだと左手系しかない(はず、たぶん)ので、さほど気にする必要がなくなった。なので、知識として知っておけばOKって話となっている。

ローカル座標とワールド座標

座標系で忘れちゃいけないのがローカル座標、ワールド座標の話。

本の中では、Unityのエディタを使って説明されているのだが、では、UE4ではどうなっているか?。結論から言うと、ワールド座標を扱うエディタと、ローカル座標を扱うエディタは別なので、Unityのエディタより明確に分かれており、区別は付けやすくなっている。

まず、ワールド座標とは世界(レベル)での位置を示す座標を指す。世界におけるキャラクターの位置などがそう。UE4のレベルエディタでスタティックメッシュを配置すると座標が決まるが、ここで指定する座標はワールド座標となる。

coord1

(追記)レベルエディタでも、ローカル座標、ワールド座標が切り替えられる事を思い出した。

worldcoord

localcoord

(追記終わり)

もう一方のローカル座標は、これはキャラクターや物体が個別に持つ座標系の事。キャラクターに装備品を付加させる場合は、このローカル座標を使って位置を指定するのが一般的。

このローカル座標、UE4ではActorクラスやPawnクラスを継承して作成したBluePrintで物体を配置する際に扱う座標に相当する。

ちなみに、UE4は、ローカル座標系は入れ子状に指定することが簡単に行えるようになっており、「親メッシュが動けば子メッシュも動く」ってのが簡単に指定できるようになっている。

coord2

UE4でゲームを作成する際には、ワールド座標、ローカル座標って言葉自体があまり出てこないので意識する機会はそう多くないかも。だけど知識としては知っておく必要がある。

次回は3章 ベクトルの話を。