カメラにキーフレームを与えて動画を完成させる

  • レンダリングでのちらつきを抑える
  • カメラにキーフレームを与えて動画を完成させる

前回までは、ロボットアームのモーション付けまでを解説していきました。
今回は動画の作成でストーリーを持たせていきます。

レンダリングでのちらつきを抑える

前回のレンダリング動画では、ちらつきが出ていました。
これをまず解決していきます。

この現象は、レンダリングがパストレーシングの場合に起きやすいです。
レンダリング設定の「大域照明」で「パストレーシング」を選択した場合、間接照明の表現のためにランダムに光が拡散します。

「イラディアンスキャッシュ」チェックボックスをオフにした場合、以下のように高周波ノイズが出た状態になります。

イラディアンスキャッシュはこの高周波ノイズを滑らかに補間します。
1枚の静止画の場合はあまり気にはならないのですが、連続した動画の場合にこのノイズがちらつきにつながることになります。

「レイトレーシングの画質」の値を上げた場合

解決策としては、レンダリング設定の「その他」タブを選択して「レイトレーシングの画質」の値を上げるという手段があります。

ただし、「レイトレーシングの画質」を上げるとレンダリング時間がかかってしまいます。
「レイトレーシングの画質」を100にしてレンダリングした場合、1フレームのレンダリングは約55秒かかりました。
「レイトレーシングの画質」を40にしてレンダリングした場合、1フレームのレンダリングは約11秒かかっています。
以下の動画は「レイトレーシングの画質」を100としました。
150フレームで総レンダリング時間は2時間37分37秒(9457秒)となりました。

これでもまだちらつきが見えます。
動画の場合は、「レイトレーシングの画質」を上げてもちらつきはやはり出てしまうことが多いです。

大域照明を使用しない場合

このロボットアームのシーンは、地面の板とロボットアーム以外の形状はありません。
間接照明があまり影響しないシーンとなります。
一方、部屋の中など壁に囲まれたシーンの場合は間接照明の影響が大きくなります。
現状はShade3Dでは「大域照明を使用しない」というのが、ちらつきを抑えてかつレンダリング時間を短縮する場合はベストかと思われます。

大域照明を使用しない場合は背景のIBLには頼れないため、
代わりにいくつか面光源を配置することにしました。
面光源を三点照明として3つ配置しています。

面光源は「可視」にしたほうがより現実に近づきます。

金属的な映り込みではこの面光源の「可視」でハイライトが表現できるため、重要な要素になります。

三点照明については「静物画のシーン (光源とカメラを配置)」もご参照くださいませ。
また、無限遠光源の「環境光」を0.1としました。
環境光を使用することで、光が少し回り込んだような表現となります。

レンダリング設定で「大域照明」を「無し」にして「レイトレーシングの画質」40でレンダリングします。
「手法」は「パストレーシング」のままとしました。

レンダリング時間は5秒になりました。
これをアニメーションレンダリングしました。
150フレームで総レンダリング時間は13分19秒(799秒)となりました。

左下の土台の映り込みで少しちらつきが見えますが、全体的なちらつきはかなり抑えられました。
「大域照明」を使用した場合には劣りますが、ちらつきの軽減とレンダリング速度の両立ではいい落としどころになると思います。

その他、レンダリング時間を短縮するための手段

レンダリング時間を短縮するための手段として、レンダリング設定の調整のほかは
「PBRマテリアルを使用しない」のが有効になります。
PBRマテリアルは、レンダリング時に「反射」と「透過・屈折」が両方とも行われるマテリアルになります。
Shade3Dは「反射」と「透過・屈折」の両方がある場合、レンダリング速度に大きく影響します。
PBRマテリアルを使っている限りはここは避けられません。
そのため一部の形状の表面材質を「Shade3Dマテリアル」に戻し、完全に反射しない場合は反射値を0にする、
完全に透過しない場合は「透明」を0にする、などの調整が有効です。
ただし、マテリアルの質感がリアルではなくなるためここではこの方法は説明しません。

動画にストーリー性を与える

現状はカメラの定点でのレンダリングのため、面白みがありません。
ここで、カメラを移動させてストーリーのあるアニメーションにしていきます。

