プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
パーティクル03
パーティクルの練習
フォースを勉強するために、パーティクルで噴水を作成した。SotimageパーティクルモデルをXNAで動かすことは可能か?



◎パーティクルと重力フォース

XNAでクロス等が使えるようになったので、シミュレーションの勉強を再開します。フォースについてもう少し慣れておきたいので、以前のパーティクルチュートリアルを、重力フォース適用までやりましょう。

パーティクル03

噴水の動きになったのですが、静止画で見てもわかりませんね…ごめんなさい。


パーティクルは本来XNAで動きません。ただし、

・粒子数の上限は設定値で決まる

・個々の粒子には番号が付けれらており、
 通常のポイント(頂点)と同様の扱い

なので、粒子上限と同数のNullを予め取得しておき、コンストレイントで連動させれば(クロス等と同様に)XNAで動きそうな気がします。パーティクルが動けば、流体やエクスプロージョンも動くかもしれません。

HairRigのソースを解析して、ポイントとNullのコンストレイント設定を修得すれば案外あっさりできるかも…?と思ったのですが、HairRigは.xsiaddon形式で肝心な部分がバイナリっぽいので諦めました。

興味はありますが、自作ゲームでパーティクルを使う予定は今の所無いので、チャレンジはまたの機会にしましょう。



◎風と乱流

重力フォース適用時に気付いたのですが、フォース適用前に予め適用対象オブジェクトを選択しておく必要があります。前回、風や乱流がうまく適用できなかった原因はコレか?

パーティクル04

風と乱流を適用しました。風で右方向に流れるのはよくわかるのですが、乱流の影響があるのか無いのかパーティクルではよくわかりません。


クロスのサンプルを確認すると、乱流は存在せず、風とファンがありました。ヘルプで確認すると、クロスと乱流の組み合わせは不可でした。…おや?(汗)

そもそも旗手を作るのが目的なんだから、サンプルの旗と同様のものを目指しましょう。



◎クラスタにテクスチャマテリアルを適用する

まず、XNAで表示する旗を用意しようとしたのですが、これまでメタセコイアモデルをコンバートしてたので、実はXNA向けテクスチャマテリアルを1から自作した経験がありません。

確かメッシュのマテリアルに直接テクスチャを張るとNGで、クラスタを作ってそれにマテリアルを適用すればOKのはず…あれ?クラスタ作ってもマテリアルを適用できないぞ?

Explorerからマテリアルを選択したポリゴンにドラッグアンドドロップして、マテリアルを割り当てることはできません。

Softimageらしくない仕様だなぁ…あれ?他の方法でもダメじゃん?

…結局、頂点のクラスタを作成したのが間違いでした><

で、改めてポリゴンのクラスタを作成すると、今度はXNAでエラーになりました。

BasicMaterial にテクスチャーがありますが、メッシュ "grid" のジオメトリにテクスチャー座標が含まれていません。

どうやら、クラスタに適用したテクスチャマテリアルとは別に、メッシュオブジェクトに対してテクスチャサポートを作成する必要があるようです。オブジェクトを選択して「レンダ>取得>テクスチャ>イメージ」でプロパティを開き、テクスチャプロジェクションの新規ボタン>XZ平面…わかりにくい(+_+)

とりあえずメッシュ直下にTexture_Supportが作成され(XNA的には不要?)、Clusters直下にTexture_Coordinates_AUTOが作成されました(必須?)。UV座標を調整して、ようやくこの状態になりました。

クラスタにテクスチャマテリアルを適用する01   クラスタにテクスチャマテリアルを適用する02

これだけでもちょっと面倒な感じですが、さらに続きがあります(^_^;



◎アルファぬき(透明度処理)

テクスチャにはアルファ値(透明度)が設定済みなんですが、それを有効にする方法がよくわかりません。Q&Aで‘アルファ用マップを別途用意する手法’を見かけた記憶がありますが、プロパティやヘルプを見てもよくわかりません。

ネットを探ると、こちらにアルファマップ不要の手法が紹介されてました。こちらの方が汎用的でいいですね!

透明度処理01   透明度処理02

Color2alphaをPhongに接続する際にScalar_to_Colorというノードが自動生成されたので、RenderTreeの構成が記事と若干異なりますが、ほぼ同じ手順で透明化できました。これでようやくマテリアル設定完了。ふぅ…。

以前確立したこちらの手法を適用済みなので、DirectXシェーダへの変更作業は不要です。これが無かったらさらに面倒ですよw



◎ぱたぱたアニメ

旗ポリゴンが準備できたので、次にクロスメッシュを作成します。

9個のノットを持つリニアカーブを描き、各ノットの座標を調整してから8回複製して位置を調整。スクリプトを利用して8×8の平面クロスを作成しました。

しかし、このクロスにファンを適用しても動きません(風はOK)。おかしいなぁ、範囲内のオブジェクトに有効なはずなんだけど…。

あっ、動いた!風力や粘性を極端に大きくすると動きました。手順の問題ではなくて、パラメータ調整の問題だったんですね。

その後、サンプルを参考にパラメータを調整したのですが、なかなか思惑通りに動かなくて、時間かかりました。各パラメータの意味をきちんと勉強すべきなんだろうなぁ…。

クロスメッシュぱたぱた

Clothのパラメータやプリセットをいじってもろくに反応しなかったのですが、ClothOPのフォースタブの外力係数パラメータをいじると反応が良くなりました。先にこれを調整してから他のパラメータを調整すべきだったのかもしれません。



◎XNA動作テスト

クロスのNullをデフォーマとして先のポリゴンにエンベロープを設定し、XNAで動かしてみました。



XNAでは透明処理されませんでした。ガーン!
そうか、レンダツリーをいじくってもXNAでシェーダを一括置換するから無意味だったのね(哀)

もう少し派手に動かしたかったのですが、やりすぎるとシミュレーションが破綻するので調整が難しく、動きが地味になってしまいました。

動画をよく見ると、棒がチラチラして微妙に動いているように見えます。ファンの影響かと思ったのですが、Softimageで見ると棒は動かないので、ファンは無関係でした。

ということは、XNAのレンダリングの問題か?しかしXNAでよく見ると、棒の一部のポリゴンが瞬間的に移動してました。何だかなぁ(謎)



◎次回予告

テクスチャマテリアルに時間を取られて、肝心のクロスの勉強があまり進みませんでした。しかもXNAで透明にならないし><

というわけで、次回はテクスチャの透明処理に再チャレンジします。シェーダ改修はなるべく避けたいなぁ…。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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