2

キャラクターが暗い場所に隠れることができるゲームプロジェクトを始めています。暗い隅に隠れると、他のキャラクターがあなたを見るのが難しくなります。

私が必要としているのは、キャラクターがいる場所の照明条件を計算する方法です。

理想は

double getLightFactor(GameCharacter observer, GameCharacter target)

なぜなら、ターゲットのさまざまな側面がさまざまな量の光に当たるように、光が当たる照明条件が存在する可能性があるからです。しかし、私は喜んで解決します

double getLightFactor(GameCharacter target)

どこから見ているか、さらにはどこから見ても、特定のキャラクターの光を得ることができます

double getLightFactor(int x, int z)

地形内の特定のマップポイントでライトを取得するだけです。

この方法では、ゲームプレイ中に照明条件が変化する可能性があることを考慮する必要がありますが、ターンベースであるため、かなりの計算が許可される可能性があります。私は懐中電灯を使用できるようにするつもりなので、懐中電灯も考慮する必要があります(ただし、モデル化して個別に処理することもできます)。

私は自分のシーンを処理するためにOgre3dを使用しますが、一般的なソリューションや他のエンジンのソリューションも喜んで受け入れます(私の選択したエンジンは石に刻まれていません)。

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

4

3 に答える 3

3

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

Ogre3dエンジンについてはわかりませんが、これは問題を処理するためのかなり一般的な方法である必要があります(結局、シーンを別の視点からレンダリングするだけです...)

于 2009-05-29T07:18:25.053 に答える
0

ああ少年。これはエンジンに大きく依存します。2番目のオプションが必要だと言えます。

照明はどのように機能しますか?それは動的ですか、それとも静的ですか?それが両方の組み合わせであると仮定しましょう。

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

次に、ダイナミックライトを追加する必要があります。これを行う1つの方法は、プレーヤーからの光線(おそらく、プレーヤーのさまざまな部分からのいくつかの異なる光線)を光源に向けて発射することです。ヒットした数を数え、ライトの距離に応じて、それぞれの数に少し追加します。すべてのまともなゲームエンジンには、「光線を発射して何が当たるかを確認する」手順があります。これは、AIが視線をどのように実行するか、どの弾丸が当たるか、壁にぶつかったときに何が起こるかを把握する方法です。速度が遅くなる可能性があるため、あまり多くの光線を発射しないでください。

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

于 2009-05-29T07:48:28.520 に答える
0

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

使用しているライトのタイプに応じて、単純なボックスまたは円のアルゴリズムを使用して、形状を「スタンプ」する必要がある場合があります。

于 2009-06-26T21:58:41.147 に答える