先日は、
■ ダイナミクス:リッジドボディー 【 Blender 2.82 】
にて、パーティクルでダイナミクスを使う事で、オブジェクトを飛ばし、コリジョンを用いることで、物体の干渉による反射や動作のコントロールについて触れました。Blenderでは、ダイナミクスを使ったモーションを作る事もできますが、メッシュに対して個別のモーションを適応することもできます。
オブジェクトですが、
のように正方形があった場合、
のよに下底を拡大すると台形になり、
のようにサイズを変更せず移動させると平行四辺形になります。モデルの生成は、こうした頂点の選択と移動で可能になっていますが、デジ絵で多用されるラスターグラフィックはピクセルの集合体なので、こうした処理が行えませんが、ドロー系ツールのようなベクターグラフィックツールだと、座標間を直線や曲線での補完(この技術は、ピクサーが開発したもので、サブディビジョンサーフェースもその一つです。そして、その技術はオープンソースで無償提供されています。)を行う事でオブジェクトが作られているので、アプローチが異なります。その為、ドロー系ツールと3DCGツールは頂点座標のコントロールで形状を作る事ができます。ドロー系ツールの場合、シェイプと言う単位ですが、3DCGの場合、三点及び四点で構成された面を一つとしたポリゴンで生成されています。(ちなみに、ドロー系ツールはベジェ曲線なので、頂点とハンドルで調整して座標間を曲線補完できます。これはGIMPでもパスを使った時に同じ操作方法になりますが、こうした仕様はラスターグラフィックだとマスクの生成で、ドロー系ツールではシェイプで曲線を用いる場合に使用します。)
とりあえず、形状が完成した場合、そのオブジェクトはメッシュ単位で扱うことができますが、
のように一つの形状は独立した座標を持っています。これがローカル座標になりますが、3DCGの場合、4種類の座標が存在します。
座 標
まず、3DCGは三次元空間になりますが、算数や数学で登場するグラフのように原点を中心として正と負の双方に延びる数列を持っています。これが三軸存在するので、空間座標を指定できるのですが、グラフを学ぶと最初に出てくる、軸の数値を示したもので座標を示す事になります。算数の初歩では、整数の増減を学びますが、この時に、数字が並んだ列が出てきます。ここで数字の変化を見て足し算や引き算がなぜその数字になるのか?を理解する事になりますが、ここで登場しているのが、1次元の数列です。その為、数列が一本しかないので、数値のみを考える場合に問題なく扱えるわけです。日常生活に孫座する数値の変化は十進数で、四則演算やその複合演算の場合、座標軸のように二つの数値で構成されるものではないので、この伊地知玄配列の数列上の数値だけで判断できます。等式の特性上右辺と左辺は一致するので、その数列上の数値が数式なのか数値なのかの違いしかありません。
これがグラフになると二つの数列があるので、二次元配列になりますから、数値は二つ発生します。これが平面空間の座標の考え方になりますし、中学校までの数学だと物理も含めてグラフ上の座標と言うのは、二つの数値で表示します。この条件で考えると、プログラミングを行う場合に、変数のXとYを用意しないとダメなのは同じですが、この場合の推移も二つの数値の変動で処理するように思われるかもしれません。ただし、高校の数学では、虚数(小文字のiで表記します。)が登場しますが、これを用いると、平面座標を一つの数式で示す事が出来、三角関数で平面軸の座標をラジアンでコントロールできるように虚数と指数を持つ数式で二軸の座標を示す事ができるようになります。
虚数は
■ i2 = -1
■ i = √-1
と言う特殊な数値になりますが、空間座標を扱うう上では便利なので、配列、行列、三角関数、微分と同様に使用します。
3DCGはベクターグラフィックなので、座標で指定した頂点(バーテックス)を直線補完した物でポリゴンが生成されていますが、この頂点座標を基準に処理が行われています。
■ グローバル座標
その空間座標ですが、空間自体の方角及び高さは変化してもらうと困るので、絶対的な定数としてズレない状態で存在する必要があります。つまり、3D空間上の摂理のような物になりますが、この摂理を示す三軸で構成された座標を 【 グローバル座標 】 や 【 ワールド座標 】 と呼びます。これは、
のように三つの軸がありますが、平面で見た場合、三種類の軸の向きが存在します。その為、製図などでは三面図で形状を作り、それを空間認識を行って立体的に考えることになります。3DCGでモデリングを行っているときには、
のような視点で見ますが、これは、製図だとパースと同じになります。
この空間を構成している三軸の座標がグローバル座標になります。
Blenderでは、視点変更ができるので、画像のように4つの始点で作業ができますが、ウインドウの分割とカスタマイズができるので、
のような4分割表示もできます。
■ ローカル座標
これは、オブジェクトの持つ座標になります。キャラクターオブジェクトを作ると、キャラクターの正面の概念がありますが、これは初期段階だとグローバル座標を基準としたときにには初期設定の方向になりあんす。これをグローバル座標を基準に動かすと、算数と数学のグラフと同じように直線移動が可能になります。ただし、この三軸の回転となると、垂直の軸で回転させた場合、原点にオブジェクトがある場合にはキャラクターオブジェクトの向きが変わるだけですが、原点から離れると、その原点からの距離を半径とした円周場を移動することになります。軸回転を選択すれば回転はしますが、グローバル座標の場合、前述のように原点で発生してもらいたい垂直軸を基準としたターンを原点以外の場所で行う事ができません。
つまり、グローバル座標で制御した場合、キャラクターオブジェクトは、三軸の座標の数値が0以外の場合においてキャラクターの軸回転を指定した場合、その場でターンすることができないわけです。
流石に、これでは使いにくいので、3DCGでは個別のポリゴンメッシュに個別の座標を与えています。これが 【 ローカル座標 】 です。
3DCGの場合、
のようにビューポート上ではオブジェクトを用いてシーンを作りますが、それぞれのオブジェクトに座標の概念があり、個別に三軸の座標を持っています。Blenderでは、 【 N 】 キーでシェルフを呼び出す事で、その座標を指定できますが、オブジェクトにモーションを付ける場合だと、ポリゴンメッシュの座標を基準にするので、ローカル座標をコントロールすることになります。
■ ビュー座標
3DCGでは、現実世界の写真や動画撮影と同じで、光がなければどうにもなりませんし、カメラがない場合には画像や動画をレンダリングすることができません。その為、3DCGでは、シーン構築時にライティングとカメラオブジェクトを用いたフレーミングを行います。
この時に、実写と同様に、カメラアングルやカメラワークを入れることになりますが、カメラですから、当然のように焦点距離の概念があります。また、デプスを追加する場合には、絞りを決めるので、実際のカメラで考える必要のある露出の条件がそろっています。シャッタースピードについては、モーションブラーを適応する場合に使用しますから、基本的にカメラの基礎知識もあったほうがその機能が何かを理解しやすくなります。ちなみに、モーションブラーは静止画と言うよりも動画で使う物になりますが、24F制作の場合、1/48のシャッタースピードで撮影する(というか、人工の光を含む場合だと、東日本だと1/50で西日本だと1/60にして光源のリフレッシュノートとフレームレートをシンクロさせる必要があります。こうすることで、信号を撮影したらちらつくような点滅している物が撮れたとか、夜の街並みが綺麗だったので、街路樹のある歩道沿いの店の光の中を歩きながら撮影したら、ひたすら、チラついていたとか、家で撮影したら点滅が酷くて、編集時に動画のプレビューをしていたら気持ち悪くなったとか、そう言った目で見えないし通常では発生しないようなおかしな点滅を拾わないようにできます。これは、環境に存在する点滅に対する対応なので、どのカメラでも同じなので、撮影時にはその条件に合わせて撮る事になります。)のですが、この場合、1/48ですから、少しブラーが入ります。これを入れることで、ハイスピードシャッターで撮った時のような紙芝居感がなくなります。
24Fだと動画のフレームをブラーのない写真のように取ってしまうとカク着いた感じになるので、ブラーを入れます。MikuMikuDanceでMMEを使う場合も、フレームレートが低いモーションを作った場合にはブラーエフェクトを追加することで動きを滑らかに見せることができます。
こうした、ブラーによる効果はフレームレートによって変わってきますし、花火や滝のような帯を引くような物を作るのではなく、指定したフレームレートでカクついて見える場合に使用します。こうした動画撮影時のブラーの度合いについても3DCGでは適応できるようになっていますが、Blender 2.8ではCyclesだけでなく、Eeveeでもできるようになっています。
オブジェクトを作るだけだと、グローバル座標とローカル座標だけの話になりますが、これを映像や動画で出す場合には、カメラオブジェクトを使うのですが、このカメラを原点とした座標が存在します。これが、
【 ビュー座標 】 になります。これは、 【 カメラ座標 】 とも呼ばれていますが、レンダリング結果を決める時にカメラをコントロールしますが、その時に見えている物はこれになります。
Blenderでは、
のようにカメラオブジェクトが最初から配置されていますが、カメラを追加した場合、現在のビューポートの始点を基準に奥に向かってカメラが配置されます。その為、ビューポートで始点を決定して、その後、カメラを追加すると、その視点でフレーミングを行う事ができます。
また、カメラオブジェクトは平行投影とパースの付いた物の他にパノラマも選択できますから、360度の素材もレンダリングできます。
■ プロジェクション座標
カメラオブジェクトを指定すると、カメラオブジェクトの焦点距離と指定された視点によって構図が決まります。この状態は、
のような感じになり、どのツールでもレンダリング結果として指定するカメラから見えている像の確認ができます。このカメラのフレーム内に存在する座標も3DCGには存在します。
3DCGは、前述のようにベクターグラフィックで、これを動画や画像にする場合には、ラスターグラフィックに変換することになります。この時にレンダーを用いることになります。レンダーについては、
で触れていますが、この時に、オブジェクトの投影を行っています。その投影時に作成されたクリップ空間の座標がこれになります。
■ スクリーン座標
これは、レンダリングするスクリーンの座標になります。
のようにレンダリングを行った場合のラスターグラフィックのピクセルの座標になります。
とりえず、Unityを使う場合もこの4つの座標走っておいたほうがいいのですが、基本的に、こう言った座標が存在します。
ちなみに、Open-GLやDirectXでは、
■ オブジェクト座標系・ローカル座標系・モデル座標系
(ワールドトランスフォーム・モデリング変換)
■ ワールド座標系・グローバル座標系
(ビュートランスフォーム・視野変換・ビューイング変換)
■ 視点座標系・カメラ座標系
(プロジェクショントランスフォーム・投影変換・
射影トランスフォーム)
■ クリッピング座標系・クリップ座標系
(遠近除算)
■ 正規化デバイス座標系
(ビューポート変換)
■ ウインドウ座標系・スクリーン座標系
の順で処理が行われています。
ポ リゴンメッシュを動かす
グラフィックを動かす場合、座標の変動になりますが、ポリゴンメッシュ自体を動かす場合だと、ローカル座標を変更することになります。
動画の場合、フレーム単位で状態変化が発生するので、映像のフレーム数の設定を行い、そのフレーム内でどう動くのかを指定することになります。この時にキーフレームを使うのですが、前述のように、映像はカメラオブジェクトで見えている範囲がレンダリングされるので、
のようにカメラビューで見た状態でどう言った変化にするのかを決めます。Blenderでカメラビューにする場合には 【 0 】 キーで変更できますが、この状態で、
のように移動すると、シェルフの上部のX軸の数値が変化します。ローカル座標が変化すると原点の数値から増減するので、数値の変化が発生します。この状態から、
のように移動するようなアニメーションを作る場合、
【 始点 】
【 終点 】
のフレームを指定する必要があります。この時にキーフレームを打って、そのフレームにおけるメッシュの状態を確定させる必要があります。
■ キーフレーム
まず、最初に始点を決めますが、1フレーム目に
を指定します。この状態にして、 【 I 】キーを押すと、
のようなキーフレームのメニューが出ます。この状態で、
の中から指定した変化に該当する物を追加することになります。
キーフレームを登録すると、
のようにタイムライン上にマーカーが配置されます。そして、キーフレームが追加されると、
のようにオブジェクトのプロパティーに色が追加されます。タイムラインですが、
のようになっており、右上のUIでモーションの再生や停止ができるのですが、 【 ● 】 のUIを押すと、自動でモーション登録が行われるので、変更したいフレームまで進んで、その場所で変化を入れると、モーションが追加されます。3DCGの場合、視点と終点の状態を指定すると、その間の情報は曲線で補間してモーションを生成します。ただし、動きが怪しい場合だと、中割りを入れて修正する必要がありますが、手付モーションの場合は、そう言った作業になります。
この状態で、フレームを勧めると、
のようにキーフレームを打った場所が緑の表示になります。これは変化を入れていない状態ですが、変化を入れると、
のように「オレンジの表示になります。これはキーフレームが確定していないが座標変化がある状態の表示になります。
意図したモーションを追加してここで確定させたい場合には、先ほどの工程と同じく、 【 I 】 キーでメニューを呼び出してキーフレー0無を登録することになります。登録をすると、
のように黄色い表示になります。キーフレームですが、状態の確認ができるようになっており、
のようにタイムラインは、2.79bの時とは異なり、ドープシートになっています。ドープシートでは、
のようにどう言った指定がされているのかの確認が行えます。再生すると、
のように間が補完されているので、その通りに動いてくれます。モーションの場合、アニメーションのタブで移動すると、
のような画面になりますが、左側の画面を変更することもできます。この時に画面上部のアイコンをクリックすると変更可能な項目が表示されます。
モーション関連だと、
辺りになりますが、ここでグラフエディタを選択すると、動きの変化を曲線で調整できるようになります。
ウ インドウの分割
Blenderではウインドウの分割が可能で、
のような画面から、上部や側面にカーソルを置き、⇔の形になった時に右クリックをすると
のようなメニューが出ます。これで分割をすることで、
のようにできます。これを繰り返すと、
のように目的に合った項目をレイアウトできます。今回は、新規で、
のような物を作ってみました。
ノ ンリニアアニメーション
NLAエディタは2.79からありましたが、これは、キーフレームで指定したモーションを動画編集のようにストップ(映画のフィルムの巻きの名称)のように使用することができます。
の状態が通常の始点から終点までのアニメーションですが、この位置を変更することで、そのフレームでの挙動を変更することができます。
前者は、先頭フレームですが、モーションは途中から始まっていますし、後者は、かなり進んだフレームで終盤のはずですが、序盤のモーションになっています。こうしたモーションの管理を、キーフレームの移動ではなく、挙動としてひとまとまりのアクションとして扱え、そのアクションをどこから発生させるのか?の指定ができるのがこの機能になります。
NLAエディタを拡大してみると、
のように平面Actionと言う名称になっています。
基本的に、ポリゴンメッシュの座標移動のみだと、今回のような処理になりますが、NLAエディタのアクションはリグの状態も含みます。その為、任意の場所からモーションを発生させるような処理を動画のクリップのように扱って編集する事ができます。
今 回使用した環境
■ Core i5 650
■ H55M-Pro
■ DDR 1333 2GBx2+1GBx2(DUAL CH)
■ Quadro K620(PCI Express x16 【GEN2動作】)
■ SATA HDD
■ WINDOWS 10 x64 (1909)
■ Blender 2.82 (x64)
■ GIMP 2.10.14 (x64)