概要
プレイヤーの操作性だけがゲームではない。ストーリーを進行させていく上で欠かせないイベント、スピーディーな操作を要求される場面等において、カメラの位置や角度といった設定は大きな意味を持つ。
決めポーズをとったときにこの角度から表示する、といった処理を連続して行うのは以外にまんど臭いものである。
今回は、モーションを利用してそれをどうにかできないか研究する事にする。
面積、ではなく免責
おちゃっこ神はE3Dにリアルタイムレンダリングムービー作成機能を追加する意向を持っておられる。
E3Dでカメラワークの設定などが後々利用可能になった場合、この研究の存在価値そのものが危ぶまれる可能性があるので、実装するなら早めに実装しておくように。
手順
- カメラの注視点となるべきモデル(主役)を用意する。
- あらかじめ主役にカメラの基準点、カメラの向きを示すためのボーンを一つずつ、計二個追加しておく。
- この二つのボーンは、他のボーンと親子関係を持たないほうがやりやすいと思う。
- 主役にボーンをつける。
- カメラ用ボーンの位置をぐりぐり動かして最適な角度を模索
- 描写前に、カレントのモーション番号、フレーム数よりカメラ用ボーンの位置2点を求める
- 2点のベクトルを求め(おわりひくはじめ)、カメラをセット。
- 2点の内一点を注視点として設定しても同じ事・・・だと思うのでそれでもいい。
- よしなに描写する。
このような手順により、キャメラがうまい具合に移動してくれると思う。
なんだか以前にも似たような記事を書いた気がするが、ノリとしてはこれに近いモンがあるのではないだろうか。
実行
準備
キャメラの被写体となるモデルに、このようなボーンを追加しとく。親子関係は元のモデルのボーンとは関わりないほうがすっきりするんじゃないかと思う。
これは、カメラの座標、向きをそれぞれ決めるためのボーンだが、別の方法で算出できるならどちらか一つでもいいだろう。今回は向きもモーションで制御してみる。
次に、よしなにモーションをつける。このとき、このカメラのボーンはとりあえず無視しておく。
ボーンが付け終わったら、あとはこのボーンを移動拡大回転しつつ設定する。
ソース
説明するまでも無く中身は至って簡単。上から見ていくと、オブジェクトの読み込みやライトの設定などがあるので適当にツかんでおいてくれ。
カメラの移動ルーチンのところで、現在のフレーム番号から各種ボーンの位置を取得し、中止点と位置座標として設定してあげれば完了。サンプルは画像の下。
evcamera.zip
問題点や改善案など
カメラが移動した分だけキーフレームが増えてややこしい
この一点のせいでこの案はボツになるところだったが、E3Dのバージョンアップでボーンごとにキーフレームを打てる様になるのでなったのでこの問題は解決された。
座標を別の方法で求める
注視点を自機の座標、別のボーン位置などから算出すれば、常に自機のまわりをクルクルまわるカメラがワークが出来上がる。逆に、注視点のみをモーションで制御して、珍妙な動きを作り上げるのも面白いかもしれない。
俺は両方とも計算で出せるって?この企画の存在意義がなくなっちゃうので内緒だよ!?