動画のストーリーを考える

ざくっとにはなりますが、どのような動画にするか考えていきます。
以下のような流れの動画を作ることにしました。

  1. カメラ : 上からロボットアームを見下ろした視点から、真正面の視点に移動
  2. カメラ : ロボットアームを中心に回転(ターンテーブル)
  3. カメラ : ロボットアームの下部にズーム
  4. ロボットアーム : ロボットアームのモーション開始
  5. カメラ : ロボットアームの先端にゆっくり移動しつつロボットアーム全体を表示

大きく、カメラが動く部分とロボットアームが動く部分があります。
「ロボットアーム : ロボットアームのモーション開始」については、前回キーフレーム割り当てしたモーションをそのまま使用します。
カメラは複数の動きがありますが、途切れずに連続しています。

ロボットアームのモーションをファイル保存

現在のロボットアームのモーション(キーフレーム情報)をいったんファイルに保存します。

ロボットアームのモーションのルートとなるジョイントを選択します。
ここでは「土台」の回転ジョイントがその対象になります。
モーションウィンドウを表示し、キーフレームをすべて矩形選択します。
モーションウィンドウ右上の「保存」ボタンを押して、「ロボットアームのモーション.shdmtn」というファイルに保存しました。

shdmtnファイルには、「選択したジョイントの選択された範囲のキーフレーム情報」が保存されます。
同じジョイントを選択して、モーションウィンドウの「読込」ボタンを押してshdmtnファイルを読み込むことで、
同一のキーフレームを割り当てることになります。
この際、ジョイントの階層構造が保存前と読み込みで同じであることが必要条件になります。

ロボットアームのモーションを削除

カメラ中心のモーションを与えていくため、いったんロボットアームのキーフレームを削除します。
モーションウィンドウですべてのキーフレームを選択し、モーションウィンドウ上の「-」ボタンを押します。

これで、ロボットアームのキーフレームが削除されました。

ロボットアームの0フレーム目のポーズを指定

ジョイントモードに移行し、0フレーム目で初期のポーズをキーフレームとして登録しました。

カメラが動いてロボットアームにフォーカスが移るまではこのポーズを採用することとしました。

カメラのモーションを作成

1つのカメラに対してキーフレームを与えていきます。

はじめに、モーションを割り当てるカメラを用意します。
カメラ単体では移動と回転のモーション付けが難しいため、カメラをボールジョイントに入れて扱うことにしました。

「ツールボックス」の「作成」-「光源/カメラ」-「カメラ」を選択して図形ウィンドウでドラッグしてオブジェクトカメラを配置します。

-Z方向が正面になるようにしました。
次に、「ツールボックス」の「パート」-「ジョイント」-「ボールジョイント」を選択して、ボールジョイントを配置します。

ブラウザではボールジョイント内にカメラを入れるようにしました。

統合パレットのカメラウィンドウで、対象のカメラを選択します。

これで前準備ができました。
このときのカメラの親のボールジョイントを使用して、カメラのモーションを与えていくことになります。

カメラ : 上からロボットアームを見下ろした視点から、真正面の視点に移動

「カメラ : 上からロボットアームを見下ろした視点から、真正面の視点に移動」のキーフレーム割り当てを行います。
0フレーム目で上から見下ろした視点にしています。
ジョイントモードでボールジョイントを移動/回転させて真上から見下ろすように動かしました。

注意点として、Shade3Dでは完全な真下または真上(-Y向き/+Y向き)を向くことはできません。
少しの向き変更でY軸を中心にぐるっと回転してしまう現象が起きます。
カメラのモードを「フリー」にすると解決しますが、フリーの場合はカメラの回転が定まりにくくなり操作が難しくなります。
60フレーム目は斜めから見下ろした位置に移動しました。
ジョイントモードでボールジョイントの移動と回転を使って位置を変更しています。

120フレーム目で-Z方向に近い視線に動かしました。

これらをプレビュー再生すると以下のようになりました。

キーフレーム間のモーションは、滑らかに曲線的に補間されます。

カメラ : ロボットアームを中心に回転(ターンテーブル)

