プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵複数モーション01
開発中のメイン画面
複数のモーションが登録可能となった。自動遷移機能も併せて実装し、モーションの自然な切り替わりを可能とした。



◎連画ファイルの命名規則

今回は、1モデルに複数のモーションを登録し、切り替え可能とします。

まず、槍兵の歩行開始モーションを切り出して連画を出力しようとしましたが、ここで悩んだのは連画ファイルの命名規則です。

連画ファイル名には、既に方向番号と表示番号を付けています。モーションも一意の番号を付けて管理しようとしたのですが、これで良いのでしょうか?

メインプログラムの中では、モーションは番号で管理する必要があるので、その番号をそのままファイル名に付けた方が、画像読込プログラムはシンプルになります。しかし、今後モーションを追加したり削除したりすると、番号がずれたり欠番になったりして、管理がややこしくなりそうです。

結局、連画ファイル名にモーション番号は付けず、モーション名で管理することにしました。プログラムは若干煩雑になりますが、番号管理の煩雑さに比べれば多分マシでしょう。

連画ファイル命名規則:
 モデル名_モーション名_方向番号(連番)_表示番号(連番).png

命名規則に沿って、攻撃モーション(当面はアイドリングとして代用)、歩行開始モーション、歩行ループモーションの連画ファイルを出力しました。



◎複数モーションの登録/表示

メインプログラムを改修して複数モーションを登録/表示可能とし、とりあえず2つのモーションを登録して動かしてみました。

槍兵複数モーション01

歩行モーションと攻撃モーション、それぞれちゃんと動きました。

気になったのは、画像ファイルの読み込み時間です。以前はビルド開始から20秒ぐらいでしたが、改修後は1分半も待たされます。

改修をミスったのかと思っていろいろ調べたのですが、結局原因は裏で動かしていた大戦略Webの影響でした(爆)

IEのキャッシュを無制限にしたので、リソースを奪い合っていたようです。キャッシュが無いと読み込み時間がこんなに遅いのか…いずれ画像ファイルを統合して、高速化を図りましょう。



◎モーションの自動遷移

モーションの自動遷移とは、「歩行開始モーション」→「歩行ループモーション」のように、複数のモーションを次々と再生することです。

スキンアニメの場合は、2つのモーションのブレンド率を変更して切り替えますが、ビルボードは2Dアニメなので、遷移モーション用の画像を表示して切り替えます。

槍兵複数モーション02

静止画だとわかりませんが、キーを1回押すと「歩行開始モーション」→「歩行ループモーション」に自動遷移し、そのままループします。

ちなみに、3モーション以上の連続遷移も可能です。
(但し、同じモーションを2回以上再生するパターンはできません)



◎サンプルプログラム

プログラム整理が一段落したので、現時点でのプログラムの一部をUPします。何かの参考になれば幸いです。

部隊管理クラス
部隊クラス
モデル基底クラス
個別モデルクラス(槍兵)



◎次回予告

マップやモデルなどの登録/表示機能はとりあえず一段落しました。ここに至るまで長かったですね~。

次のステップはゲームの中身の実装(移動や攻撃など)ですが、切り良く来年から始めたいと思います。

年末もあと少しありますので、次回は画像ファイルを統合してパフォーマンスの改善を図ります。

スポンサーサイト

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発

開発中のメイン画面
槍兵歩行モーションが実装された。Softimageモデルとなったため、以前と少し見た目が異なる。



◎ランタイムライブラリの組み込み

今回は、自作の連画取得ツールに槍兵歩行モデルを組み込みます。

SoftimageモデルをXNAで動かすために、インポーターやランタイムを組み込む必要がありますが、注意事項がやたら多くて厄介です。XNAバージョンの問題とかもあるし…ブツブツ。

何種類ものビルドエラーを半日がかりで一通り解消しましたが、肝心のモデルは画面に表示されません。やはりこのランタイムは一筋縄ではいかないですね。(これに比べるとACLは偉大だなぁw)

結局、この問題の原因はシーンファイルでした。Softimageで使用中のシーンファイルをコピーしただけではダメで、XNAのカメラに合わせる必要がありました。そういえば、これも注意事項の1つでしたね。


