« XSI 6 Mod Tool について(おまけ) | トップページ | RenderMapの不具合について(返答) »

2007.08.24

SOFTIMAGE_XNAViewer

さて XSI 6 Mod Tool がもんのすげー使える(使えそうだな)とわかってきた気がする。
期待するのは当然 XNA との連携なのだが、XSIのラーニングを請け負っているNoesisのXNAとの連携チュートリアルは(おそらく)まだ公開されていない。

前回の記事でXSIのチュートリアルで作った時限爆弾をポリゴン数を手動(といっても普通行なうであろう作業なんかよりよっぽど楽なのだが…)で少なくする作業をほどこした後、FBXで出力してXNAのBasicEffectにて表示することは難なくできた。

しかし、本来の目玉はXSI 6 Mod Tool上でマテリアルごとにシェーダーを設定して、それをそのまま表示することが(データにどのシェーダーが使われているか?等の情報を入れることが)可能なはずなのだ。

今回はCrossworkのその仲間たちとそのXNAで使用するサンプルであるSOFTIMAGE_XNAViewerを使ってマテリアルにシェーダーを設定したモデルを表示しようと思う。

まず、下準備として、SOFTIMAGE_XNAViewer(以後Viewer)を用意してもらいたい。
用意の仕方は前の記事を参照してもらいたい。
それとすでに用意してある方も一応再度用意した方がいいかもしれない。

先日XSI Mod Toolを立ち上げたときXNAGSEというXNA関係のものがヴァージョンアップされた。
何が変更されたのかわからなかったので、一応私はViewerを再度コピーして作業している。

そしてViewerの中のcontentの中にTexturesというフォルダがあるので、ローポリ化したときにRenderMapが吐き出したテクスチャをこのフォルダにコピーしておく。

準備はこれでOKなはず。さっそくXSI 6 Mod Tool(以後ModTool)を起動してローポリ化後の状態から作業を開始する。

ちなみに今回の作業で私は何度もModToolが強制終了を起こした。
おそらく私の手順が強引なためなのだろうが、一つ作業が成功するたびに作業内容の保存を忘れないでもらいたい。

Gw20070824112734

これがローポリ化後の状態だ。
まず始めにXNAに吐き出すため専用のモデルのルートを生成しなくてはいけない。
メニューのXNA Game Studio -> Create Model を選択する。

Gw20070824112753

するとキューブ状のメッシュをもったModelというのがScene_Root内にできあがる。
XNAにCrossworkでdotXSIファイルを出力するときはかならずこのModelをルートにしなくてはいけないようだ。

Gw20070824112823

このMeshはいらないので選択してDelキーで消してしまってかまわない。
次に、自分がこれから吐き出したいオブジェクトすべてをこのModelの子にする。
やりかたは簡単でオブジェクトすべてをShitないしctrlを使ってすべて選択し、Modelと表示されているところへドラッグアンドドロップすればいい。

Gw20070824112853

それが完了したら、ModToolのビュー環境をDirectX9のシェーダーに対応したものに変更する。
ビューの右上あたりにモードを変更する箇所があるので、そこで Realtime Shaders -> DirectX9 を選択する。

Gw20070824112935

そうするとモデルが画面上からパッと消えてしまうが、それでいい。

Gw20070824112953

これからマテリアルにシェーダーを設定していく。
本来ならテクスチャ+外部からのライト設定といった感じのシェーダーとマテリアルカラー+外部からのライト設定といった感じのシェーダー2つを前もって用意するべきなのだろうが、今回はめんどくさいのですでにViewerにサンプルでついてくるLambert.fx(ランバード光源シェーダー?)を使用することにする。

まずテクスチャがはってあるマテリアルから設定してみる。
ModExplorerからテクスチャがはってあるオブジェクトを選択して7キー(Render Tree)ダイアログを表示する。

Gw20070824113136

もともとのMod Tool上でのマテリアル設定がすでにあるはずだ。
今回はこの設定はいらないのでMaterial以外(私の場合はテクスチャファイル・Image・Phongという3つ)を範囲選択した後、Delキーですっぱり消してしまおう。

すると私の場合はこんなダイアログがでてしまった。

