2

私はレイ トレーシングに関するプロジェクトを行っています。現在、基本的なレンダリングを行うことができます。

下の画像には次のものがあります。

ミラー反射、屈折、テクスチャ マッピング、およびシャドウ。

ここに画像の説明を入力

私は光沢のある反射をしようとしていますが、これは私が得ているものです。この光沢のある反射画像に問題があるかどうか誰か教えてもらえますか?

ここに画像の説明を入力

比較すると、下の画像はミラー反射からのものです

ここに画像の説明を入力

これは、基本的に、一次光線がオブジェクトと交差すると、光沢のある反射に関する私のコードです。この交点から、さらに 80 本の光線をランダムに発射し、この 80 本の光線の色の平均をとります。このコードで私が抱えている問題は、x と y の大きさです。光沢のある反射光線がランダムになりすぎないように、これらを何らかの値 (この場合は 16) で割る必要があります。このロジックに何か問題がありますか?

             Colour c(0, 0, 0);

                     for (int i = 0; i < 80; i++) {

                          Ray3D testRay;
                          double a = rand() / (double) RAND_MAX;
                          double b = rand() / (double) RAND_MAX;
                          double theta = acos(pow((1 - a), ray.intersection.mat->reflectivity));
                          double phi = 2 * M_PI * b;
                          double x = sin(phi) * cos(theta)/16;
                          double y = sin(phi) * sin(theta)/16;
                          double z = cos(phi);
                          Vector3D u = reflect.dir.cross(ray.intersection.normal);
                          Vector3D v = reflect.dir.cross(u);
                          testRay.dir = x  * u + y * v  + reflect.dir;
                          testRay.dir.normalize();

                          testRay.origin = reflect.origin;
                          testRay.nbounces = reflect.nbounces;
                          c = c + (ray.intersection.mat->reflectivity)*shadeRay(testRay);
                     }
                     col = col + c / 80;
4

1 に答える 1

5

コーディング時に決して優れていないハードコーディングされた定数とは別に、画像は全体的に見栄えがしますが、より微妙な問題があります。

モンテカルロ積分は、これらのサンプルを生成した確率密度関数 (pdf) で割った被積分関数を合計することで構成されます。したがって、コードには 2 つの問題があります。

  • Phongモデルにpdfを使用しているようですが、pdfで割っていません(よく認識していれば、少なくとも均一なpdfではありません)
  • pdf をさらに変更する理由は明らかではありませんが、コンポーネントxyコンポーネントをさらにスケーリングしました。1./16.

アイデアは、フォンのモデル時間の余弦法則に従って光線を正確にサンプリングできる場合、被積分関数に BRDF を掛ける必要さえないということです。
pixel value = sum BRDF*cosine*incoming_light / pdf
実際には、 BRDFを正確にサンプリングできる正確な式はありません (ランバートのものは別として)。そのため、以下を計算する必要がありますBRDF*cosine = pdf

もちろん、あなたの画像は全体的に見栄えが良いので、物理的な妥当性に関心がない場合は、それでよいかもしれません。
コンピュータ グラフィックスとモンテカルロ統合 (適切な式を含む) で使用されるさまざまな pdf に関する優れた情報源は、Philip Dutré によるGlobal Illumination Compendiumです。

于 2013-04-06T04:15:19.067 に答える