2009-05-29 6 views
2

私は暗い領域で文字を隠すことができるゲームプロジェクトを開始しています。暗いコーナーに隠れていると、他のキャラクターがあなたを見るのが難しくなります。ゲームロジック/ AIで使用するために3Dシーンでオブジェクトがどの程度可視かを計算する

私が必要とするのは、照明条件がキャラクターがどこにあるかを計算する方法です。

理想的には、私は、光がターゲットの異なる側面がライトの異なる量でヒットしているので、落下照明条件があるかもしれないと仮定するので

double getLightFactor(GameCharacter observer, GameCharacter target) 

を持っているだろう。 しかし、私は喜んでばかりで特定のマップポイントで光を取得するために関係なく、あなたが

double getLightFactor(int x, int z) 

から、あるいはを見ている場所の特定の文字のための光を得るために

double getLightFactor(GameCharacter target) 

のために解決します地形。

この方法では、ゲームプレイ中に照明の状態が変化する可能性があることを考慮する必要がありますが、それはターンベースであるため、重い計算が許可される可能性があります。私は懐中電灯を使用することを可能にするつもりですので、それらも考慮に入れる必要があります(ただし、モデル化して別々に扱うことができます)。

私はOgre3dを使用して自分のシーンを処理しますが、私は喜んでジェネリックソリューションや他のエンジンのソリューションを受け入れます(私の選択は石ではありません)。

アイデア、論文または関連するものは大歓迎です!

答えて

3

現在の光の設定を考慮に入れて、オブザーバの視点からのシーンを(低解像度でも)オフスクリーンバッファにレンダリングできます。次に、ターゲットキャラクターの中央付近の平均明度値を計算することができます。

私はOgre3dエンジンについてはわかりませんが、これはあなたの問題を処理するためではなく汎用的な方法でなければなりません(それだけで後のすべての異なる視点からシーンをレンダリングだ...)

+0

私はこの回答が好きです。主に私が同じと思っていたので)ターゲットが影に隠れている場合は、ターゲットをレンダリングせず、オブザーバーは画面上でそれを見ることはできません。この問題にはいくつかの修正が必要です。なぜなら、ターゲットを20%の可視状態にしたいからです。 – ralphtheninja

+0

私はそのアイディアが好きで、それを考慮します。しかし、それは十分に速くなるだろうか分からない。 –

0

ああ少年。これはエンジンに大きく依存します。私は今、あなたに第二の選択肢があることを伝えることができます。

照明はどのように機能しますか?それは動的か静的ですか?両方の組み合わせだとしましょう。

静的照明の場合は、近くのライトマップを確認してください。いずれの方法でも、頂点ベースまたはテクスチャのいずれかです。近くのいくつかの点でサンプリングして平均化することができます。エンジンがモデルのライティングをどのように計算し、グラフィックスコードを掘り下げ、実際にデータがどこから来ているのかを見て、同じソースを使うことができます。いくつかのゲームには容積測定の照明情報があり、Quake 2はこれをBSPツリーのリーフ単位で行い(チェックは簡単)、Quake 3はボリュームテクスチャを持っています(チェックも簡単です)。

次に、ダイナミックライトを追加する必要があります。あなたがこれを行う方法の1つは、プレイヤーからの光線を(おそらくいくつかの異なる光線をプレイヤーの異なる部分から)光源に向けて照射することです。ライトがどれほど遠いかによって、どれだけ多くヒットしたかを数え、それぞれの数値に少し追加してください。すべてのまともなゲームエンジンは、 "射撃線とそれがぶつかるのを見る"ための手順を持っています、それはAIが視線をどのようにしているのか、どの弾丸が当たったのか、遅すぎる可能性があるので、あまりにも多くの光線をあまりにも遠くに撮影しないでください

この値をあまりにも頻繁に再計算する必要はありません。新しい光源が作成されるたびにそれを行うことができます。

0

環境の複雑さに応じて、地形にオーバーレイされた2Dライトマップを不正行為で使用することができます。各セルは、近くの光源に基づいて光強度値を有する。移動するオブジェクトであっても計算するのが速く、場所の「暗さ」を決定するために高速にアクセスできます。

ライトのタイプに応じて、単純なボックスまたはサークルアルゴリズムを使用してシェイプに「スタンプ」しなければならない場合があります。

関連する問題