Gw20070824113202

これはおそらく、このテクスチャファイル(と設定)がほかのマテリアルで使われているけど、それらも消しちゃうかい?ということだと思う。

ちなみに私はどうせ全部消して回るのだからいいやと「はい」を選択したらModToolがへそをまげて落ちてしまった…なら確認するなよといいたい。
なので「いいえ」を選択する。

Gw20070824113257

するとこんな感じになる。
せっかくじゃまなものを消したのにまた何かあらわれた。
このままにしておいてもいいし、消してもかまわない。

これでやっとシェーダーを関連づけられる。
このダイアログのNodes -> RealTime DirectX -> Dx Fx (.fx) を選択する。

Gw20070824113342

するとなんだかわからんデフォルトの外部シェーダーが現れる。
※もし画面外にわらわらと出てしまって、どうにもならなかったら、Ctrl+Rキーで自動整理してくれるし、Aキーで画面に収まるように縮小してくれるので利用しよう。

これをまずマテリアルとつなげてしまおう。
※この手順じゃなくても出来そうだが、私の場合、この手順以外でやるとModToolが落ちてしまう確率が高かった…。

外部シェーダーであろう枠の右上の青丸をドラッグすると…

Gw20070824121157

やじるしがのびるので、マテリアルにくっつける。どの場所でもかさなっていればかまわない。マウスの左ボタンから指を離す。

そこででてくるメニューからRealTimeを選択する。

Gw20070824113736_3

これで無事くっついたら外部シェーダー部分をダブルクリックするか選択してEnterキーを押す。

Gw20070824113419

するとこんなダイアルログがでてくるのでDXFX2タブを選択して(すでになっているかも)General枠の中に外部シェーダーファイルを指定する場所があるので指定する。
この時指定する外部シェーダーファイルはのちのち出力されるファイルのパス等で不具合が起きないように、ViewerフォルダのContent\Effectフォルダの中のLambert.fxを選択しよう。

ちょっとここで重い処理が入るらしく、あわててはいけない。
ダイアログに変化がでるまで、一息待った後、アンビエントとデフューズを設定するスライダが出現するので適当に(アンビエントは0,0,0の真っ黒。デフューズは0.7 0.7 0.7のちょいグレー)設定してダイアログを閉じる。

Gw20070824113807

こんな感じになったらTexture_1につながっているdefault_surface_map_pngをダブルクリックして前にRenderMapで出力したテクスチャをContentにコピーしたファイルに設定する。

Gw20070824114912

設定するのは上からClip枠名前をたとえばRenderMap_png1にする。
※すでにMod Tool上でRenderMap_pngは使われているので1を追加した。
次にGeneralタブ(数ヶ所あるかもしれないがファイル設定できる場所)のファイル設定を前準備したViewerフォルダのContent\Texturesフォルダ内のファイルにする。

そうするとあとは自動的にRenderMap_png1になると思うが、ならない場所があったら、RenderMap_png1にしておくべきだろう。
これでダイアログを閉じる。

また外部シェーダーの枠をダブルクリックしてダイアログを出す。
今度はテクスチャの設定がダイアログに増えているはずだ。

Gw20070824114832_2

ここでAlbedMapをプルダウンからRenderMap_png1を選択する。
その下画像をはさんでTexture SpaceをTexture_Projection1(人によってちがうかも、とにかくRenderMapが作ってくれたUV設定)を選択してダイアログを閉じる。

するといつの段階からか私の場合は真っ黒なダイナマイトのオブジェクトが出現する。
実はこの時点でもうすでにマテリアルにシェーダーは設定されて、テクスチャもはられている。

Lambert.fxの設定で点光源じゃないとオブジェクトは照らせないらしい。
なのでビューのシェーディングモードを一時前に戻して点光源を適当に配置した後、まてシェーディングモードをDirectX9に戻す。

Gw20070824115116

点光源を生成

Gw20070824115139

時限爆弾オブジェクトの中に出現するのでVキーをおしてハンドルを出してひっぱりだす。

Gw20070824115152

そしてシェーディングモードをDirectX9に戻すと…

Gw20070824115216

