プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
パーティクル01
パーティクルの練習
粒子が上昇するシンプルなパーティクルモデルを作成した。粒子はポリゴンのようだが、XNAで動くのか?



◎フォース

フォースとは、自然な動きをシミュレートするためのコントロールオブジェクトです。Softimageでは重力、風、ファン、ドラッグ、アトラクタ、旋風、円環状、乱流、渦巻きの9種類があります。

フォースはシミュレーションタイプの一種かと思ったのですが、そうではなくて、シミュレーションオブジェクトやシミュレーション環境に適用するものだそうです。

シミュレーションタイプには パーティクル/流体/エクスプロージョン/ヘア/リジッドボディ/クロス/ソフトボディ などがあり、これらにフォースを適用してシミュレーションを構築します。

えーと…1つのフォースは、シミュレーションタイプと、シミュレーションオブジェクトの両方にリンクする、ということ?…いや、シミュレーションタイプとシミュレーションオブジェクトはイコール(同じもの)みたいですね。

実際にフォースを適用して試してみたいのですが、その前に適用対象となるシミュレーションオブジェクト(パーティクル等)を作る必要がありそうです。



◎パーティクル

ヘルプでパーティクルの説明を見ると、凄いボリュームです。パーティクルだけでNURBS関連全体に匹敵します。従来ペースだと半月ぐらいかかりそうです。今はパーティクルにそこまで時間かけたくありません。

というわけで、一度断念したこちらのチュートリアルに再びチャレンジすることにしました。

噴水の土台

以前は土台を作ることさえ出来ずに断念しましたが、カーブやサーフェイスを修得したので今回は簡単に作成できました。

パーティクル01

まだ重力等のフォースは未適用で、粒子が真上に上昇するだけの状態ですが、パーティクルがこんなに簡単に作れるのは嬉しいですね!

でもこれ、XNAでちゃんと動くでしょうか?



◎XNA連携テスト

とりあえずこの段階でXNAで動くか試してみました。

パーティクル02

全く動きません。と言うか、XNAに渡す前にアニメーションマネージャでアクションを指定する対象が無い(キャラクターキーセットを取得できない)ので、動かなくて当然です。

XNA連携ヘルプを確認すると、XNA連携でサポートするアニメは Transform animation だけでした。ということは、パーティクルもクロスもヘアもシェイプも全部ダメってことです。

ガーン!!



◎クロスサンプル

このままだとSoftimageを使う意味が無い…とまで言えるか微妙なところですが、デザイナーさんに「全部トランスフォームアニメだけで作って」とは言いにくいので、何とかXNAで動かす方法を探りましょう。

ランダムで次々に粒子を発生させるパーティクルは難しそうなので、クロスシミュレーションをテーマとします。

クロスサンプル

これはSoftimage付属サンプルです。風/ファン/重力フォースが存在し、再生すると海賊旗がパタパタとはためきます。

旗自体はポリゴンですので、ポリゴンが動く軌跡をアクションに格納してXNAに渡すことはできないでしょうか?例えば、シミュレーションデータをプロットしてアクションを格納し、.xsiファイル出力機能でXNAに渡すとか…。



◎非トランスフォームアニメについて

XNA連携機能は、Transform animationしかサポートしません。では他のアニメ機能以外は一切使えないかと言うと、そうとも限らなかったりします。例えば、コンストレイントやエクスプレッションの設定の一部は、XNAに反映されることがあります。

具体例を上げると、SoftimageのIKアニメはコンストレイント機能で実装されていますが、XNAで再現されます。これは、コンストレイントで計算された結果であるTransform値(アニメ)をXNAに渡しているからです。ボーン位置を定数で指定したエクスプレッションなども同様で、エクスプレッションにより計算されたボーン位置をトランスフォームアニメとしてXNAに渡すので有効です。逆に、他のオブジェクトの計算結果を前提としたコンストレイントやエクスプレッションは、XNAで無視されます。

シミュレーションやシェイプアニメーションも、最終的に頂点が移動する様子をトランスフォームアニメとして渡すことができれば、XNAで再現できるのではないかと考えました。



◎暗中模索

考え方は悪くないと思うのですが、具体的にどうすれば良いのかというと、わからないことだらけです(汗)

例えば、アクションの格納機能は17種類もありますが、これらがシミュレーションやシェイプをサポートしているのかはっきりしません。ヘルプを読んだ感触としては、シミュレーションとシェイプはアクションの範囲外っぽいです。ソフトボディとかどうなるんでしょうか?(謎)

全頂点のSRTをキー設定したり、キャラクターキーセットに含めたりすれば可能かもしれませんが、データ量は膨大になります。各頂点の軌跡をFカーブ/パス/トラジェクトリ等に変換すればデータ量は減りますが、XNAに渡す際に無視される可能性が高そうです。うーん…。

シェイプはアクションにプロットできるようなので、もしかしたら何とかなるかもしれません。シミュレーションはキャッシュファイルへプロットしてAnimation Mixerに渡せるとのことですが、ここからAnimation Editorに渡すことは多分出来ないと思うので、やはり簡単にはいかなさそうです。うーん…。



◎光明?

ヒントを求めてネットを探ると、こちらの記事を見付けました。クロスの挙動をボーンに落とし込むことができるなら、XNAにも渡せるのではないでしょうか?

スクリプトの元を辿っていくと、初めはこちらがベースとなって、それを実用化したのがこちら、さらに改良したのがこちらのようです。

元々は、カーブやボーンをガイドとしてリグを作成するスクリプトのように見えますが、改良版ではメッシュが生成されて、それにフォースやコリジョンを設定するそうです。クロス、ヘア、ソフトボディ等で使えそうです。

これでボーンとクロスが連携されるなら、XNAでも有効ではないか?と思ったのですが、よく考えるとちょっと違う気がしてきました。最初に見付けた記事の

このクロスの挙動を、ボーンに落とし込みます。

という記述から

クロス → ボーン → メッシュ

というイメージが先行してしまったのですが、冷静に考えると

ボーン → クロス → メッシュ

の可能性が高そうです。後者であれば、クロスの動きはXNAに伝わりません。うむむ…。



◎次回予告

クロスメッシュの頂点数と同数のNULLを作成し、そのNULLをボーンとして最終メッシュに伝えれば

クロス → NULL(ボーン) → メッシュ

という流れでXNAにも反映されると思うのですが、どうでしょうか?

というわけで、次回はその検証を行う予定です。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。