プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
GamefestJapan2008XNADemo
Gamefest Japan 2008 デモプログラム
4種類のデモがあり、各種技法による効果のほどを自分のPCで実感できる。TimeRuler等のコードも含まれている。



◎シェーダーインスタンスとは?

前回冒頭で紹介した資料には「同一の3Dモデルを大量に描画すると遅くなる問題」を回避する手法として、モデルインスタンスが挙げられています。シェーダーインスタンスは、モデルインスタンスの手法の1つです。

目的:
・DrawPrimitiveの呼び出し回数を削減し、高速化を図る

手順(資料抜粋):
・頂点とインデックスデータを最大インスタンス分だけ
 コピーし、各頂点にインスタンス番号を追加する
・インスタンス情報は定数レジスターへ格納する

注意点:
・カスタム頂点を利用するので、通常はHLSLを使う



◎命題

地形モデルは1つだけなので、単純に考えれば、地形モデルへのシェーダーインスタンス適用は不可能(意味がない)です。

ここでは、あくまで「シェーダーインスタンス技術を応用して地形モデル描画を高速化できるか?」という命題と解釈してください。

・地形モデルへの適用は可能か?
・どれ程の効果が期待できるか?
・適用にあたり何をすれば良いか?

こういった根本的な疑問から探っていきましょう。



◎地形モデルへの適用は可能か?

適用可否を判断するため、手順の実現可否を検証します。

・頂点とインデックスデータを最大インスタンス分だけ
 コピーし、各頂点にインスタンス番号を追加する

 →頂点とインデックスデータは既に展開済であるため、
  コピーは不要
  (最大インスタンス量は描画プリミティブ数に相当する)

 →「各頂点にパターン番号を追加する」は実施済
  (インスタンス番号はパターン番号に相当する)


・インスタンス情報は定数レジスターへ格納する

 →定数レジスタに格納すべき情報は存在しない
  (position、Scale、Rotation等は不要)
  (パターン番号は頂点データから取得する)


・上記以外に想定される懸案事項

 →HLSLによる大量のパターンテクスチャの管理、描画


よって、上記懸案が解決できれば適用可能と思われます。



◎どれ程の効果が期待できるか?

地表モデル(DrawIndexedPrimitives呼び出し回数:1回)の前回計測実績は、48~60fpsでした。

よって、地形モデル全体のDrawIndexedPrimitives呼び出し回数を1回にすると、上記に近い描画速度が期待できます。

また、副作用として、地形作成処理が若干高速化します。(インデックスデータの分割処理が不要になるため)



◎適用にあたり何をすれば良いか?

・カスタムエフェクト(HLSL)描画に切り替える
 →頂点からパターン番号を取得し、テクスチャを描画する
 →HLSLでBasicEffectと同等の効果を実装する



◎おや?

皆さんはお気付きになりましたか?
地形モデルにシェーダーインスタンスを適用するはずが、図らずも、前々回のB案と同じになってしまいました。

これって、偶然?それともどこか間違えた?
ちょっと自信無いです。う~ん…。


シェーダーインスタンスもB案も(たまたまですが)目的は一緒です(DrawIndexedPrimitives呼び出し回数を減らすこと)。目的を達成するための手段を検討したら、手段も同じ結論に至っただけのことかもしれません。

B案の考え方って、一般的にアリ(実装しても良い)だったのか…。



◎次回予告

A案をやってるのかB案をやってるのか解らなくなってきましたが、とにかく実装に入りましょう。

スポンサーサイト

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

コメント

こんばんわ
今xsi3.0とACLでゲームを開発していて問題が発生したのですが、検索してこのブログがひっかかったので質問させてもらいます。
もう大分前の日記になるのですが「2008/08/18(月)」に
>一部を除いて黒く表示されたので、最初はテクスチャ
>が再生されていないのかと思いましたが、カメラ位置
>を変えると正常に表示されました。
とあります。今私の環境でも普通に表示したものはちゃんと表示されているのにACLで表示したものだけ真っ黒になってしまっています。
このことの詳細を教えていただければ幸いです。

こんばんは

>このことの詳細を教えていただければ幸いです。

この時は、3Dモデルが逆光になっていたため、モデル全体が影になって黒く表示されました。

逆光は、3Dモデルのエフェクト設定(光源位置)とカメラの位置関係によるものなので、カメラの位置を反対側(例:(0, 0, 100) → (0, 0, -100))に配置すると、逆光にならずに正常に表示されました。

ちなみに、3Dモデルを回転させただけでは変わりませんのでご注意ください。光源設定かカメラ設定を変える必要があります。

コメントの投稿


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

トラックバック


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



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