じゃーん、でてきたーよー。
私のデフューズ・アンビエントの設定ではModTool上では暗く見えますが、Viewerの初期ライト設定があかるいので、こんなもんでいいんです。

あとはこのマテリアル設定をテクスチャがはられているオブジェクト全部にすればOK。
UV設定がオブジェクト毎にされているから、楽チンですね。

左側のメニューボタンMaterialを押して…

Gw20070824115308

私の場合はこのマテリアルがシェーダーを適用したやつです。
これをModExplorer上のテクスチャを使っているオブジェクトへドラッグアンドドロップしてやります。

Gw20070824115419

全部にドラックアンドドロップしおわったところ。

あとは同じ作業でテクスチャを設定しないで、アンビエントとデフューズの設定をしてあげるだけの、マテリアル色だけのシェーダーを適用していくだけです。

Gw20070824115455

余計なもの消して・・・
外部シェーダー作って、マテリアルにつなげて、外部シェーダーをダブルクリックしてダイアログをだしたらLambert.fxを設定して、ダイアログが変化するのを待つ…

Gw20070824120107

アンビエントとデフューズを設定する。
(たとえば赤いコードならAmb:R0G0B0 Diff:R0.7G0B0)

私の場合コード類は変に一つのオブジェクトにマージしてしまったのでこんな感じになっています。

Gw20070824120427

このplymsh1個が銅線1つ。このように選択して7キーを押せばRender Treeダイアログが出てきます。

Gw20070824121251

テクスチャをはっていないマテリアルカラーだけのオブジェクトはこんな感じ。
シェーダー部分はアンビエントとデフューズカラーを設定しただけ。

全部のマテリアルにシェーダーが適用できたら、完成。

Gw20070824121427

で、あとはルートのモデルを選択してdotXSIファイルを吐いちゃえばいいんだけど、ちょっとおまけ機能を紹介。
XNAへの機能の一つに吐き出す前にデータを診断する機能があります。

Gw20070824121617

診断したいルートモデルを選択した状態でXNA Game Studio -> Diagnose Models

ダイアログがでたらOKを押して実行。

Gw20070824121523

Gw20070824121602

すると診断ログが吐き出されます。
私の場合、Lineという箇所のマテリアルに外部シェーダーが設定されていないですよ?というWarningが出ました。問題ないので今回は無視。
本来ならボーンの数やら頂点へのボーンの影響数とかをチェックするものだと思います。

さて、終盤です。

ファイルを吐き出してしまいましょう。
ルートモデルを選択した状態でXNA Game Studio -> Publish Models を選択。

Gw20070824121617_2

吐き出すパス指定のダイアログがでるのでViewerフォルダのContent\Modelsフォルダへ吐き出して下さい。

Gw20070824121633

そしたらXNA環境でViewerのプロジェクトを立ち上げましょう。

まず吐き出したxsiファイルをcontentに登録します。
(Content部分を右クリック -> 追加 -> 既存の項目)

Gw20070824121658

追加されればおそらくコンテント関連のプロパティが自動で設定されるはずです。

Gw20070824121727

あとはGame1.csのこの部分を自分の吐き出したファイルのファイル名にしてビルド・実行すれば…

Gw20070824121832

めでたくばっちり表示されます。

今回は普通のモデルですが、法線マップ適用のフォンシェーディングだとか、そういうのもマテリアル単位で分けて設定できるわけです。

鎧部分はピカピカだけど、人間の肌の部分は少しつやがあるくらい…とシェーダーの適用次第でモデルの表現力が確実にアップしますよ!!

やっぱりXSI Mod Toolはいいツールになりそうです。

※そういえばこの状態でFBX吐いたらどうなるんだろう?ちゃんとシェーダーファイルへのリンク情報吐いてるかな?

|

« XSI 6 Mod Tool について(おまけ) | トップページ | RenderMapの不具合について(返答) »

趣味」カテゴリの記事

プログラム」カテゴリの記事

プログラミング」カテゴリの記事

XNA」カテゴリの記事

グラフィックアプリケーション・ツール」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: SOFTIMAGE_XNAViewer:

« XSI 6 Mod Tool について(おまけ) | トップページ | RenderMapの不具合について(返答) »