三次元アプリ開発でよく使われるカメラ操作/設定のパターン
大きく分けると軌道回転型と自由視点型の2種類、あとはその亜種と捉える事もできます。最終的には【視点座標】と【視線方位】及び視野角などの付随するパラメーターについて、何を元に計算させて決めようかというパターンです。実用性の高いパターンはゲームでもお馴染み、お決まりのカメラ操作パターンになっているので、ゲーマーさんは3Dゲームを何か想像しながら「そういうことね、なるほどね!」と関連付けながら考えると混乱しないかもしれません。
以下、記述は個別のエンジン、ライブラリーによらない一般論としつつ、実装の一例の紹介として Babylon.js の API ドキュメントにリンクします。
軌道回転型(アークローテート型)のカメラ
ゲーマーさんにわかりやすく例えると"俗に言うところのTPSカメラの一種"です。CITIESなどシムゲーのカメラモードとして採用される事が多いパターンです。《見たい対象》を基準にカメラを操作させたい場合に使います。
ユーザー(プレイヤー)が指定できるパラメーターは:
- 注視点=《見たい対象》のいる点(座標)
- 方位角=《見たい対象》【への】水平方向の回転軸上ではどの辺り【から】見たいか(角度)
- 仰俯角=《見たい対象》【への】垂直方向の回転軸上ではどの辺り【から】見たいか(角度)
- 距離=見たい対象からカメラまでの距離(距離)
※他に必用に応じて視線軸回転(角度)や視野角(角度)も扱う場合もあります。
※「TPSカメラ」という用語はTPS状態=第三者視点で対象を見る場合のカメラという意味ではありますが、ゲーマーさんの世界では「FPSに対しての」というFPS/FPSを対義的な状態を表す言葉として踏まえた上でのTPSモードでの視点の事だったり、本節で紹介した方式の視点やカメラ方式の事だったり状況やコンテキストによって意味や意図に揺れが大きい事があります。
- 例: https://playground.babylonjs.com/#SRZRWV#839 (Babylon.js API ArcRotateCamera)
自由視点型(フリービューポイント型)のカメラ
ゲーマーさんにわかりやすくいうとターゲットロックしてない状態のTPS/FPSカメラです。《視点》を基準にカメラを操作させたい場合に使います。
ユーザー(プレイヤー)が操作できるパラメーターは:
- 視点=《自キャラ》のいる点(座標)
- 方位角=《自キャラ》【からの】水平方向の回転軸上ではどの辺り【を】見たいか(角度)
- 仰俯角=《自キャラ》【からの】垂直方向の回転軸上ではどの辺り【を】見たいか(角度)
※他に必用に応じて視線軸回転(角度)や視野角(角度)も扱う場合もあります。
※軌道回転型カメラの距離を ... → 0
へと近づけると出来上がる絵は自由視点型カメラと同じになりますが、方位角と仰俯角の +/-
つまり回転方法が互いに逆になります。これはしばしばユーザーの脳のカメラの捉え方や操作の慣れと関連して三次元アプリ、ゲームでも問題となり、一般的な解決方法としてアプリに対して設定画面などでユーザーが設定可能な項目に「Y軸反転」「X軸反転」のオプションを追加する事にも関連しています。
対象及び視線固定型(ターゲットロック型、フォロー型)のカメラ
ゲーマーさんにわかりやすくいうとターゲットロックしている状態のTPS/FPSカメラです。《見たい対象》と《自キャラ》の座標でカメラの視界を決定する場合に使います。
ユーザー(プレイヤー)が操作できるパラメーターは:
- 注視点=《見たい対象》のいる点(座標)
- 視点=《自キャラ》のいる点(座標)
※他に必用に応じて視線軸回転(角度)や視野角(角度)も扱う場合もあります。
※実際のゲームのターゲットロック状態のカメラでは完全にぴったんこ視線を固定ではなく、右スティックやマウスなどの入力を元に若干の方位角や仰俯角も設定できるインターフェースになっている応用/亜種パターンも多くあります。
おまけ: カメラの視野角のパターン
FOVY型
視野角(=FOV; [F]ield [o]f [V]iew
)を最終的に出来上がる2次元の絵(3Dゲーでもスクショとってできあがる絵は2次元ですね!)の垂直軸方向(=Y軸方向)の長さを基準にして、垂直方向の視野角と水平方向の視野角を設定する方式です。画面の横幅は環境によって変わるものの、基本的には画面の高さを基準に視界を出力したい場合に使われます。たいていの横長画面向けの3Dゲームはこの方式です。
FOVX型
視野角を最終的に出来上がる2次元の絵の水平軸方向(=X軸方向)の長さを基準にして、垂直方向の視野角と水平方向の視野角を設定する方式です。画面の横幅を基準にしたい場合に使います。あまり一般的には使われませんが、画面がいくら横に長い環境でも見える水平視野は変わらないようにしたい(それが重要なアクション要素の難易度に影響する大切な要素でプレイヤー間で差をつけさせたくない場合など)には採用することもあるかもしれません。
対角線型(リアルカメラ型)
視野角を最終的に出来上がる2次元の絵の水平軸方向(=X軸方向)の長さを基準にして、垂直方向の視野角と水平方向の視野角を設定する方式です。現実世界のカメラやディスプレイデバイスの画面の大きさの表記などで使われています。もしアプリで現実世界のカメラの視野角の状態を再現したい場合などあれば使う事になりますが、他の用途ではまず使われません。