2

私は少し苦境に立たされており、この問題に遭遇した最初の人ではないと確信しています。

複数の部屋があるオフィスビルをモデル化しようとしています。部屋ごとにライトのオン/オフを切り替えられるようにしたい。これが私が遭遇している問題です:

問題1:フォワードレンダリングでは、シャドウを使用できないため、ポイントライトが壁から漏れます(つまり、ライトがオフになっている部屋は、隣接する部屋から光を受け取っているため、真っ暗ではありません)。

解決策:最初は、シーンを2回ライトマッピングすることでこれを解決していました。1回はライトをオンにし、もう1回はライトをオフにしました。プレーヤーがライトをオフにしたとき、私は部屋のすべてのレンダラーをすべて黒のライトマップに切り替えて、ライトをオフにしました。

問題2:上記の解決策は悪くありませんが、私の動的オブジェクトはすべて、壁から漏れる光を受け取ります。ライトプローブを使用してこれを修正できると思います。ただし、個々のプローブのライトマップを変更する方法がわかりません(つまり、部屋のプローブはオフのライトマップを使用し、部屋の外のプローブはオンのライトマップを使用します)。

シャドウ付きの遅延照明を使用すると、すべてが正常に機能しますが、fpsが60から約20に低下します。

ありがとう

4

1 に答える 1

3

2つのライトマップを持つことは確かに解決策ですが、静的な拡散シーンに制限されます。それ以外のもの(動くオブジェクトまたは鏡面反射シーン)には、より高度な技術が必要です。

  • 簡単で安価な解決策は、「セルとポータル」(このペーパーなど)を使用して、最初の解決策を維持することです。このアプローチは、異なる部屋間のリンクを表すグラフを作成し、光が漏れるのを防ぐ必要があります-少なくともおおよそ。

  • より良い解決策は、シャドウマップを使用することです。基本的に、各光源の視点からシーンの深度マップを1回レンダリングし(時間厳守の場合)、簡単なテストで現在のポイントが影になっているかどうかを判断できます。もちろん、多くの部屋がある場合は、この方法をセルおよびポータルの分解とマージして、計算を高速化することができます。

  • おそらくさらに良い解決策は、シャドウボリュームを使用することです。このアプローチでは、各光円錐(またはスポットライトの形状)とシーンのジオメトリの間の幾何学的交差を計算します。これを使用して、現在のポイントがシャドウボリュームの内側にあるか外側にあるかを判断できます。

ネットで検索すると、これらすべてがソフトシャドウに拡張されます。

于 2013-03-09T00:03:05.133 に答える