プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
ビルボード07
ビルボードを実装した画面
板ポリゴンが常にカメラを向くようになった。カメラ映りは良くなったが、ユニットの向きが変わってしまうという不都合が発生した。



◎ビルボード用メソッド

前々回のコメントで、HOSSIEさんとyohさんからXNAのビルボード用メソッドを教えて頂きました。

Matrix.CreateBillboard:球面のビルボード
Matrix.CreateConstrainedBillboard :円柱状のビルボード

XNAヘルプの中の「オブジェクトの位置とカメラの位置が近すぎると、行列は正確でなくなります。」という記述が気になりました。そういうものなんですかね?

とりあえず、この便利そうなメソッドを使ってみましょう。



◎やってみよう!

まずは適当にやってみました。

Matrix world = Matrix.CreateScale(10.0f)
  * Matrix.CreateBillboard(pos, mainMap.MapViewPos, Vector3.Up, null)
  * Matrix.CreateTranslation(pos);


ビルボード02

兵士が逆さまですね。板ポリゴンモデルの最初の向きが悪いのかなぁ?

メタセコイアで板ポリの向きを調整します。ええと、Y軸で180度反転させて、X軸で45度…メタセコイアだと、斜め上奥を向いた感じ?

ビルボード03   ビルボード04

おっ!出来たかな?
…いや、常にカメラを向いてくれますが、カメラを地形の端の方に移動すると、モデルの上方向が傾いて横に倒れてしまいますね(右図)。

前々回とちょっと似てるなぁ…「カメラ上方向」の指定がおかしいのかな?或いは球面のビルボードメソッドを使用したのが悪いのか?



◎円柱状のビルボード

円柱状のビルボードメソッドを使用し、メタセコイアでモデルを真上に立てて、奥に向けました。カメラを360度回転させると、モデルが逆光になる角度があったので、BasicEffectのデフォルトライトは切りました。

Matrix world = Matrix.CreateScale(10.0f)
  * Matrix.CreateConstrainedBillboard(pos, mainMap.MapViewPos, Vector3.Up, null, null)
  * Matrix.CreateTranslation(pos);


2009/10/01追記:最下行の座標指定は余計でした

ビルボード05   ビルボード06

今回は、今までの中で一番いいですね。ビルボードのプログラムとしては、成功したのかな?
この画像だといまいち向きがわかりにくいので、板を一色に変えて確認しました。

ビルボード青板

カメラをいろいろ動かしてみましたが、問題ありません。ビルボードプログラミング成功です。



◎近くのオブジェクト

カメラをオブジェクトに近付けていくと、ある地点から急激に回転したり、パッと消えたりします。ははぁ…これがXNAヘルプの「行列は正確でなくなります」というやつかな?

これを対処するために、Matrix.CreateConstrainedBillboardのオプションを指定しました。

カメラの前方ベクトル:注視点 - カメラ位置
オブジェクトの前方ベクトル:カメラ位置 - オブジェクト位置

ところが、オプションに上記の値や固定値などを入れても、現象が変化しません。何か勘違いしてますかね?

参考までにビルボード公式サンプル内を検索してみましたが、Matrixのビルボードメソッドを使用してません。参考にならないなぁ。

まぁ、いざとなったらカメラ位置を制限するという手もあるので、この問題はとりあえず保留とします。



◎ユニットの向きの問題

ビルボードを実装して改めて感じたのは、ユニットがどこを向いているのか分からなくなる、ということです。一応予想はしてましたが、やっぱりそうなるのか…。
このゲームではユニットの向きが重要なので、この問題は何とかしないといけません。

1つ考えたのは、ユニットの向きとポリゴンの角度によって、絵を切り替えるという手法です。この手法ならユニットの向きを表現できますが、カメラの移動中に突然ユニットの絵が切り替わるので、見た目に違和感がありそうです。

違和感を緩和するには、絵のパターン数を増やすことです。例えば、兵士が1度ずつ回転した画像を360枚用意すれば、かなり自然な感じになりそうです。しかし、その調子でアニメパターンを用意したら、画像枚数が膨大になってしまうので、そこまでは出来ません。とりあえず、8方向で試してみましょう。



◎次回予告

ビルボードは実装できましたが、ユニットの向きは何とかしないといけないですね~。

というわけで、次回はその対処を試みます。

スポンサーサイト

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

コメント

ビルボード用のテクスチャ

ダービースタリオンDSなんかだと、角度によって
ビルボード(競走馬)用テクスチャを何種類か持って
適宜切り替えています。恐らくそちらで実装されようと
しているのと同じ仕組みでしょう。

さすがに1°ずつとかいうことはないですが、
45°ずつ16枚は用意してるんじゃないかな?
左右対称なので実際は半分ほどですけど。

カメラ近くのものはちゃんとした3Dモデルにするなど
一種のLODをやる手もありますが、大変かな。

一般的な手法だったのですね

こんばんわ~

>ダービースタリオンDS
この手法の市販ゲームが既にあったのですね。見当違いなアイデアじゃないかと少し不安だったのですが、安心しました。

>一種のLOD
余力があればやってみたいと思いますが、まずゲームとして形にしてからですね(^_^;

コメントの投稿


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

トラックバック


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



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