概要
物理演算を使ったシステムを作るためにライセンスの関係でUnreal Engine 4(UE4)を使うことになったんですが長さの単位に悩まされたのでその解説をします。
企業の開発や研究等で似たようなことを検討している場合、メートル基準で設計されているUnityを使ったほうが平和だと思います。APIの分かりやすさやPhysX 4.1をサポートしている点から見てもUnityをおすすめします。
UE4の長さの単位はcm
3DCGはただの3次元デカルト座標系の数学の世界なので1
という長さに対して、これがm表記なのかcm表記なのかmm表記なのかそもそもmじゃなくてヤードポンド法なのか...といった明確な規定は一切存在しません。なので通常長さの1
は1mmのことです!とソフトウェア毎に規定することでユーザーはそれに合わせて数値を入力や読み取りができます。また、物理演算を行うときに1
という長さの単位が何を示しているかを把握しておかないと、概算に対して$10^2$~$10^6$倍くらいの数値差が出てきて首を傾げることになります(なりました)。
かの有名なUnityは多分m基準で作られていて、今回触るUE4はcm基準、CADソフト等の機械工学の世界ではmmが基準が多いです。単位の間違いはいつでも起こりえます。
それで表題にもある通り、UE4で扱っている長さの単位(unreal unit: uu)は暗黙的にcm
が基準になっているのですが、これが物理演算に関連するパラメータにどういう影響を与えるかを次に示します。
単位名 | SI単位 | UE4での値 | SI単位→uuの倍率 |
---|---|---|---|
長さ | m | cm | $10^{2}$ |
面積 | $\mathrm{m^2}$ | $\mathrm{cm^2}$ | $10^4$ |
体積 | $\mathrm{m^3}$ | $\mathrm{cm^3}$ | $10^6$ |
速度 | m/s | cm/s | $10^{2}$ |
加速度 | $\mathrm{m/s^2}$ | $\mathrm{cm/s^2}$ | $10^{2}$ |
力 | N($\mathrm{kg\cdot m/s^2)}$ | $\mathrm{kg\cdot cm/s^2}$ | $10^{2}$ |
トルク | $\mathrm{N\cdot m}(\mathrm{kg\cdot m/s^2 \cdot m})$ | $\mathrm{kg\cdot cm/s^2 \cdot cm}$ | $10^4$ |
ニュートン(N)やトルクといった普段mを使って表記しない組立単位に対して多大な影響を与えていることが分かると思います。私はこれを忘れていて引っかかりましたw
物理以外の影響
- CGモデルをメートル基準で作ると巨大になる。スケールを使った修正は大変な目に遭うのでやめたほうがいい(インポート設定でどうにかできるかは知らない)。
- 座標情報をUE4以外のシステムで使って計算したい場合メートル基準で作られていることが多いので、値の変換を前処理として入れる必要がある。逆もしかり