カメラ・操作感

スプラインドリー

Spline Dolly / Rail Camera

曲線のレールに沿ってカメラを運ぶ。

9 / 10

インタラクティブデモ

デモを準備しています…

スプラインドリー

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

カメラを、あらかじめ作っておいた曲線のレール(スプライン)の上に載せ、プレイヤーの進み具合に合わせてレールの上を滑らせるカメラの動かし方です。映画の撮影で、レールの上をカメラの台車(ドリー)が走るのと同じ考え方です。カメラが通る道を人の手で決めておけるので、壁にめり込まず、柱で人が隠れず、いつも見せたい角度から映せます。

ゲームでの使いどころ

  • 決まった道を進むゲーム:通路や谷を進む 3D アクション、横スクロールの 3D ゲームで、道に沿って最適な角度から映す。
  • レースゲームのリプレイ・観戦カメラ:コースの外側に張ったレールに沿ってカメラを走らせる。
  • イベントシーン:カメラが決まった道を通って舞台を見渡す演出。
  • レールシューター:プレイヤー自身がレールに沿って運ばれるゲームでは、カメラの位置そのものがレールで決まる。

しくみ

レールはカトマル・ロムスプラインなどの曲線 R(u)R(u)(u∈[0,1]u \in [0, 1])で表します。問題は、「プレイヤーがどこにいるとき、カメラをレールのどこに置くか」、つまり uu の決め方です。

  • 進み具合を写す:プレイヤーが通る道 P(t)P(t) もスプラインで表しておき、プレイヤーが道の何割まで進んだか tt を、そのままレールの位置 u=tu = t に使います。道とレールの対応を人が設計できるので、もっとも安定します。
  • 一番近い点:u=arg⁡min⁡u∣R(u)−p∣u = \arg\min_u |R(u) - p| として、レール上でプレイヤーに一番近い点にカメラを置きます。道を決めなくてよい反面、道が折り返す場所ではレールの反対側の点が急に近くなり、カメラが飛ぶことがあります。前回の uu の近くだけを探すと防げます。

どちらの場合も、曲線のパラメータは弧長でそろえておかないと、カメラがレールの場所によって速くなったり遅くなったりします。最後に、求めた位置へ指数減衰で近づけ、カメラをプレイヤーの方へ向けます。

実装のポイント

  • 近くだけを探す:一番近い点を探すときは、前回の uu の前後だけを探します。レールを数百点に分けた表を作っておけば、毎フレームの探索も軽くなります。
  • 向きも曲線で:カメラの向きを常にプレイヤーへ向けると、急に回ることがあります。レールの各点で「見る方向」や「視野角」も曲線として持たせ、補間する方法もあります。
  • オフセットと組み合わせる:レールの位置に、プレイヤーの横ずれに比例したずれを足すと、道幅のあるステージでも自然に追えます。
  • レールの作り方:レベルデザインのツール上で、道を見ながら制御点を置いて作ります。壁や柱に近づきすぎていないか、各点からの視線をエディタ上で確認できるようにしておくと便利です。

つまずきやすい点

  • レールの反対側へ飛ぶ:一番近い点を全体から探すと、道とレールの距離が同じくらいの場所で、カメラが一瞬で遠くの点へ移ります。
  • 速さのむら:制御点の間隔がばらばらだと、パラメータ uu と実際の距離が比例せず、カメラの速さが場所によって変わります。
  • 行き止まり・分かれ道:道が分かれる場所では、進み具合を 1 つに決められません。分かれ道ごとにレールを用意し、切り替えるときになめらかにつなぎます。

デモで試すこと

  1. 人が青い道を行き来し、外側に張った黄色いレールの上をカメラの模型が追いかけます。左下の小窓がカメラの映像です。
  2. 「道の進み具合をレールに写す」では、人が道の何割まで進んだかと、カメラがレールの何割にいるかが一致します。数値の「レール上の位置」を見てください。
  3. 「レール上で一番近い点」に切り替えても、ほぼ同じ映像になりますが、カメラの位置は「人に近いかどうか」だけで決まります。
  4. 「固定カメラ」にすると、人が遠ざかって小さくなったり、柱の陰に隠れたりします。赤い線(視線)が柱を通り抜けているときは、小窓で人が見えていません。
  5. 「カメラの追いかけ方」を小さくすると、カメラがレールの上を遅れてついてきます。

参考資料

Unity Cinemachine Position Composer ↗

分野全体の資料で、この項目を直接扱っているとは限りません。