|
プロローグ ここでは前述フェイシャル・アニメーション(Shape)の設定を踏まえた上で 基本となる 母音+ん 簡単にアニメーションを設定できるカスタムなプロパティーページを作成してみましょう。 |
カスタムプロパティセットウィザード では、独自(カスタム)のプロパティーのウィンドーを作成するのですが、便利なウィザードという機能を使いします。
かなりの部分まではプログラマーさんに頼まなくても自分でページを作成できる、というものです。 最初に キャラクターが全て入っているMODELノードを選択した状態から始めます。 ファイル > プラグインマネージャーから、
ユーザールートのプラグンフォルダーを右マウスボタンクリック > 新規作成 > プロパティー を選択します。 すると、こんな作成用のPPGが表示されます。
ここから色々と作り込んでみましょう。 |
カスタム・プロパティーの作成 パラメータの追加タブに移り、パラメータータイプの右下▼から ボタンを選択し、名前/ラベルに
Futu、A、I、U、E、O、N を作成します。(残念ながら日本語は記入しない方が良いです。) 次に、レイアウト(オプション)タブに移ります。
右欄(パラメータ)A・ I・ U・ E・ O・ Nを各個別に選択して、[追加] ボタンを押すと、 左欄(レイアウト)に各パラメータが追記されます。 グループ名を作成します。下のグループ化 ; 名前欄 にグループ名を記入し、その右にある[グループの追加] ボタンを押します。 Futu ・A・ I・ U・ E・ O・ N が Group と Row の中括弧内に入るように、 下部にある[上] [下] ボタンを活用して、パラメータの記述位置を修正します。 [プロパティー生成] ボタンにを押すと下図のようなPPGが作成されます。
この時点では何も起こりませんが、 ボタンを押せるページとそれのソースであるVBSファイルがスクリプトエディター上に表示されます。 ここまでのVBSファイルです。サンプル >> Emi_AIUEON-VBS.zip |
このカスタムなPPGについての考察=自動認識型プラグイン この時点で、新しく作成したPPGは選択したMODELノード以下にオレンジ色の[C] ノードで存在します。
ダブルクリックすればPPGが開きます。 作成されたプラグインは、自分のユーザーディレクトリ-下のバージョン名 /Application/Plugin内にVBSファイルとして保存された
自動インストール型のプラグインになります。 このPPGを他のユーザーにも使用させたい場合は、このプラグインも配布する必要がある事、注意してください。 また、この時点でウィザードのページを閉じていまったとしても(シーンの保存した状態から、読み込みしてみると)
SDK_Wizardsというモデルノード以下に保存されており、その中の CPSetWizardノードを開くと 閉じる前の状態の作成途中の設定ページが復帰されます。 消してしまったり、別のモデルの作成したカスタム PPGを設定したい場合。
自動認識型プラグインなので、作成した VBSファイルがユーザーディレクトリ-下のバージョン名 /Application/Plugin内にあれば プラグインマネージャーに自動的に認識されています。 そうしたら、設定したい Model などを選択した状態で、 プラグインマネーシャーを開き、設定したいカスタムプラグインを右マウス選択 > プロパティーの作成でオレンジ色の PPGがあわられます。 ダブルクリックすれば、PPGが開きます。 ここまでのことを知っていれば、何も恐れるものはありませんよ。 |
よりグラフィカルなカスタム PPG=シノプティックビューの活用 今回、リップシンクには上記ボタンのPPGで事足ります。
この部分はより複雑になりますので少し高度ですが、カスタムの PPGにグラフィカルなUIを作成出来ないかのサンプルになります。 この原型になったサンプルは、SDKワークグループ(C:\Softimage\XSI_7.***\XSISDK\examples\workgroup)内の
Addons\PPGDemos\Application\Plugins 内 embeddedsynoptic.vbs から応用したものです。 上図のような絵とマウスポインターで色が変わるボタン領域の設定は、シノプティックビューなのです。
つまり、カスタムPPGの中に HTML形式のシノプティックビューを入れて表示・操作しています。 シノプティックエディターを開きます。 表示 > 一般 > SynopticEditor です。
ファイル > ファイルからイメージを読み込むで画像を読み込み、絵の領域設定とリンク先、詳細に記述をします。
既にシノプティックのHTMLがある場合は、ファイル > 開で既存のものを表示出来ます。 上図 [スクリプト] と書いてあるボタンを押すと、スクリプトのページになり、Subコマンドの間にログメッセージを表示するという仮の記述をしておきます。
これで、普通と書かれている領域をマウスでクリックすると、スクリプトエディター上に' INFO : Tsujyo と表示されます。 で、出来上がると、こんな HTML文になりました。ここまでのサンプル >> Emi_AIUEON-HTML.zip
マウスのカーソルがボタン領域に来ると色が変わるのは、
設定画像に _h が付いた画像を用意すると、その絵になる仕組みです。例;Emi_face1.jpgならEmi_face1_h.jpgという画像を用意します。 カスタムPPGのVBSに追記しシノプティックを表示させる =Emi_AIUEON Synoptic Plugin 既に上記ウィザードで作成してある Emi_AIUEON.vbs に追記し、
作成したシノプティックビューの画像部分をカスタム PPG内に表示するようにします。 上記までに作成してあったプラグイン=VBS である Emi_AIUEON.vbs を Emi_AIUEON_synoptic.vbs としてコピーして使います。 保存先も同じ所です。 変わったところは、名前である ”Emi_AIUEON Synoptic Plugin” と シノプティック用の HTMLがある場所(Path)とPPG内で表示される場所のグループの中括弧内の記述です。 シノプティック用の HTMLは、このプラグインと同列の synoptic というディレクトリー内の Emi_AIUEON.htm であると記述しています。 function ApplyEmi_AIUEON_Synoptic_Execute(target) 内の処理はプロパティをオブジェクトに適用して、ビュー内に表示するための処理です。
(Emi_AIUEON.vbs と同じ所はグレー色です ↓)
で、ここまでの VBSです。サンプル >> 0_Emi_AIUEON_synoptic.zip |
[A] のボタンを押すと ”あ” のシェイプにする=シェイプの Weight との関連付け ここで再度、ShapeManager と Mixer の関係を確認しましょう。
アニメートタブ内の ”あ” のスライダーを 1 にすると、AnimatiomMixer 上にある ”あ” の Shape用のClipが 1 になるのが確認できます。 つまり 1 とは、この ShapeClip の Weight値が 1 になる事を意味し、 SctiptEditor で Log を見ると以下記述になっています。 SetValue "Model_Emi.Mixer.Mixer_Shape_Track.shape_ClusterClip.Mixer_Shape_Track55._01-aa_Clip.actionclip.weight", 1 ということで、カスタムPPG上の ”A” のボタンを押した時、上記記述が実行されて 1 になると ”あ” になります。他は 0 にします。 余談; ”い” が2つあるのは、 ”い” の時、歯が見えないのを別途用意したからです。
つまりスクリプトでは、
[Futu] ボタンを押したら上記設定したいクリップのウェイト値が0 、
[A] ボタンを押したら aa_ のクリップのウェイト値だけが1、 ・・・・・となるように作成すれば良いく訳です。 既存のプラグインを編集する時は、プラグインマネージャー内で編集したいプラグインを選択した状態で > 編集 を選ぶと
スクリプトを編集するテキストエディター(か、スクリプトエディター)上に内容が表示されます。
となりますね。
書き換えたスクリプトは、ファイル > 保存をし、
PluginManager で再ロード、CPPG上で右マウスクリック > 更新をしてください。(念の為両方とも) ではうまくいきますかね。
[E] のボタンを押すと ee_ のクリップのウェイト値が 1 になり、で、 ”え” の口になりました。 |
シノプティックビュー部分の ”あ” 領域を押すと ”あ” のシェイプにする=上記と同じ記述のコピー ここは上記記述とまったく同じです~。
Notepad などお持ちのテキストエディターで HTML を開き、sub の間にクリップのウェイト値をセットするようにします。
では、うまくいきますかね。
"あ" の領域を押すと aa_ のクリップのウェイト値が1になり、で、”あ”の口になりました。 |
キーフレーム値として保存 ここまで来て、気が付きましたか?で、このウェイト値のキーフレーム保存は??と・・・・
そうですよね。アニメーションなんだからキーフレームで値を保存せねば。 ではボタンを追加しましょう。 [SaveKey] [ClearKey] というボタンを用意して 今いるキーフレームでその時設定されているウェイト値を保存/やっぱやめた(=Remove ね)を実現しましょう。 またウィザードから作成するのではなく、もうスクリプティング追記してしまいましょう。 まずは ”あ” の口用の aa_ シェイプクリップのウェイトが 1 の時、キープレームを登録してみます。(カーブアイコンをクリックして赤色になる) すると、スクリプトエディター上の Log は SaveKey "Model_Emi.Mixer.Mixer_Shape_Track.shape_ClusterClip.Mixer_Shape_Track55._01-aa_Clip.actionclip.weight", 1 もう一度、カーブアイコンをクリックしてキー登録を解除すると(カーブアイコンをクリックして緑色に戻る) RemoveKey "Model_Emi.Mixer.Mixer_Shape_Track.shape_ClusterClip.Mixer_Shape_Track55._01-aa_Clip.actionclip.weight", 1 (最後の値はキーフレーム数です)
となります。なーんだ、でしょ。最初の単語が、 SaveKey か RemoveKey かだけしか違いがありません。
ボタンを追加する記述は、function Emi_AIUEON_Synoptic_DefineLayout( ctxt ) 内 に ボタン追加の記述 oLayout.AddButton "SaveKey" と oLayout.AddButton "ClearKey" を入れます。 そして、 [SaveKey] [ClearKey] ボタンを押した時の動作としては上記スクリプトエディターの Log 通りなんですが、 1つ厄介なのはその時のキーフレーム数をという意味で行の最後の所は CurrentFrame と書きます。 つまり、 SaveKey "Model_Emi.Mixer.Mixer_Shape_Track.shape_ClusterClip.Mixer_Shape_Track55._01-aa_Clip.actionclip.weight", CurrentFrame RemoveKey "Model_Emi.Mixer.Mixer_Shape_Track.shape_ClusterClip.Mixer_Shape_Track55._01-aa_Clip.actionclip.weight", CurrentFrame を、あ、い、う、え、お、ん 分記述します。
では、うまくいきますかね。
5フレーム目に移り [U] のボタンを押しと uu_ のクリップのウェイト値が 1 になり、で、 ”う” の口になりました。 [SaveKey] のボタンを押してその状態のキーを登録できました。 |
シェープクリップ内のウェイト値 Fカーブ さー試しにキーでも打って、動かそうとしてふとウェイト値のカーブを見ると気が付くはずです。
キー登録したフレーム数間に隔たりがある場合、例えば 6フレと 10フレ、その間をウェイト値がブレンドしてしまいます。 この場合は ”あ” から ”う” まで徐々に変化してしまいます。 ファンクションカーブを見るとウェイト値のカーブはスプライン補完であるからだと理解出来ます。
これをコンスタント内挿補完にしたいと思います。 1フレーム目に普通の口の形で キーを登録します。
アニメーションエディターを開いて、1フレーム目のキーを 0フレーム目のキーとして移動しておいて
カーブ > コンスタント内挿補完にします。これを あ~ん まで行います。 次からはカーブがコンスタント内挿補完でキー登録されていきます。
|
という訳で、ここまででも長くなってしまったので、実例は次回へ 次回はリップシンクアニメーションを予定しております。 乞う、ご期待!!
|