32
Road to Stingray イイイイ イ1イ Stingray エエエエ エエエエエエエエエエエエエエエエ 、~ 3 11 エエ () 14 00 - 17 00 http://area.autodesk.jp/event/road_to_stingray_1/ エエエエエエ エエエエエエエエエエエ エエ エエ

[Road to Stingray] Stingrayで進めるアニメーションワークフローについて

  • Upload
    ueta

  • View
    1.676

  • Download
    2

Embed Size (px)

Citation preview

 

Road to Stingray イベント 第 1弾

~  Stingray エンジン、ゲーム開発のファーストステップ~

3 月  11 日(金)  14: 00 - 17: 00http://area.autodesk.jp/event/road_to_stingray_1/

フリーランス テクニカルアーティスト 上原 達也

 

◆Stingrayで進めるアニメーションワークフローについて

目次

1. Luaとノードベースで実現できる補助骨のリアルタイムリグ

2. NVIDIA PhysX でキャラクターの付属物を揺らす方法

3.  HumanIKの使いどころ

 

Luaとノードベースで実現できる補助骨のリアルタイムリグ

Luaとノードベースで実現できる補助骨のリアルタイムリグ

Lua? →スクリプト言語です。今回、値の取得・設定、計算に使います。

補助骨? →

水色の骨が補助骨になります。

「上腕と腕の 2本の骨だけでは、メッシュが綺麗に変形しない」→ 骨を増やして綺麗に見えるように

Luaとノードベースで実現できる補助骨のリアルタイムリグ

リアルタイムリグ? 補助骨ってアニメーションいらないんじゃない?  → ゲーム上でその都度計算すればいい!

橙色 アニメーションデータ あり水色 アニメーションデータ なし 

※リアルタイムリグに関する詳しい情報は、SQEX 佐々木隆典さん が  CEDEC2010 で話された「リアルタイムリグ   − DCCツールと実機で動作する補助関節のセットアップ」もご確認ください。http://cedec.cesa.or.jp/2010/program/VA/C10_P0090.html

Luaとノードベースで実現できる補助骨のリアルタイムリグ

手順

1.モデル、アニメーションをインポート。

2.補助骨に対して 「 Disable Animation」  (isAnimated=Fasle) を設定。

Luaとノードベースで実現できる補助骨のリアルタイムリグ

3. AnimController作成。

4.クリップ(アニメーション)を設定して再生される状態します。

Luaとノードベースで実現できる補助骨のリアルタイムリグ

今回試す補助骨の計算方法について

2つのベクトルのなす角を求めて、角度に応じて肘の補助骨を回転補正する

Luaとノードベースで実現できる補助骨のリアルタイムリグ

Maya 版

 ・骨のローカルマトリクスからベクトルを求め、AngleBetweenノードで角度を得る。

Luaとノードベースで実現できる補助骨のリアルタイムリグ

Stingray  Flow(ノードベース)版

 ・ FlowではMatrixが使えないのでPosition( Vector3)を使用。

「 Get World Position」というノードでワールド座標における

骨の位置を取得することができる。※ローカルの位置も取得できます。設定はローカル

のみ。

  

Luaとノードベースで実現できる補助骨のリアルタイムリグ

Stingray  Lua 版

・Matrixが使える。・デバッガでステップ実行できる。・ Flowノードがすっきり。

カスタム Flowノードの中身

Luaとノードベースで実現できる補助骨のリアルタイムリグ

補助骨だけしか使えない?

Luaとノードベースで実現できる補助骨のリアルタイムリグ

ポニテでやってみた。

MayaStingray

アニメーションは根元の骨だけ

Luaとノードベースで実現できる補助骨のリアルタイムリグ

まとめ

リギングスキルをゲームエンジンでも生かせる。

フレームレートの影響(速度など)を受けるリグは注意。

Maya上では、時間の設定が 30fpsでも 24fpsでも同じ挙動のリグを組む。 例:Mayaの設定が 30fpsなら (1.0/30.0)を DeltaTimeとして、

 加算されていく値に乗算する。Stingray上では DeltaTimeを取得できるのでそのまま乗算する。

Luaとノードベースで実現できる補助骨のリアルタイムリグ

メモ

・Mayaで動作を試して、 Stingrayで試して・・・というのは非効率すぎるので変換ツール必須。もしくは、Mayaと Stingrayで互換性のある汎用的なノードを作る方がよさそう。

・Mayaも Stingrayの Flowも標準ノードだけでは・・・リギング厳しい。

・ Stingrayで JointOrientは存在しない。(ピボットやスケールはまだちゃんと試してません)

 

PhysX でキャラクターの付属物を揺らす方法

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 

NVIDIA PhysX でキャラクターの付属物を揺らす方法

動機 マニュアルにはラグドールの設定方法が紹介されていたが 部分的に(揺れ物に)利用したかった。

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 「Mayaでのセットアップ方法」

注意点・Mayaの単位は「メートル」( PhysX設定時だけ)

モデリングとかアニメーションの作業は「センチメートル」で OK.・Maya2016では PhysXのプラグインのカプセルコリジョンに不具合があるっぽい。

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 「 Stingrayへの取り込み方」

キャラクターの Unit名と、Mayaから出力された 2つのファイル名を同じにしないと Stingrayに取り込めません。

ファイル名を同じにしたら、 Stingrayのアセットブラウザでキャラの Unitを右クリック、 Reimport を実行すれば自動的に取り込まれます。

Mayaから出力(PPK_m)

Unit (PPK_m)

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 「 Unit Editorでの設定」

  OFFにしておかないと、ゲームが始まった瞬間から物理が ONになってしまう。  ON/OFFは別で制御したい。

EnabledをOFF

NVIDIA PhysX でキャラクターの付属物を揺らす方法 「 Anim Controllerでの設定」

PhysXで制御される骨

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 「ステート(レイヤー)の組み方・切り替え方」

アニメーションの遷移部分。

物理の遷移はアニメーションの遷移とレイヤーを分ける。

※全身脱力(ラグドール)の場合はレイヤーを分けなくてもよい。

NVIDIA PhysX でキャラクターの付属物を揺らす方法

 「 Ragdoll State」

物理の ON/OFFを、2つの RagdollState の切り替えで行う。

※全身脱力(ラグドール)の場合は、通常のClipState(アニメーション)から RagdollStateへ遷移させることができる。

注意: RagdollState間の遷移は BlendDurationが効かない

NVIDIA PhysX でキャラクターの付属物を揺らす方法

まとめ

激しいアニメーションには向かない。 → 激しいアニメーションのときだけ 物理を OFF にする。

挙動の調整が大変。 → Maya上である程度確認できる。(それでも大変)

 

HumanIKの使いどころ

HumanIKの使いどころ

このゲームにおける使いどころを考えてみました。

HumanIKの使いどころ

LookAt

キャラクターの向き(顔と上半身)を補正

シーン内のギミック、オブジェクトに反応するといったことができそう。

HumanIKの使いどころ

Reach( Pull,Offsetなど)

キャラクター全身のポーズを補正画像では上半身を引っ張っています。下半身も僅かに影響。

HumanIKの使いどころ

まとめ

モーションデータを増やさずに表現の幅が広がる。

必ずしも必要というわけではないけれど、アイディア次第でいろいろできそう。

Maya の  HumanIK に慣れておくと、Stingray で  HumanIK の  Flow を組むのが楽になる。( Flowノードやパラメータの意味がわかる)

以上です