次に120フレーム目から「カメラ : ロボットアームを中心に回転(ターンテーブル)」の動きを付けていきます。
このとき、10フレームだけ停止して、130フレーム目からターンテーブルの動きを入れることにします。
カメラの入ったボールジョイントが選択されているのを確認し、モーションウィンドウの130フレーム目に移動、
「+」ボタンを押してキーフレーム登録します。

これで、130フレームは120フレームと同じ姿勢でキーフレームが与えられることになります。
ターンテーブルは原点にY軸中心の回転ジョイントを配置し、この回転で表現することにしました。

ブラウザでは、回転ジョイント内にカメラのあるボールジョイントを入れています。

ここで、ボールジョイント時のキーフレームに合わせて、回転ジョイントの0フレーム目と130フレーム目にキーフレームを登録しました。

200フレーム目に移動し、回転ジョイントを-180度回転させてキーフレーム登録しました。

なお、タイムラインが長くなる場合はモーションウィンドウの左上の「シーケンス」の下の「-」「+」ボタンを押すことで、
タイムラインの表示幅を調整することができます。

ここまでで以下のようなモーションになりました。

カメラ : ロボットアームの下部にズーム

以降は回転ジョイントは使用しないため、ボールジョイントのキーフレームを登録していきます。
「カメラ : ロボットアームの下部にズーム」は、カメラをロボットアームの下部に近づけています。

ジョイントモードで250フレーム目にキーフレームを登録しました。

モーションは以下のようになりました。

タイムラインを長くする

このロボットアームのアニメーションは長くなるため、タイムラインを長くしておきます。
モーションウィンドウの左上の白い三角をクリックして、アニメーション設定を表示。

「フレーム数」「終了」の数値を大きくします。

ロボットアーム : ロボットアームのモーション開始

ロボットアームのモーションは、「ロボットアームのモーション.shdmtn」として保存したファイルを読み込みます。
また、カメラをズームするタイミング(200フレーム目)でロボットアームを動かすことにしました。
ロボットアームのルートの回転ジョイント(土台)を選択し、
モーションウィンドウの200フレーム目に移動します。

モーションウィンドウ右上の「読込」ボタンを押し、はじめの方で保存した「ロボットアームのモーション.shdmtn」を指定します。
以下のように200フレーム目から5キーフレーム分が読み込まれました。

土台の回転ジョイントはすべて揃えておきたいため、モーションカーブを上下にドラッグして0フレームと同じ回転値にしていきました。

モーション再生すると以下のようになりました。

カメラ : ロボットアームの先端にゆっくり移動しつつロボットアーム全体を表示

再びカメラのモーションに戻ります。
「カメラ : ロボットアームの先端にゆっくり移動しつつロボットアーム全体を表示」の動きを与えていきます。
カメラの入ったボールジョイントを選択します。
ジョイントモードにして、透視図を見ながらボールジョイントを移動させて350フレーム目にキーフレーム登録しました。

これは、カメラをアームの先端に平行移動するような動きになります。
ゆっくりとカメラを引いていき、500フレーム目で全体が収まるようにしてキーフレーム登録しました。

モーション再生すると以下のようになりました。

合計500フレームとなったため、アニメーション設定で「フレーム数」を500、「終了」を499としました。

これで、キーフレーム割り当てが完了したのでファイル保存します。

レンダリング

アニメーションレンダリングすると以下のようになりました。

全体で500フレームあるため、1フレームのレンダリング時間をいかに短縮するかが大事です。
このシーンの場合は、大域照明を省き1フレームは約5秒でレンダリングするようにしています。
実際のレンダリング時間は、500フレームで3084秒(51分24秒)となりました。

以上で「ロボットアームを動かす」は完了です。
3DCGツール側は動画はあくまで素材として用意します。
動画編集として合成したり効果を加えたりする「コンポジット」と呼ばれる作業は、実際は別ツールで行われることになります。

Shade3Dでのアニメーション/モーションについては、まだまだ覚えないといけないことが多いため、
それらについては後々解説を入れる予定です。
次回は別のテーマに入ります。

カテゴリー: ロボットアームを動かす