| 
1 「力感の自動補正機能」実装方法の検討
パントマイムの力感を伝えるノウハウ
開発テーマはテーマ名にある通り,3D-CGアニメーションの一分野であるキャラクターアニメーションにおいて「力が入っているように見える表現」を自動生成できるようにすることである.これはアニメーション用のデータに「微妙な時間差」や「微妙な動き」を追加する機能をソフトウェアに追加することである.これを実現するためには微妙なモーションを作成・調整することに特化したアニメーションツールを作るか,あるいは微妙な差異を他の大きな動きと同列に編集できるシステムを構築するか,まず選択する必要があった.
当初は開発労力を考え「微妙な動きに特化したツールの実現」を考えていたが,従来システムの上に機能を構築したのでは充分な性能が得られないと判断し,データ構造を根底から作り直すことにした.
2
既存アニメーションツールの問題点の洗い出し
従来のアニメーションシステムは静止画を前提としたCGシステムの上に構築されており,「アニメーション用」と銘打っているシステムでも純粋なアニメーション向けではない.さらにソフト自身の作りやすさや生産性を重視した結果,憶え切れないほど多くの機能が実装され,その上,大きい動きを作ることやモーションキャプチャシステムのような大掛かりなものとの連携には優れているものの,テクニック重視の設計で「パラパラ漫画」のような純粋にアニメーションを作る楽しみからは遠い存在になってしまっている.
また,「力感」をアニメーションに追加すると,いずれの場合もタイミングの量を増やすことになり,従来型の「時間合わせ→ポーズ付け」という手順でアニメーションを作っていると修正時の手間がねずみ算式に増えて行ってしまう.
3
アニメーションデータ要素“ReTeMo”の設計
ReTeMoシステム
本プロジェクトでは,自由で,「パントマイム」のような概念はあっても機能主導ではなく,ソフト自身は裏方に徹しながらも十分に高品質なアニメーションが作れるように設計した.中核をなすシステムをReTeMoと呼んでいる.「ReTeMo」とはRegion, Tempo,Movementという3つの言葉の最初の2文字を組み合わせたものである.Regionは「領域」を表す.Tempoは「時間」を表す.Movementは「変化値」を表す.これらはCGアニメーションに限らず,アニメーションを作る際の必須の要素である.本システムのReTeMoとは,それぞれのグループに属するクラスと,それを格納する3種類のtreeコンテナテンプレートから成るデータ構造であり,それらを連携させてアニメーションデータを作り出すエンジン部と対でライブラリを構成する.
「ReTeMo」は複雑化した現在のキャラクターアニメーション用の機能(キャラクターリグやノンリニアアニメーションなど)と同等以上の機能をシンプルなデータ構造で実現するためのものである.
「領域,時間,変化値」を表す3つのツリー構造と個々のデータで,タイミングを細かくずらしたり,何重もの階層構造をアニメーションデータで作ったり,従来のソフトウェアでは面倒だった作業を容易に行える.
※なお,データ構造の詳細に関しては,特許取得予定のため,ここでは割愛する.
4
表示システム
「Lob」のアニメーション表示には「OpenGL」を使用した.再委託先のトイメディアデザインの協力の下,開発を進め,モデルの回転,パーツを選択して画面上でドラッグすることによるKeyの入力等を行うことができる.他のソフトウェアで作成したモデルを読み込むことでモデルを表示し,同時にモデルが持つ階層構造をLinkとして取り込むことができる.呼び込んだモデルにアニメーションがすでについていた場合には,呼び込みと同時にアニメーションの再生が始まる.部位を選択するとその部分にワイヤーフレームが重ねて表示され,3D表示画面上でドラッグするとモデルのポーズを変えることができる.なお,アニメーションの再生中でもポーズの変更は可能であり,これにより実際に再生している状態で確認しながらのアニメーション付けが可能になる.
また,3Dオブジェクトをインタフェースとして表示させることもでき,現在は再生ボタン,逆再生ボタン,オブジェクト回転器等に使用している.今後さらに3Dオブジェクトを使ったインタフェースを充実させる予定である.
5
他ソフトウェアとの連携
当初は作成したモーションを他のアニメーションツールに持っていくことができる様,他アプリケーション向けの読込プラグインの作成を外部に再委託する予定であった.しかしながら,こちらのライブラリ構築も遅れ,また保存にXMLを予定していたにもかかわらず,先方がXMLに不慣れであったため,作業が進まず,XML保存部を他業者に委託し直して計画を見直した.その時点ではまだMayaというアプリケーション向けに読込プラグインを開発すると言う計画は変わっていなかったが,変更先でもXMLの作業が遅れたことから,XMLデータを介しての連携は不可能と考え,再委託先(トイメディアデザイン)から提供されたビューワが持つLightWaveモデルの直接読込機能を活かした形で実装を行った.予定とは大幅に変わったものの,連携の趣旨である他ソフトウェア資産の応用や,データ構造の違いを吸収する方法の検討・確立と言う点では一定の成果を出せており十分に代替になったと思われる.
特にLightWaveはモデルデータの持ち方がLobと似ており,その点は興味深かった.その反対にチャンネルの細分化は徹底しており,チャンネルのゆるい結合や遅延作成を旨とするLobとは明らかに異質であった.
6 保存,読込
このシステムの主要なデータ構造(ReTeMo)は機能の追加のために抽象クラスを多重継承する.
ファイルへのデータ保存も同様にして実現される.具体的にはまず,「save,load,postload」の3つの仮想関数を持つSaveObjクラスを「データクラス(各種ReTeMo)」で継承する.SaveマネージャクラスではSaveObj派生クラスを順繰りに呼び出し,それぞれのデータクラスに自分で必要なデータを読み書きさせる.
なお,開発当初は独自形式のテキストを書き出しデータの確認に利用していたが,最終的にはXMLを読み書きできるライブラリを実装した.XMLのタグ名には各クラスのクラスを使用し,タグ内の属性については各データクラスで「属性名」と「値」のリストを作成することで,実装の簡略化を図った.
XML読込にはXERCESというXMLパーサライブラリのSAXパーサを使用した.データ構造を規定するDTDも定義し,DTDで使用するネームスペースには開発者が登録した独自ドメインを割り当てた.
7 GUIの設計/実装
メニュー,ダイアログ類
当初はRegion,Tempo平面上にMovementをプロットする操作画面を考えていたが,当面はデバッグのしやすさもあり,データ構造と同じTreeViewを使用することにした.これはメモリー上に展開されているデータの状態がそのまま表示されるため,システムの仕組みを理解するのには最適である.またパラメータを直接操作して細かい調製もできるよう,ダイアログボックスだけでTree全体を巡回できるようにしてある.
GUIについて
当初は3Dオブジェクトを多用したインタフェースを予定していたが,デバッグのし易さや表示の軽さを考えて,当面はOSのAPI機能を主体とした操作系を開発することとした.将来計画としてデバッグ作業が収束して動作が安定してきたら順次,3D表示を増やす.
8
力感補正
クリックとタイミングずらし
「クリック」はこのシステム最大の目玉である.クリックとはキャラクターの動きに力強さを与える小さい動きのことだ.このシステムでは2つの方法でこのクリックをサポートする.1つはベースとなるタイミングチェーンの一部をくくりTempoを作って,そのTempoを再利用して「小さい動き」を実現する方法,もう1つは時間的には少しずつ,ずれているタイミングを1つのタイミングとして扱う方法である.後者はタイミングずらしであるが,クリックとタイミングずらしは同時に併用されることが多く,その場合はまとめてクリックと呼ばれる.
タイミングずらしの実態はふつうのTempoであり,複数のRegionに付けられたほぼ同一時間のタイミングをグループ化したものである.こうしたTimingは.タイミングズラシによるクリックはむしろ選択されたRegionのタイミングをずらす機能(GUI含)によって実現される.
一方,Motionの再利用により「小さい動き」を加えるほうのクリックだが,こちらは中身を持たない繰返し用のTempoおよびMovementの双方を用いる.
http://www.actzone.jp/mitou/
http://www.actzone.jp/Lob/
|