プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
地形4種類(道なし)
開発中の自作地形
頂点データを6つに分割した。テクスチャが4枚以下であれば20fps以上で表示される模様。画面は道モデル無し状態。



◎謎の現象

「カメラ位置や注視点を特定の座標に設定すると、地形モデルの一部が消失することがある」という謎の現象が発生しました。

インデックス廃止04A

画面左上にカメラ座標を表示しました。この位置からカメラを手前に引くと現象が発生します。

インデックス廃止04B   インデックス廃止04C

これは一例で、カメラ位置によっては、カメラ位置を変えずに注視点を変更するだけで発生します。手前の地形が表示されて、奥の地形が消えることもあります。

何でしょうね?この現象は?



◎原因調査

謎の現象を解明するために、とりあえず思い付く限りのことを試してみました。

・単独モデルでも複数モデルでも再現する
 →描画速度やメモリ容量に関連する可能性は低い

・他のテクスチャに差し替えても再現する
 →テクスチャの模様は関係ない

・テクスチャのGenerate Mipmapsを変更しても再現する
 →Mipmap設定は関係ない

・BasicEffectでもカスタムエフェクトでも再現する
 →エフェクト設定は関係ない

・透過処理をONにしてもOFFにしても再現する
・アルファ無しテクスチャに差し替えても再現する
 →透過処理やアルファ設定は関係ない

・スプライトバッチを外しても再現する
 →スプライトバッチは関係ない

・法線データを全て真上(0, 1, 0)に設定しても再現する
 →法線は関係ない

・頂点データ、ワールド行列、プロジェクション行列等は
 一切変更していない
 →View行列のカメラ座標と注視点のみ影響している

・地形の下に別のモデルを配置すると、現象再現時は
 下のモデルが表示される
 →地形の手前に何かが表示されて地形が隠れた
  わけではない

ソースを何度見なおしても、設定をあちこち変更しても、原因がわかりません。まいったね、こりゃ…。



◎PIXを利用した表示状態解析

仕方がないので、PIXで表示状態を詳細にチェックすることにしました。

PIXデバッグ画面

正常時と現象再現時のフレームをキャプチャし、頂点データ、テクスチャ設定、デバイス設定等を1日がかりで総チェック。隅々まで調べたつもりですが、どこにもおかしな差異は発見できませんでした。

これだけ調べて手掛かりすら掴めないなんて…かなりゲンナリです。



◎休養

ここまで全く進展がありませんが、ちょっと疲れて気が滅入ってきたので、丸1日休養にあてました。

行き詰った時には気分転換も必要です。GWの一部前借りということで(笑)



◎原因判明

休養明け。飛行テストプログラムを改造したり、PIXの値をトレースしたりしましたが、なかなか進展はありません。

ふと気になってDrawPrimitivesメソッドのマニュアルを確認したら、引数primitiveCountの説明に「使用できるプリミティブの最大数を調べるには、MaxPrimitiveCount を確認します。」とありました。

で、その値を調べたら、65535でした。うわ~ショック!!
地形モデルのプリミティブ数は倍近くあります。つまり、ハードの上限値を超えていたわけです。

エラーにならないし(インデックスは上限超えるとエラー)、複数モデルでも正常に表示されたりするので、なかなか気付けませんでした。

ハード制限に気付かずに3日も悩むなんて…悔しいやら情けないやら。



◎6分の1地形

頂点数が上限を超えているなら、頂点データを分割すれば問題を回避できるはずです。とりあえずデータを6つに分解し、そのうちの1つを表示するようにしました。

インデックス廃止05

ああ、やっとまともに表示されましたね。しかし頂点数は全地形の6分の1なのに、フレームレートは8fps。

先にマテリアルバッチを適用しましたが、それだけではフレームレートは変わりませんでした。頂点をさらに5倍描くことを考えると、B案の技術を導入しても、本当に早くなるのか不安です。



◎テクスチャは4枚以内で

いろいろ試していたら「5枚目のテクスチャ切り替えが極端に遅い」ことに気付きました。テクスチャを4枚以内に抑えるだけで、軽く20fps以上出るのです!

地形4種類(道なし)
道なしバージョン

5地形モデルのうち、1つのテクスチャを他と同じテクスチャに指定した場合は24~25fps、地形モデルを4種類に減らした場合は27~28fpsです。つまり、4枚目から5枚目へのテクスチャ切り替えに16fps、6万頂点の描画に3fpsかかっている計算になります。

これは推測ですが、ハードまたはXNAが同時にテクスチャを扱う上限が4枚と決まっているのでしょう。もしかしたら、4枚以内だとハードの機能を利用して、5枚以上はソフトウェアで描画しているのかもしれません。

これほど違うなら、何がなんでも4枚以内に抑えるべきかも?!



2009/4/30追記
「5枚目のテクスチャ切り替えが極端に遅い」というのは誤りで、実はメモリキャッシュ効果でした。ごめんなさい。



◎次回予告

ずーっと1桁fpsで四苦八苦してましたが、急にヒントらしきものを見つけたのかもしれません。他のモデルを同時に表示した場合とか、いろいろ試してみます。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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