プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
クロスXNA連携テスト
クロスシミュレーション動作テスト
アニメは貧弱だが、SoftimageのクロスシミュレーションがXNAで再生可能となったらしい。



◎XNAモデルへのコンバート

クロスシミュレーションの動作を受け継いだNullボーンを用意して、XNAにクロスの動きを反映させることができるか検証テストを行います。

まず、クロスのサンプルシーンに板ポリ1個とNull9個を加え、Null9個をデフォーマとしてエンベロープを設定しました。次に、板ポリをXNAモデルにコンバートしようとしたら、シーン全体がコンバートされてしまい、アニメーションマネージャを開く際にエラーが表示され、キャラクターキーセットが作成できない状態になりました。

この状態を回避するため、新規XNAシーンへのマージを試みたりしましたが、結局原因は元の板ポリが非モデル形式だったからというオチで、「作成>モデル>新規モデル」で板ポリをモデル配下としてからXNAモデルに変換したら成功しました。

新規モデル作成という、最も基本的な手順を知らなかったことが問題ですね(汗)



◎試行錯誤

板ポリメッシュとデフォーマ(Null)の関係を設定したので、次に、板ポリデフォーマがクロスメッシュの動きに連動するようエクスプレッションを設定します。

頂点番号を指定するパスがわからないので、適当なスクリプトファイルをDLして解析を試みました。でも、VBスクリプトとエクスプレッションは微妙に違うみたい…。

mast.flag.geometry.Points.208.posx

こんな感じで適当にエクスプレッションに設定すると、Unknown elementでエラーになりました。もっと確実な方法で調べないとダメですね><


前回注目したスクリプトなら、カーブとメッシュ頂点の間にエクスプレッションorコンストレイントが設定されると思うので、そちらでメッシュを作成して設定状態を確認しましょう。



◎クロスメッシュの作成

スクリプトをインストールして実行すると、メニューが表示されます。

HairRigメニュー

わかりやすくていいですね。3本のベジュノットカーブからクロスメッシュを作成しましょう。

HairRigで作成したクロスメッシュ01   HairRigプロパティ

プロパティが「クロス」って感じでちょっと感動^^

さらに中身を確認すると、メッシュとは別にNullが21個作成されており、メッシュがコンストレインオブジェクト、nullが被コンストレイントオブジェクトに設定されています。つまり

クロス → null

の連携が確立されており、クロスメッシュを動かすとnullも動きました。How Nice!!(素晴らしい!!)

前回紹介した記事は正しく記述されてました。疑ってごめんなさい。でもお陰様でXNA連携できそうな気がしてきましたよ!



◎おや?

いろいろ試そうとしたら、2回目以降作成したクロスメッシュが風に連動しません。最初はスクリプトやメッシュの問題かと思いましたが、フォースを削除して追加すると動かなくなるので、フォースとの連携設定やシミュレーション環境の問題かもしれません。できれば乱流を使ってみたかったのですが、まだ動かすに至りませんでした。

シミュレーションの勉強はまだこれからですので、原因はいずれわかると思います。とりあえず動く状態に調整してXNAで試してみましょう。



◎XNA連携テスト

クロスのNullをデフォーマとして板ポリのエンベロープを設定し、XNAで動くか確認しました。

…が、動きません。ガーン!!

キャラクターキーセットを確認すると、板ポリのSRTしか登録されてませんでした。通常はデフォーマから自動生成されるのですが、今回は手動で追加する必要がありそうです。

しかし、アニメーションマネージャでキー項目の確認はできるのですが、追加は出来ないようです。とりあえず通常機能の「マークパラメータの追加」でNullのPosを追加すると、エクスプローラ上のKeyableParamsには追加されますが、アニメーションマネージャのキャラクターキーセット一覧には反映されません。うむむぅ…。

そもそも、キャラクターキーセットの自動生成時にNullが無視されるのは何故でしょうか?Nullが板ポリのデフォーマとして認識されているのは確認済みなんですが…。

待てよ?NullのEnvelopeGroup(リンク)だけじゃなくて、Nullの実態も同一モデル階層下に配置しないとダメなのでは?

結局、同一階層下に移動してキャラクターキーセットを再作成したら、NullのPosも追加されました。忘れた頃にひっかかる落とし穴だなぁ…。



◎再テスト

その後もXNAでビルドエラーが発生したりしましたが、最終的にはXNAでクロスを再現できました。まだシミュレーションの勉強を始めたばかりなので、動きが貧弱なのはご容赦ください。



動いた瞬間感動して、夜中に声を上げそうになりましたw



◎クロスシミュレーション再生手順

以下、クロスメッシュの動きをNull経由で板ポリメッシュに伝えてXNAで動かす手順です。

1.スクリプトを利用してクロスメッシュを作成する

2.風等のフォースを配置しクロスメッシュの動作を確認する

3.板ポリを新規作成する

4.板ポリをメッシュ→通常モデル→XNAモデルに変換する

5.クロスのNullをデフォーマとして
  板ポリのエンベロープを設定する

6.アニメーションマネージャでキャラクターキーセットを
  取得し、新規アクションを作成する

7.PublishしてXNAで動かす

ソフトボディやヘア等も上記手順で出来そうです。余計な手間が少なく実用的なので、後日HPにまとめるつもりです。



◎次回予告

いや~久々にXNAで感動しましたw

階層違いで動かなかった時は「やっぱり駄目なのか~!?」とかなりショックでしたが、諦めずに最後まで達成できたのは、過去の試行錯誤経験と最近の勉強の下積みがあったからでしょうね。

XNAで動くことが確認できたので、次回から改めてシミュレーションをしっかり勉強します。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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