プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
ShadowMappingサンプル
シャドウマッピングサンプル
深度テクスチャを作成する公式サンプル。ライトを動かしながら、深度テクスチャの様子を確認することができる。



◎ネームプレートを表示すべきか?

山の反対側の部隊は表示しないようにしましたが、ネームプレートは表示されてしまいます。

ユニットの深度判定01

赤矢印のネームプレートは、部隊が山の反対側にいるケースです。

部隊はDepthBufferEnableやDepthBufferWriteEnableの制御で山の向こう側に隠れたのですが、ネームプレートは2Dスプライト画像なので、同じ方法では対処できません。個々に深度値を設定すれば上手くいくかもしれませんが、適切な深度値はどのように算出すべきものなんでしょうか?

…いや、ちょっと待ってください。黄矢印のように『部隊は山に隠れるがネームプレートは山の上になるケース』や、『部隊は森の中でネームプレートは森の上になるケース』はどうでしょうか?

その場合、ネームプレートの深度を適切に設定したとしても、伏兵した部隊の頭上にネームプレートが表示されてしまいます。これでは伏兵の意味がありません。

というわけで、『ネームプレートの深度を適切に設定する』ではなく、『部隊が描画されているか(部隊の深度は最前面か)を判定する』を命題とし、その判定結果に基づいてネームプレートを描画するようにします。



◎深度バッファの値を取得する方法

深度バッファには、‘最前面の物体からカメラまでの距離’が0~1の相対的な値で格納されています。この値を取得してユニットの深度と比較したいのですが、深度バッファの値はどのように取得すれば良いのでしょうか?

こちらによると、深度バッファの内容を直接取得することはできないとのこと。えっ!?!そうなの!?

…ヘルプを確認すると、その通りでした。深度テクスチャを作成するしかなさそうです。

深度テクスチャの作成は難易度が高く、特定ピクセルの色をゲットするのでコスト(処理時間)もかかりそうです。メンドクサイ上に、遅くて使い物にならない恐れがあるなんて…正直やりたくないッス(--;

他に良い方法は無いかと考えたのですが…ユニット同士なら深度を自分で管理する方法もありますが、地形の起伏の深度を考慮すると、深度バッファーから取得する以外に方法は無さそうです。

こうなったら仕方がない。使い物になるかどうか試してみましょう!!



◎公式サンプル

こちらの公式サンプルで深度テクスチャーの作成方法を勉強しましょう。

ShadowMappingサンプル

中身をちらっと覗いてみると…レンダーターゲットは使用経験があるのでそこそこ理解できますが、真面目にやると面倒臭そうですね。

とりあえず、サンプルの深度テクスチャーから深度を取得できるか確認しましょう。



◎技術資料

深度テクスチャーの深度を確認するために、サンプルコードを用意しました。

テクスチャカラーを配列に格納する

技術的な価値はありませんが、デバッグ等の使い勝手は良さそうなので、HPの技術資料に追加してしまいましたw



◎深度取得テスト

サンプルの深度テクスチャーカラーを配列に格納して色を確認すると…ヘルプに記述された通り、RGBAのうちRのチャンネルのみ値が格納されました。このままだと深度値が256段階になってしまうので、精度が足りず山の奥か否か正確に判断できない可能性があります。サーフェイスフォーマットを変更して、精度を上げる必要があるかもしれません。

しかし何より問題なのは、Texture2D.GetData()の遅さです。何と60→4fpsまで落ちてしまいました!
噂には聞いてましたが、まさかここまで酷いとは…><

テクスチャの解像度は2048×1024だったので、1280×768にすれば多少早くなると思います。とは言え、焼け石に水のレベルですね(ーー;



◎次回予告

このままでは使い物にならないので、次回は別の方法を探ります。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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