2

レイトレーシングを含むいくつかの計算を行おうとしていますが、少し混乱しています。N個の幾何学的プリミティブ、l個の光源、およびkxkスーパーサンプリングを含むn行n列の画像があったとしましょう。最悪の場合、いくつの光線交差点を計算しますか?深さdの反射/屈折を追加した場合はどうなりますか?

4

2 に答える 2

7

画像のnxnピクセルごとにkxk光線を起動する必要があります。これらの光線のそれぞれについて、衝突テストを実行する必要があります。これは、非常に単純化された非効率的な方法で、N回の比較に変換されます(それぞれがプリミティブの複雑さに依存します)。ここで、これらの光線のいずれかが鏡面反射または半透明の表面に当たった場合、光線を分割して再帰的に呼び出す必要があります。ただし、今回はスーパーサンプリングを行わないため、反射/屈折方向に1つの光線を送信するだけです。深さdの場合、再帰呼び出しごとに1つずつ、その数の追加の光線を送信します。

したがって、合計で:k ^ 2 xn ^ 2xd。

これは、交差の計算をカウントしないことです。交差の計算では、光線は追加されませんが、複雑さが増します。

ただし、多くの単純化があります。

  • 適応型マルチサンプリング、k^2係数の削減。
  • ピクセル補間、n^2係数を減らします。
  • 衝突テストには、BSPやOctTreeなどのスペースパーティション構造を使用します。
  • ヒューリスティックを使用して再帰を切り取ります。
于 2012-05-16T13:21:17.277 に答える
2

ただし、これが完全な答えであるとは限りません。次の記事を参照してください:http: //blogs.msdn.com/b/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes- a-fully-linqified-raytracer.aspxおそらく、いくつかのカウントコードで変更されたものを利用して、トレースを実行するときにこれらの統計が自動的に提供されるようにすることができます:P

于 2012-05-16T13:27:34.307 に答える