最初は、組み込み手順をまとめてHP記事のネタにしようかと思っていたのですが、注意事項の多さに嫌気がさしてやめました。頑張って書いても、結論は「こんなの使わない方がいいですよ」になりそうだし(爆)



◎ポージング

ランタイムの組み込みは何とか成功しましたが、連画を取得するためには、現在取得中の画像番号に合わせてモーションのポージングを行う必要があります。しかしこれがどうしても出来ません。

XSIAnimationContentクラスのCurrentTimeやPlayBackを利用すると、任意のタイミングのポーズを表示することができますが、停止せずに動き続けてしまうのです。Durationを0に設定してもダメでした。誰か止めて~!

XSIXNAランタイムの制御に関しては、マニュアルもネットもアテにできないので、ひたすら試行錯誤しかありません。ランタイムソースを解析すると、PlayBackメソッドの中で時間が加算されていたので、これを書き変えたら任意のポーズで静止しました。



◎アニメーションブレンド

ポージングは出来たのですが、任意の間隔で連続画像を取得すると、予想と異なる画像が表示されました。

タイミングのずれ?
でも初期動作のタイミングは合ってるようだし…??

いろいろ試してみると、どうやら無意識のうちにモーションブレンド状態だったらしく、モデルのニュートラルポーズ状態と、作成したモーションを、PlayBackメソッドの引数blendで指定するようになってました。これを0.1に指定していたために、モーションが中途半端にブレンドされて予想と異なる画像が表示されていたわけです。

ブレンド値0.1

厄介なのは、この値を1にするとモーションは完璧に再現されますが、モデルのワールド座標を制御できません。0にすると、ワールド座標は制御できますが、ニュートラルポーズから全く動かなくなります。

それで過去の私は0.1にしたのですね。そういえば、昔ブログでそんな記事を書いたかも(汗)



◎原因判明

また同じ問題で悩むのは嫌なので、今回は原因を徹底的に追及します。

昔のサンプルやXNAViewerのソースを見直したり、シェーダを書き替えたりと紆余曲折ありましたが、原因は意外な所にありました。

モデルクラスにプロパティを追加してワールド座標を受け渡していたのですが、Draw()内でプロパティにセットし、Update()内でプロパティからモデルに受け渡してました。

つまり自分で埋め込んだバグだったわけですが、ブレンド率を変えると中途半端に反映されるので、なかなか気付けませんでした。



◎実装

ようやく連画が取得できるようになったので、アニメーションエディタで初期モーションを削除し、ループモーションのみをPublishしました。(初期モーションは後日追加予定)

しかしModels[*].Animations[*].Durationの値はアニメーションエディタの編集を考慮していないようで、モーション全体の時間が入ってました。これはPublish機能のバグかもしれません。(モーションはループ部分のみ再生されます)

仕方が無いので、Durationの値を使わずに自分で計算してベタ打ちしました。どうもスマートにならないなぁ。


そんなこんなでようやく連続画像を取得。とりあえず攻撃画像と差し替えました。移動プログラムも少し変更して、移動先が侵入不可の場合、ランダムに方向転換するようにしました。



馬は走るモーション、人は歩くモーションなので、若干不自然な気もしますが…まぁとりあえずいいかw



◎次回予告

実は先週からランタイムの組み込みに着手していたのですが、ようやく一段落しました。日数はかかりましたが、かつて散々悩んだ問題をクリアできたので良かったです(^_^)


次回は、1モデルに複数のモーションを登録できるよう改修し、攻撃、歩行開始、歩行の3モーションを登録します。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発

槍兵歩行モーション
Softimageにて作成。癖が強いソフトのため、ウォーミングアップに時間を要するが、一度ペースを掴むとモーションは手早く作成できる。



◎どっちで作る?

槍兵歩行モーション(=アクション)を作ります。

