[UE4ぷちコン 映像編2nd]振り返り:Oculus Quest2を用いた演技撮影
この記事は[UE4ぷちコン 映像編2nd]振り返り:まとめの子頁です。
概要
Oculus Quest2の動きをTake Recorderで記録
Sequencerでそれを再生しつつ演者に姿勢情報を転送
演者はそれをオフセット加工してControl Rigで腕と手を制御
注意
行き当たりばったりで実装して、
とりあえず動いたものをそのまま使って制作したので
色々な面で最適な実装とは程遠いと思います。
Oculus Quest2側の準備
Oculus Linkが動作するPCで
UE4で新規プロジェクトからVRテンプレートを選択し動作確認をした。
MotionControllerマップだとコントローラの確認もできる。
これですぐ使えるんだからホントすごい。
演技撮影
Take Recorderで記録する
動きの記録にはTake Recorderを使った。
VRテンプレートのMotionControllerマップでTake Recorderを起動し、
Levelに置いてあるVRPawnを対象に追加する。
この状態でVR PreviewでPlay中に録画開始ボタンを押せば記録される。
これですぐ使えるんだからホントすごい。
VRPawnカスタマイズ
この時点では、両手の動きが記録されない。
VRPawnが左右の手用のActor(MotionController)を実行時にSpawnしており、
それらはTake Recorderの追跡対象になっていない為だ。
今回は、VRPawn内に記録用のScene Componentを仕込むことにした。
そして、VRPawnが左右のMotionContollerをSpawnする際に
各Scene Componentの参照を渡しておき…
MotionContollerのTick内でHand MeshのTransformを
参照中のScene Componentにコピーさせた。
これで再度Take RecorderでVRPawnを記録すると、
Transformの変化が記録される様になる。
分割してTake撮影、マスターシーケンスで統合
通常の撮影ならカット事にTakeを分けて演技を取ればいいが、
今回は一人称で前半のオチ直前までがノーカットになる。
20秒程度の演技でも素人が一発で撮るのは無理だろうと考え、
カメラの動きをブレンドできそうな区間でTakeを分ける事にした。
ブレンド用ののりしろをつける感じ。
「吹雪の中を彷徨い歩き、建物を見つけて駆け込む」
「駆け込んで屋内を見回し、壁際に座り込む」
「座り込んでマッチを見つけ、火をつけて温まる」
「座ったままゆっくり顔を上げる」
「立って空を見上げる」
「陽気に歩く」
これらをそれぞれ別のTakeとして撮影し、
それらを統括して再生するマスターシーケンスを作る。
Take Recorderが生成したサブシーンを並べれば、
(つなぎ目はカクつくが)連続した映像ができる。
このやり方でTakeを撮る場合の要領
HMDのガーディアン領域における、演技を開始する位置と向きを決めておく。
言い換えれば、「静止モード領域の中心で演技する」という事でもある。
こうしないと、Take間のカメラ姿勢がずれるので補間がしにくくなる。
演技内で移動や回転しない。
位置や向きはSequencer側で付ける(後述)ので動かさないほうがよい。
最後に元の位置に戻るなら首振りなどはOK。
移動や回転してもいけなくはないが、補間が大変になる。なった。
「演技の開始と終了は次の演技と同じ姿勢にしておく」
と言い換えても良いかも。
演者Actor作成
記録した動きを再生するActorを下図のように作成した。
このActorのCineCameraが実際の映像になる。
赤矢印(ElbowL, ElbowR)は腕IKの肘向き制御用。
Skeletal MeshはFPSテンプレートの腕。
頭から手足が生えるのは本当はおかしいので、
フルトラッキング環境の場合は違うセットアップになるだろう。
ArmOfsLとArmOfsRはScene Componentで、
渡された手の位置情報をSequencer Track上で加工する際に使う。
映像を見ながら手の位置を微調整する為だ。
Skeletal Meshに対しては、
Control Rigで腕のIKと手の閉じ開き制御(マッチで温まる時の左手)が行えるようにしている。
実装はおかずさんのツイートとかおかずさんの記事を参照。
おかずさんをハードに参照すれば大体なんとかなる。
Skeletal Meshに適用するAnimation Blueprintは以下のようになった。
手の閉じ開きをRigにしている(Animation Sequenceにしていない)のは、実際に絵を見ながら調整したい為。
また、2つのRigを統合していないのは、
1つのRigに機能入れすぎると引数が増えまくるし
別Projectで一部分だけ欲しい時とかに探しにくくなるため。
映像Projectなので、実行速度の事はあまり考えていない。
マスターシーケンスから、演者にトラッキング情報を流し込む
Repeater Event Trackを使って毎フレーム以下の仕事をする。
まずDirector Blueprintが
再生中のサブシーン内で動くVRPawnのカメラと両手のTransformを取得し、演者Actorに渡す。
演者Actorは受け取って情報を加工する。
カメラ姿勢はカット間の補間処理を適用する。
受け取った両手Transformも、ArmOfsを参照して加工する。
SequencerでPreviewしながら手の位置をいじれるようにしている。
あとは左右の肘ターゲット座標もAnimation Blueprintに渡せばよい。
移動用Actorで移動、回転を制御
演者ActorをSequencer上で移動用のActorにAttachする。
あとは足踏み演技に合わせて移動用Actorを動かせばよい。
ものすごい大股になったりしてもあんまりバレない…と思う。
課題
Take Recorderの録画開始停止が面倒。モーションコントローラから制御できた方が良い。
とか書いてたら丁度おかずさんがツイートしてた。ありがたや…!
撮影時の手モデルに対して、小物アタッチと持ち手アニメ適用ができた方が演技しやすそう
Take間のカメラ補間は力業感がある。Customizable Sequencer Tracksでもっとまとめられたかも
参考:【UE4】Customizable Sequencer Tracks プラグインで独自トラックを簡単に作成 - とんこつ開発ブログ
壁際でかがんだ時に胴や足も見えた方が臨場感がありそう。
ただ、出したら出したで、時間当たりの情報量が多くなりすぎるような気もする。
あの場はマッチに集中させたいので、無くても良かったのかもしれない。
視聴者が酔わない演技ガイドラインを作る。
「落ちているマッチ箱の二度見」は何も考えずに入れてしまった。
翌日シーケンスを見た時に「これピッチ角の動き大きすぎるな」と気づいた。
(自分自身はカメラがどう動くか知っているので気づきにくい。特に当日は。)
びっくりさせる意図が無い時は、びっくりするような動きをしない方がいいだろう。
ちゃんとTake RecorderのFPS設定する
初期値の24FPSのまま一通り撮影してしまって、マスタシーケンス上で警告されてから気付いた。
マッチ点火する素早い動きのディティールがふっとんだ。
今回はVFXの都合もあって画面外に出しちゃったのでギリセーフ。
演者Actorの構造、トラッキング情報の転写はもうちょっと整理できる気がする
演技内容をさらに分割して、Modularにした方が編集しやすいかも。
言い換えると、各TakeをAnimation Assetのように扱えるようにしたい。
「しゃがんでマッチを拾って点火して暖まる」を分解して
「しゃがむ」「マッチを拾う」「点火」「暖まる」に分解する。
こうすると、各演技の尺調整がもう少しやりやすくなるはず。
自然なつなぎをどうするか、という問題もAnimationの補間と同じ対策ができるはず。
…なにか新しい発見をしたような気持ちになったが
多くのAnimation AssetもMoCapから作られることを考えると、当然の帰結である気もしてきた。
所感
手オフセットが本当に役立った。
実は吹雪の中を彷徨うシーンは建物を見上げるまで顔の前に腕をかざしていたのだが、
尺の調整でその時間がどんどん短くなっていって
開始とほぼ同時に建物を見つける絵になってしまった。
すると、視聴者は映像が始まってすぐ腕が下がる様を見る事になり、状況理解が追い付かなくなるだろうと思って
オフセットで腕を見えない位置に持って行った(モデル非表示でも良かった気はする)。
屋内で壁に手をつくのも、実はオフセットだけでやっている。
しゃがみ込む時にいきなり手が出てくるので、先に出しときたかった…んだけどいらなかった気もする。
UE4すごい
今回、一行もコード書いてない。VRも動作記録も全部機能が用意されてた。すごい。
振り返ってみると
「テンプレートをちょっと改造して作品を作ってみる」
という基礎的なステップを踏んだに過ぎない気もする。
以上