シーン内の多くのライトを処理する(シェーダーを使用)


9

シーンで多くのライトを処理する方法に興味があります。ダンジョン(ライトがそこにある)などのロールプレイングゲームの非常に大きなマップを考えると、遅延照明については知っていますが、それは多くのライトをレンダリングする方法にしか答えません。しかし、私の質問は次のとおりです。多くのライトをレンダリングしない方法。シーンに影響を与えるライトのみをレンダリングすることが明らかに望ましいですが、これをアーカイブするためのテクニック/アルゴリズムはわかりません。地図のどこかにあるからといって、500のポイントライトをレンダリングすることを望んだり、レンダリングしたりすることはできません。しかし、光からプレーヤーまで直線を取り、その間に何かがあるかどうかをテストすることはできません。距離も良い指標のようには見えません。(日光?)

tl; dr:どのライトがシーンに影響を与えてそれらをレンダリングするだけなのか、どうしたらわかりますか?


OpenGLまたはDirectX?
クラベミール

6
実際には、500個のライトは、すべてのシャドウを必要としない限り、据え置きライトで

たとえば、ポイントおよびコーンリグの場合、オクルージョンカリングを使用できます。ポイントライトは単なる球です。どこからでも指向性のある光が見える
鬼界丸

4
@Darkwings基本的に、ここではblubbが何を要求したかを説明しています。どうやって歩くの?まあ、ここでの解決策はただ歩くことだと思います!(私のために働きました。);-)「そのソースが視錐台の何かを照らしているかどうかを知る必要があります。」<-それはまさに彼が求めていることであり、彼はそれをどのように行うことができるかを知りたいのです。^^ Kikaimaruからの円錐形/球形のものはおそらく役立つでしょう。
cooky451

1
OPにとっては、視錐台をチェックすることは距離だけについて言及しているため、明白ではありませんでした。各ライトには、それを決定するいくつかのパラメータがあります。指向性ライトが使用される場合、それらはあらゆる場所に到達し、スポットライトにはターゲットゾーンがあります(そのため、ベクタープレーンの交差で解決できます)。シーンに影響を与えたいライトのラインについてもっと考える必要があります。本当にたくさんのライトが互いに非常に接近している場合、(シャドウキャスティングのために)近似する方が良いでしょう。IE:アンティークシャンデリアのキャンドル100本は、1つのライトとして扱うことができます。
Darkwings、2012年

回答:


5

境界ボリュームよりも簡単です。

各ライトに半径を割り当てます。シーンのレンダリングに関しては、シーンオブジェクトと各ライトの間の距離がライトの半径よりも小さいかどうかを確認してください。その場合はライトを使用し、それ以外の場合はスキップしてください。

パフォーマンスの重要度に応じて、ほんの少し複雑になります。

これを使用して、ある種の広範なフェーズチェックを行うこともできます。グリッドセルごとにライトへのハンドルを格納する空間グリッドを定義し、シーンオブジェクトの最大半径内のセルにあるライトに対してのみ距離チェックを実行します。


5
+
1-

少し遅れて...とにかく、それはまさに境界球です。その方法を使用しても、壁などによって完全に隠されているためシーンには関係がないライトをレンダリングします。また、すべての光があらゆる方向に向かうわけではありません。
Darkwings、2012

5

私が考えることができる最も簡単な方法(正直に言うと、私が考えた唯一の方法です)は、各ライトにバウンディングボリュームを与えることです。バウンディングボリュームが視錐台(または、視錐台のバウンディングボリューム)と交差する場合は、ライトを適用します。

可視オブジェクトには影響しませんが、適用されるライトはまだ存在する可能性がありますが、シンプルで高速です。シーングラフのスマートな配置は、ほんの少しの交差チェックでほとんどのライトをカリングすることを意味します(オブジェクトカリングの場合と同様です)。

太陽のようなものには、境界ボリュームがない可能性があります(常に適用されることを示すため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.