1

レイトレーサーにソフトシャドウを実装しようとしています。そのために、交点からエリア光源に向かって複数のシャドウレイを照射する予定です。球形のエリアライトを使用することを目指しています。これは、光線の方向ベクトルに対して球上にランダムな点を生成する必要があることを意味します(光線は原点と方向で指定されることを思い出してください)。

球上にランダムな点の均一な分布を生成する方法を探しましたが、それらは私が探しているものよりも少し複雑に見えます。球上にこれらの点を生成する方法を知っている人はいますか?私の球体領域の光源は、XYZワールド座標、RGBカラー値、およびr半径によって単純に定義されると思います。

私はこのコードをGraphicsGemsIII、126ページから参照しました(これもここここで説明したのと同じ方法です):

void random_unit_vector(double v[3]) {    
double theta = random_double(2.0 * PI);
double x = random_double(2.0) - 1.0;
double s = sqrt(1.0 - x * x);
v[0] = x;
v[1] = s * cos(theta);
v[2] = s * sin(theta);

}

これは問題なく、私はこれを理解していますが、私の球体光源は、3DXYZ座標と半径で指定された空間のあるポイントにあります。数式が単位球で機能することは理解していますが、数式が球の位置をどのように説明しているかはわかりません。

ありがとう、そして私は助けに感謝します!

4

1 に答える 1

1

方向を生成する式(つまり、球上の点)と、球の方向/方向/を生成しようとしているという事実を混同しているようです。

与えた式は、ランダムな光線を均一にサンプリングします。単位球上にX、Y、Zトリプルが見つかります。これは、方向と見なすことができます。

実際に達成しようとしているのは、方向(球上の点)を生成することですが、球に向かう特定の方向(または円錐に制限されている:カメラの中心から取得する円錐)を優先しますおよび球光源のシルエット)。そのようなことは2つの方法で行うことができます:

  • 正弦ローブを使用して、球面光源の中心に向けて重要度サンプリングを行います。
  • 上で定義されたコーンでの均一なサンプリング。

最初のケースでは、式は「グローバルイルミネーションコンペンディウム」に記載されています:http://people.cs.kuleuven.be/~philip.dutre/GI/TotalCompendium.pdf アイテム38、21ページ)。場合によっては、棄却サンプリングを行うこともできますが、そのための厳密な式があると確信しています。

最後に、最後のオプションがあります。数式を使用して、結果の(X、Y、Z)をシーン内のポイントと見なし、それを球の位置に変換して、カメラからのベクトルを作成することができます。それに向かって。しかし、それは深刻な問題を引き起こします:

  • 球体ライトの後ろに向かってベクトルを生成します
  • 後でモンテカルロ統合に必要となる、生成された一連の方向のpdfの式はありません。
于 2012-12-09T07:53:10.440 に答える