アニメーションの基礎

  • NURBSをポリゴンメッシュに変換
  • アニメーションの基礎
  • ターンテーブルの表現

ロボットアームをNURBSで作る」では、NURBSを使ったロボットアームを作成しました。

回転ジョイントを使用してポージングまで行っていました。
今回はこれをさらに進めて、アニメーションを行います。

チュートリアルの「アニメーション」で、歯車を使ったアニメーションでもいくつか解説しています。
これの復習も兼ねて、改めてアニメーションについて記載しました。

「アニメーション事始め」( https://shade3d.jp/store/marketplace/articles/startanimation/vol1.html )でもアニメーションについてまとめていますので、
こちらもご参照くださいませ。

NURBSをポリゴンメッシュに変換


Shade3D上では、NURBS形状が図形ウィンドウに表示される際に内部的にポリゴンメッシュに変換されます。
この作業のため、図形ウィンドウ上のモーション付けの操作やレンダリング開始前に時間がかかっていました。
これを解決するために、NURBSをポリゴンメッシュに変換します。
ブラウザでNURBSカーブまたはNURBSサーフェスを選択し、
ツールパラメータの「ポリゴンメッシュに変換」ボタンを押します。

「ポリゴンメッシュに変換」ダイアログボックスの「曲面の分割」は「普通」としました。

以下のようにNURBSサーフェスがポリゴンメッシュに変換されました。

なお、複数のNURBSカーブ/NURBSサーフェスを選択して「ポリゴンメッシュに変換」した場合は、
それぞれ別々のポリゴンメッシュになるため、
複数選択してからポリゴンメッシュに変換するほうが効率がよいです。

すべてのNURBSをポリゴンメッシュに変換して以下のようになりました。

配線のケーブルは自由曲面のままです。
この状態で回転ジョイントの操作やレンダリングを行うと、待ち時間なく快適に動作するのを確認できました。
ただし、配線のケーブルはアニメーションでは変形して追従しません。
これを対応する場合は「スキン」を割り当てる必要があります。
これについては今回のテーマ内で説明予定です。

ファイル名を変えてshdファイルに保存しておきます。

アニメーションの基礎

Shade3Dでは、Basic/Standard版でも一通りのアニメーションの機能を使用できます。
以降はすべてのグレードで使用できる機能になります。

一般的な3DCGは「キーフレームアニメーション」を行うことができます。
回転ジョイントだけを使用した簡単なシーンで説明します。

「mesh1」と「mesh2」のポリゴンメッシュの直方体があり、
この中央に「回転1」の回転ジョイントを配置し、その中に「mesh2」のポリゴンメッシュを入れています。

この回転ジョイントは軸を中心に回転する仕組みを持ちます。
「モーションウィンドウ」で時間経過での動きを指定します。
この時間経過を表示するインターフェースを「タイムライン」と呼びます。
0フレーム目で回転ジョイントの回転角度0、30フレーム目で回転ジョイント回転角度90、と指定したフレーム位置の情報を「キーフレーム」と呼びます。

キーフレームを指定した場合、その間のフレーム位置では動きが滑らかにつながるように補間されます。

このキーフレームを複数繋げていくことで、1つのジョイントに対するアニメーションを行うことができます。

これをモーションウィンドウで再生すると、以下のようになりました。

また、複数のジョイントを階層として組み合わせることで、より複雑な動きを行うことができるようになります。
以下は、キャラクタに対してボーンを組み合わせてアニメーションを行っている例です。

キャラクタでのアニメーションは複雑になりますので、これは後々チュートリアルでも解説予定にしています。

フレームと経過時間

タイムラインでは「フレーム」を単位として使用します。
3DCGでのアニメーションは、1フレームごとの静止画を連続して再生しているにすぎません。
Shade3Dでは、1フレームをレンダリングしてそれをアニメーションファイルに出力することで動画ファイルを作成します。

フレームは、1秒を指定のコマ数で分割したときの最小の要素です。
初期状態では、1秒を30フレームで分割しています。
2秒の場合は60フレーム分、3秒の場合は90フレーム分使用します。
初期状態では、1秒は30フレーム分です。
これは「フレームレート」と呼ばれます。
「30fps(Frame Per Second)」という表現もよく使用されます。「fps」は1秒間に再生するフレーム数の指定です。

モーションウィンドウの左上の白い三角をクリックすると、アニメーションの設定を行うウィンドウが表示されます。
ここで全体の「フレーム数」の指定。
「開始」「終了」フレームの指定。
「フレームレート」の指定を行うことができます。

「フレーム数」が90の場合は、0フレーム目から89フレーム目までの合計90フレームの指定になります。
「フレームレート」が30の場合、全体が90フレームのときは90/30=3秒のアニメーションということになります。

Shade3Dでモーションを与えることができる要素

Shade3Dでは以下の要素に対してモーションを与えることができます。

  • ジョイント(直線移動/回転/拡大縮小/均等拡大縮小/ボールジョイント/ボーン/光源/パス/変形/スイッチ)
  • カメラ

一般的に3DCGツールの場合は、すべてのノード(Shade3Dでのパートやポリゴンメッシュなど)に対して、
モーションの「移動」「回転」「スケール」の要素を持たせることができ、それぞれにキーフレームを割り当てることができます。
しかし、Shade3Dの場合は「ジョイント」に対してのみモーションを与えることができる点に注意する必要があります。
また、ジョイントごとに与えることができる動きが異なります。
ジョイントはツールボックスの「パート」-「ジョイント」から選択できます。

ジョイントの種類ごとの動きを列挙しました。

ジョイント : 直線移動

2点間の直線に沿って移動します。

ジョイント : 回転

指定の軸を中心に回転します。

ジョイント : 拡大縮小

指定の向きに沿って拡大縮小します。

ジョイント : 均等拡大縮小

指定の位置を中心に、均等に拡大縮小します。

ジョイント : ボールジョイント

指定の位置を中心に、移動/回転を与えます。

※ モーションウィンドウのタイムラインでは、モーションカーブは表示されません。

一般的な3DCGツールのノードでの汎用的なモーションに近い動きをします。
ただし、ボールジョイントで拡大縮小を使うことはできません。
自由に移動や回転を行うアニメーションに適しています。
キャラクタのモーション付けとして、スキンと併用する場合も多いです。

ジョイント : ボーン

指定の位置を中心に、移動/回転を与えます。
ボールジョイントに近いですが、ボーンの場合は2つ以上のボーンを組み合わせ、ボーンの向きも考慮してモーション付けを行います。

※ モーションウィンドウのタイムラインでは、モーションカーブは表示されません。

一般的な3DCGツールの汎用的なボーンに近い動きをします。
ただし、ボーンで拡大縮小を使うことはできません。
キャラクタのモーション付けとして、スキンと併用する場合も多いです。
ボールジョイントとボーンの違いは ?」もご参照くださいませ。

ジョイント : 光源

光源の明るさを時間経過により変化させます。

光源の「明るさ」に、親の光源ジョイント値を乗算した表現を行います。

ジョイント : パス

指定の線形状に沿った移動を行います。

ジョイント : 変形

形状の形や表面材質を滑らかに変形させます。
モーフィングのような用途で使用できます。

変形対象の形状は、2つ以上の形状で同一頂点数である必要があります。
なお、レンダリングしないと結果を確認できません。

ジョイント : スイッチ

複数の形状を切り替えます。

それぞれの形状の頂点数が異なっていても使用できます。

カメラ

オブジェクトカメラを使用時、カメラの焦点距離やフィルムシフトなどのカメラのパラメータや
カメラ位置をキーフレームとして指定できます。

カメラの向きの変更は、単体のカメラのモーション要素としては指定できません。
カメラの向きを変更する場合は、ボールジョイントにカメラを入れてキーフレームを与える必要があります。

ターンテーブルの表現

それでは、ロボットアームに戻ります。
今回は、ロボットアームを中心にカメラを周囲に旋回させる「ターンテーブル」の表現を行います。
これは「ウォークスルーアシスタント」という機能を使用します。

ツールボックスの「作成」-「光源/カメラ」-「カメラ」を選択してオブジェクトカメラを配置します。
このとき、カメラの視点をロボットアームを見下ろす位置まで離し、
カメラの注視点をロボットアームの土台を見るようにしました。

このカメラの「視点」「注視点」の調整は、
ブラウザでカメラを選択し、形状情報ウィンドウの「カメラ属性」で数値指定するのがいいかもしれません。

カメラウィンドウでは、作成したオブジェクトカメラを選択します。

メインメニューの「表示」-「ウォークスルーアシスタント」を選択します。
ウォークスルーアシスタントウィンドウが表示されます。

「終了フレーム」が150となっています。これはフレームレートが30の場合、150/30=5秒のアニメーションとなります。
「ターンテーブル」で「タイプ」が「カメラを回転」になっているのを確認し、「ターンテーブルモーションの作成」ボタンを押します。

これで、カメラウィンドウで選択されているカメラの注視点を中心にぐるっとカメラを旋回させるモーションが与えられました。
ブラウザでは、回転ジョイント内にオブジェクトカメラが入っている構成になります。
モーションウィンドウで再生すると以下のようになりました。

パストレーシングでアニメーションレンダリングした結果は、以下のようになりました。

レンダリング速度の最適化

アニメーションレンダリングの場合は、1フレームのレンダリング時間をいかに短縮するかが大事になります。
今回レンダリング時間短縮のため、以下の最適化を行いました。

  • NURBSをポリゴンメッシュに変換する
  • レンダリング設定の「視線追跡レベル」と「レイトレーシングの画質」の値を小さくする

このロボットアームくらいの3Dモデルでも、内部的なNURBSからポリゴンメッシュの変換に時間がかかってしまいます。
そのため、あらかじめポリゴンメッシュに変換しました。

レンダリング設定の「視線追跡レベル」と「レイトレーシングの画質」は速度に大きく影響します。
「視線追跡レベル」を5から3に、「レイトレーシングの画質」を50から30に下げました。

静止画として見ると少し品質が低くなるのですが、
640 x 480ピクセルのパストレーシング(イラディアンスキャッシュあり)で、41秒から11秒に短縮できています。
Windows10、12 x AMD Ryzen 5 3600 6-Core Processor(12スレッド)、メモリ32GBのそれなりに高スペックな環境で確認しました。

今回はここまでです。
Shade3Dのアニメーションの基礎について、カメラアニメーションの例としてターンテーブル表現の説明でした。
次回は、ロボットアームの関節を曲げたモーションを与える表現と、スキンについて説明予定です。

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