初めはRokDeBone2で作りかけたのですが、槍兵モデルはSoftimage版も作成済であることを思い出しました。どちらかというと、RokDeBone2の方がまだ慣れてますし、XNAで必ず動くという安心感があります。と言うか、Softimageは極力避けたいというのが本音です(^_^;

…いや、こんなことではいけません!
Softimageに慣れる良い機会だと自分に言い聞かせて、Softimageで作ることにしました。



◎アクションの追加

というわけで、今回はSoftimageで初めてアクションを追加します。

アニメーションマネージャで既存の攻撃アクションを複製し、キーの追加や削除を行って新しいアクションを作りました。すると、コピー元のアクションまで一緒に変わってました。

ガーン!アクション作り直し(T_T)

槍兵モデルはXNAのボーン数制限をクリアするためにシャドウリグを使用しています。その影響か、1つ新しいことする度に苦労させられます。これだからSoftimageは使いたくないんだよね…。



◎不可能??

愚痴ばかり言っても始まらないので、何が悪いのか原因を探ります。

通常のリグ方式の場合、

1:エクスプローラでリグ(Biped)を選択

2:アニメーションマネージャで、
  (リグの)アクション項目を選択

3:リグのコントローラやボーンを選択

4:アクションを付ける

これで、リグと(リグの)アクション項目が関連付けられます。
しかし、シャドウリグ方式の場合、

1:エクスプローラでシャドウリグ(Biped_Shadow)を選択

2:アニメーションマネージャで、
  (シャドウリグの)アクション項目を選択

3:リグのコントローラやボーンを選択

4:アクションを付ける

上記を実行すると、3番でリグを選択した段階で、アニメーションマネージャが「シャドウリグ→リグ」に切り替わってしまうため、リグと(シャドウリグの)アクション項目の関連付けが出来ません。

上記から得られる結論は「シャドウリグのアクションを複数登録してXNAで使い分けることは不可能」です。シャドウリグモデルに複数のアクションを付けてXNAに渡したい場合は、アクションの数だけモデルを複製するしかありません。

…自分で書いてて何ですが、ホントかなぁ?
何か他のテクニックとかで回避できるかもしれませんが、今の私にわかるのはここまでです。



◎連画の取得

というわけで、別モデルとして槍兵歩行モーションを再作成しました。(操作に慣れれば、アクション作るのは結構簡単です。編集機能も強力です。)

槍兵歩行モーション

問題は、連画の取得です。Softimageには連画出力機能がありますが、今回は32方向分取得したいので、カメラ移動&連画取得操作を32回繰り返さなければなりません。この作業を、今後モデルやアニメが増えたり修正する度に繰り返す…なんてことは考えたくありません。

というわけで、自作ツールにSoftimageランタイムを組み込んでdotXSI形式で渡します。手始めにXNAViewerに渡すと…真っ白で動きません。DirectX9用のマテリアル設定するの忘れてました(汗)

マテリアル設定を行うと、XNAViewerできちんと動きました。

槍兵歩行XNAViewer



◎次回予告

話が長くなりそうなので、続きは次回とします。

次回は「槍兵歩行モーションの表示」です。明日UP予定!

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
ネームプレート02
開発中のメイン画面
城のネームプレートを線で繋げた。最終的な表示方法は後日改めて検討する予定。



◎移動関連パラメータ整備

前回の残課題の1つに「槍騎兵の移動プログラムを部隊クラスに移植」がありますが、その前に移動関連のパラメータを整備しましょう。

まず、個々のモデルクラスに以下のパラメータを追加します。

・移動タイプ
・移動速度(最大)

次に、部隊クラスに以下のパラメータを追加します。

・移動タイプ
・移動速度(最大)
・移動速度(現在)

最後に、部隊内の編成状況に応じて部隊のパラメータを更新するメソッドを作成します。(一番遅いモデルを基準とする)

これで、騎兵オンリーの部隊は、騎兵&歩兵混成部隊よりも早く移動するようになりました。(数値は後日調整)



◎C#のクラスと構造体

部隊移動の準備が整ったので、槍騎兵クラスの移動プログラムを部隊クラスに移植しました。

…しかし、部隊は足踏みするばかりで移動しません。調べてみると、個々のモデルクラスから部隊の新座標が正しく取得できず、旧座標で計算してました。ということは、参照渡しではなく値渡しになっているのでしょうか?

でも、他のクラスの座標は同じ方法で新座標が取得出来ています。どうにも納得できないのでネットで確認すると、こちらに「class で定義した型は参照型になり、 struct で定義した型は値型になる」との記述がありました。
そうだったのか…これを知らずに結構悩んだ気がするなぁ。

その後、構造体をやめてクラスのプロパティとして座標を渡すと、部隊が動きました。狙い通り、騎兵は歩兵よりも早く移動しています。



◎XNAで線を描く

城にネームプレートを付けます。以前と同じものを復活させるだけでは面白くないので、線を使って表記を改めようと思います。

XNAには線を表示する関数が無いので、こちらを参考とさせて頂きました。

実装に先立ち、スプライトバッチクラスを継承したカスタムスプライトバッチクラスを作成し、これにラインメソッドを追加しました。こうしておけば、今後の拡張も容易でしょう。

ネームプレート01

一応線は実装できましたね。しかしこれでは不自然すぎます。線を短くしましょう。

ネームプレート02

まぁ、とりあえずこんなものでしょうか。最終的にどうするかは後日検討します。



◎次回予告

作業は次の段階に進んでますが、話の切りが悪くなるので次回とします。

次回は「槍兵歩行モーションの作成/表示」です。

しばらくぶりにSoftimageと格闘中です(^_^;

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
森12
開発中のメイン画面
混成部隊を編成可能とし、7種類の木々をビルボードと方向画像で表示した。兵士の伏兵も可能。



◎懸念事項

前々回のコメントで、yohさんから木のビルボードの提案を受けました。最初にこれをやらなかったのは、以下の懸念事項があるからです。

・兵士の伏兵が難しそう
・木が回転しそう
・パフォーマンスが悪そう

しかし森簡易モデルは見た目が悪い状況なので、とにかく一度試してみましょう。



◎回転対策

というわけで、木をビルボード(円柱)で配置しました。

木01

静止画ではわかりませんが、ビルボードで画像1枚を配置すると、やはり回転します。

そこで、方向画像で木の向きを固定しようとしたのですが、32枚だとカクカクします。64枚でも少しカクカクするので、128枚に増やしたら違和感が無くなりました。

それにしても、木一本の静止画像に128枚とは…。
ここからさらに「木の枝が風にそよぐアニメ」をやろうとしたら、動画4枚でも木一本につき512枚…無理ですね(哀)



◎クラスの継承

木は配置出来たので、種類と本数を増やして森にしたい所ですが、その前にプログラムの整理をします。前々回は画像取得ツールのプログラムを整理しましたが、今回はメインプログラムを整理します。

・モデルの基底クラス作成
・各モデルクラスを継承化
・その他(PJ名、ネームスペースの変更等)

モデルの基底クラスを作成し、個々に作成していたモデルクラスを継承クラスとします。C#に不慣れなため、試行錯誤中の適用は避けていたのですが、実は自前で継承クラスを作るのは初めてだったりします(笑)

クラスの継承はサンプルプログラムでよく見掛けるので、概ね把握してるつもりですが、曖昧な部分もあるのでこちらで勉強させて頂きました。


今回のプログラムの整理で判明したのですが、板ポリゴンモデルをカスタムコンテントマネージャで複製してる箇所がありました。これは不要なので通常方式に修正すると、パフォーマンスが少し改善しました。

プログラムも見違えるほどスッキリしたし、丸1日かけた甲斐がありました(^_^)



◎混成部隊の管理

従来は、個々のモデルクラス内でモデルインスタンスを複製していたのですが、このままでは混成部隊を編成することができません。そこで、ユニットマネージャクラスと個々のモデルクラスの中間にユニットクラスを作成し、ユニット(部隊)内のモデルを個別管理するように改修します。

混成部隊を可能とするために、1つのList型に異なるモデルクラスを格納して管理したいのですが、どうすればC#でスマートに実現できるのかよくわからず、この課題は長いこと避けてました。ですがそろそろC#にも慣れてきたので、ここらで何とかしたいと思います。

C#には幾つかの技法がありますが、自分が望む機能を一番スマートに実装できる技法はどれでしょうか?
抽象メソッド?オーバーロード?インターフェース?う~ん…

こちらのサイトなどで勉強しつつ出した結論は「継承と隠蔽」「仮想メソッドとオーバーライド」の組み合わせでした。
(解説すると長くなるので省略します)

木02

木は7種類からランダムで選んで並べています。ついでに兵士も混成部隊にしたら、後ろの槍兵3人のうち2人が木に隠れたようです。木を密集させれば、伏兵も出来そうですね。

いずれにせよ、昨年からやりたいと思っていた「混成部隊の管理」がようやく実現できましたw



◎板ポリ原点の修正

木を配置したものの、画面をスクロールすると、位置や傾きが微妙にずれる気がします。足元を地面に揃えないと、このような違和感を感じることがありますが、今回は補正値で足元を揃えています。何が悪いのかしばらくわからなかったのですが、その原因が判明しました。

兵士ユニットの場合、向きによっては足元より下に槍が伸びたりするので、足元は画像の中心付近としました。これに合わせて、ビルボードには原点を中心に据えた板ポリを使用しました。

兵士の原点   原点を中心に据えた板ポリ

しかし、この板ポリを木に適用すると、板ポリの配置座標を補正値で足元にずらしても、ビルボードの傾きに微妙な差異が生じるのです。(わかるかな?)

そこで、板ポリモデルの原点を足元に修正したものを別途用意しました。

木の原点   原点を足元に据えた板ポリ

これで違和感が無くなり、綺麗にスクロールするようになりました!(^^)



◎奥行きを増やす

伏兵の際に隠れやすくするために、木の間隔を狭めてみました。

森09   森10

静止画はわりといい感じですが、スクロールすると木の重なり具合が逆になることがあります。ビルボードの影響なんですけど、ちょっと気になります。木の間隔を空けるとこの問題は回避できますが、隙間だらけだと伏兵できません。

…いや待て、半分ずらしながら奥に増やせば良いのでは?

森11

やりました!この森の向こうに兵士が10人いるのですが、殆ど見えませんね!
これで伏兵もバッチリです!


木を何百本も植えるとパフォーマンスに影響してきますが、板ポリなので最後にモデルインスタンシングで高速化できると思います。…たぶんね(笑)



◎次回予告

yohさんの提言通り、ビルボードでうまくいきました(^^)
どうもありがとうございました!


今回は見た目以上にプログラムを大幅改修したので、実はまだ残作業がかなり残ってます(兵士の移動や城のネームプレートなど)。

しかし兵士の移動を実装しても、(混成部隊になったので)槍兵の移動モーションが無いと不自然ですよね。

というわけで、次回は残作業を片付けつつ槍兵の移動モーションを作ります。
できればそろそろ動画UPしたいですね~!

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
七軍壊滅
七軍壊滅
三国志軍記のイベントCG。長雨により漢水が氾濫し、于禁率いる七軍が壊滅。もはや戦にならぬと考え、于禁(左手前)は関羽への降伏を決意する。



◎11月の目標達成度

・活動時間月160時間以上

実績:141h(達成率:88%)


・地形の高さ取得(16h)

実績:11hで完了(達成率:100%)


・地形種別の取得(8h)

実績:9hで完了(達成率:100%)


・城モデルの画像取得/表示(16h)

実績:25hで城モデル完了、14hで城簡易モデル完了(達成率:100%)


・企画見直し(24h)
・全体スケジュール見直し(12h)
・マップオブジェクト属性読込、表示(24h)

実績:未着手(達成率:0%)


・ブログ更新/HP更新(50h)

実績:46hでブログ更新、柵&城モデル登録(達成率:100%)


・その他(10h)

実績:13hでCG監修等実施(達成率:100%)


・予定外の作業

実績:10hで柵モデルの作成/表示 完了
実績:12hで森モデルの作成/表示 作業中



進捗はそこそこ進みましたが、活動時間が目標未達成なのは良くないですね(-_-;



◎作業時間分析

11月から、作業項目別に集計しています。

作業時間集計2009年12月(PDF形式)


○良かった点
・着手した項目については概ね完了した
・予定外の作業にも着手した

○悪かった点
・前半サボりすぎた
・後半進捗が伸びず、月間活動時間が目標未達成であった
・城モデルは目標の倍以上の時間を要した

10月は、前半サボってても後半頑張って月間活動時間を達成したのですが、11月は、ゲームにハマりすぎて後半挽回できませんでした。

今月も既に8日ですので厳しい状況です。少しでも改善すべく、今月から中間目標を設けます。

作業未着手の項目については後述します。



◎オンラインゲーム対策

「大戦略Web」は友人のリベンジ戦に誘われて途中参加したのですが、オープンベータテスト期間内に逆転すべく、ひたすらハマってました。

ゲームは1日24時間進行するため、ピーク時は気になって私生活もままならなくなりましたが、このままではヤバいので、以下の対策を実施しました。

・4サイト中3サイトから撤退
・部隊運用時間帯(集中プレイ時間帯)を制限
・タイマソフトの導入(定期チェック用)

上記の対策や、先日逆転を果たしてプレイが一段落したこともあり、徐々に落ち着いてきました。今は1時間毎に定期チェックしてますが、じきに4時間毎、半日毎になると思います。



◎作業未着手の項目について

アニメユニットがビルボードで実装出来たので「静止ユニットもビルボードで実装出来るだろう」と予想し、地形が確定したら企画とスケジュールの見直しを行うつもりでした。

しかし城モデルを実装しようとしたら、ビルボードや板ポリでは無理があり、結局簡易モデルを作成して実装することになりました。

この様子では、今スケジュールを見直しても、またすぐに破綻してしまいます。まずは静止ユニットに関する不確定要素を減らすことが先決であろうと考え、先に森モデルの作成に着手しました。



◎進捗状況チェック

スケジュールは凍結中です。簡易モデルが必要な条件、その場合の作成パターン、開発コスト等をある程度把握したら、企画とスケジュールの見直しを行う予定です。

当初企画が現在の技術力で実現可能かチェックし、不足部分は補完なり企画変更なりの対策を立てた上で、全体スケジュールを組み直したいですね。



◎12月の目標

・活動時間月160時間以上
 (中間目標:12/15迄に70h以上)

・森モデルの作成/表示(40h)

・企画見直し(24h)

・全体スケジュール見直し(12h)

・マップオブジェクト属性読込、表示(24h)

・ブログ更新/HP更新(50h)

・その他(10h)

森モデルは現在苦戦中のため、目標時間を多めに設定しました。もし早く終わったら、予定外の作業を進めます。



◎次回予告

次回は森モデルの作成/表示の続きです。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
森04
開発中の森簡易モデル
箱形(板ポリ5枚)で作成した森簡易モデル。パフォーマンスは良いが、カメラの角度によっては板ポリであることがバレてしまう。



◎お詫び

ブログの更新をしばらく滞らせてしまいました。更新をお待ち頂いた方々、どうもすみません。

実は病気やトラブルなどではなく、「大戦略Web」というオンラインゲームにはまってました(爆)

オープンベータテスト期間が12/8迄ということで、焦ってやり込んでいたのですが、問題があってテスト期間が大幅延長されました。私個人のプレイも一段落したので、今後はゲーム制作活動に集中します。



◎多彩な森

今回は森モデルを作成します。しかし森ってどんな風に作れば良いのでしょうか?

森の写真/イラスト/ポリゴンなどをネットで手当たり次第に見ていくと、植物の構成/映像表現/製作方法など実に多種多様で際限がなく、漠然と探しても混乱するばかりです。

とりあえず「リアルさよりもパフォーマンス優先」という方針は決まっているので、まずはシンプルな森を作成し、それでダメなら「何がダメなのか?」を考えていきましょう。



◎箱型の森

森は、兵士が隠れて「伏兵」出来るように、奥行きを持たせる必要があります。そうなると板ポリゴンやビルボードでは難しいので、簡易モデルを作ります。

しかし木を一本一本表示するとパフォーマンスが悪くなるので、なるべく森全体で1つのモデルにしたいですね。そう考えると、一番シンプルな基本モデルは箱型です。というわけで、森の写真を加工して箱型に貼り付けてみました。

森01

…思いっきり不自然ですね(--;

写真を貼り付けても、周囲の景観に溶け込まないようです。別の方法を探らないといけませんね。

パフォーマンスに難がありそうですが、試しに木の3Dモデルを一本一本置いてみましょう。



◎Treeモデルの収集

木の3Dモデルなら、フリーでいろいろありそうです。しかし国内サイトは手頃なものが見付からなかったので、海外サイトから探すことにしました。

フリーモデルを探す場合、問題はフォーマットです。海外にメタセコ形式のものは当然ありませんが、Softimageも殆ど見掛けませんでした。Softimageはキャラクタアニメ向けなので、木や自然物のデータは少ないのかもしれません。

結局、LightWave形式や3DS形式のデータを10種類ぐらい集めたのですが、木一本で10万頂点超えるものもありました。ハイポリの世界って凄いな~。

…と感心ばかりもしてられません。このままでは私のXNA環境では表示できないので、頂点数を減らしたり面方向を反転したり色を付けたりして、何とかXNAに持ってきました。木一本で数万頂点ではとてもゲームに使えないので、自作ツールで森を作成して画像を取得します。



◎よくある話

複数の異なるモデルを同時に表示した画像を取得できるようにツールを改修したら、画像ファイルにモデルが写らなくなりました。これでいいはずなんだけどなぁ…ブツブツ…。

なかなか原因が特定できないので、以前のソースと比較しようとしたら、古いモデルに関しては同じ現象になりました。げっ!どのバージョンからおかしくなったんだ!!

現象が発生したバージョンを特定し、さらに前のバージョンとソースを比較したら、if文の条件式で「==」とすべき所を「=」と書いてました。

…よくある凡ミスですが、原因特定に手間取ると疲れるんですよね。条件式の「=」はエラーではじくように、Cの言語仕様を変更して欲しいなぁ。



◎プログラムの整理

よくよく考えると、凡ミスの原因究明に手間取ったのは、プログラムが煩雑だからです。まだ試行錯誤の延長のような部分が残っているので、ここらで整理して今後に備えましょう。

・個別モデル構造体と複合モデル構造体にデータ集約
・セーブフラグ等の細かい機能追加
・コメントの訂正

プログラムを整理すると、ソースコードが7割減になったモジュールもあります。やはり時々整理した方がいいですね。



◎植林

バラバラの種類の木を7本植えました。

森02

たった7本ですが、これだけでも林のような雰囲気があります。数や位置などの調整は後回しにして、簡易モデルが出来そうか試してみましょう。

4方向+天井の画像を取得し、箱型モデルに貼り付けました。

森03   森04

ふむ…斜めから見てもさほど違和感を感じません。
わりといけそうな気がします。

しかし、特定の角度から見ると板ポリであることがバレてしまいます。

森05

4方向ではなく、8方向か16方向にした方が良さそうですね。



◎角丸モデル

最初は8方向の円柱にするつもりでしたが、角が丸いタイプの上半分(半球に近い)が良いだろうと考えなおしました。

問題は、画像をどのように貼り付けるか?です。4方向の場合、四角形の面1つに1枚ずつ貼り付けますが、8方向で面1つに1枚ずつ貼り付けると、見た目がおかしくなります。

そこで、1枚の画像を片側4面に貼り付けてみました。

森06

ほほう…上面はともかく、側面はいい感じですね。

次に、木を21本増殖して28本とし、前後面の画像を正射影で取得しました。

tex_Forest02_ST_00_000   tex_Forest02_ST_01_000

前後2枚の側面画像と上面画像を合成し、モデルのUV設定を行います。

森UV設定   森07

全体の形が直線的で、全然森に見えませんね。わざわざ木を増やしたんですけど、スカスカの方がいいのかな?

森08

うーん…先程よりはマシかもしれませんが、よくないですね。



◎次回予告

モデルの形や画像を変えたりして尚も調整中ですが、今のところあまり良くありません。8方向より4方向の方がマシってのが納得いかないので、もう少し粘るつもりです。

12月になったので、次回は「11月の総括と12月の目標」です。

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

| BLOG TOP |

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