2

かなり長い記事になってしまいましたが、読んでくださった方、ありがとうございます!

そのため、私自身の個人的なプロジェクトのために、作成したレイ トレーサーで使用するフォトン マップを実装していますが、レンダリングの方程式を理解するのに苦労しています。一般的なフォトンとコースティクス フォトンの両方を分散させ、それらを KD ツリーに格納し、レンダリングに使用するためにツリー内で効率的に検索するコードを既に作成しました。

したがって、レンダリング方程式は次のように与えられます。 Lr(x,w) = Integral( fr(x, w', w) * Li(x, w') cos(Theta i) * dw'i )

ここで、x はシーン内の特定のポイント、w' は入射光の方向、w は反射光、Theta_i は入射角度です (私はそう思います)。

最初の質問:

これは、BRDF (双方向反射率分布関数) である項 fr(x, w', w) に関するものです。これを正しく理解しているかどうかはわかりませんが、基本的にBRDFは基本的にシェーディング機能ですか?つまり、私のプログラムの基本的なレイ トレーシング機能のために、直接照明と反射を行うためにフォン反射モデルを使用しました。私のフォンリフレクションコードを再利用し、それを使用して積分でBRDFを表すことは有効ですか?

2 番目の質問: 私のもう 1 つの質問は、レンダリングの方程式をその構成要素に分解するときに関するものです。たとえば、拡散相互反射を計算するには、次のようにします。

拡散反射率 = Integral( fr,d(x, w', w), * Li,d(x,w') cos(theta_i) dw'i)

そのため、任意の時点で、その周囲に拡散反射光子の束を既に保存しています。この方程式から私が理解していることから、単純に各光子の強度にフォン モデルの拡散成分を掛け、角度の余弦を掛けて、それらをすべて加算するだけでよいのでしょうか?

その特定のセグメントのコードは次のようになります。

Color result = Color(0,0,0) // r = g = b = 0;
for(int i = 0; i < # photons surrounding point x; i ++)
{
   result += Phong_Diffuse(photon_i, x, camera_ray) * photon_i.color * photon_i.angle
}

次に、これを Direct Illumination ( Phong_DIFF_&_SPEC(light_source, x, camera_ray) ) から取得した色とミラー反射から取得した色に追加します。私がここでやっていることは正しいですか?

思うような効果が得られていないようです。理由の 1 つは、各フォトンが Light_source / num_Photons の強度を持つようにフォトンをスケーリングすると、1 か所に数百個のフォトンがあっても、合計 500,000 個のフォトンがあるため、シーンにほとんど影響を与えないためです。また、フォトンをスケーリングしたり、スケーリングをごまかしたりしないと、色がまだずれているように見えます。

さらに、Cornell_box でテストを行った場合、拡散反射を使用しても、他のコーネル ボックスで見た写真に基づくと、天井は非常に暗いままで、はるかに明るいはずです。

フォトンを直接視覚化しようとしたため(したがって、シーン全体がフォトンがある色付きのドットで構成されているだけです)、フォトンが大まかに見えたので、フォトンを保存する方法に問題があるとは思いません均等に分布し、正しい場所にあり、特定のポイントに最も近いフォトンを収集していることをテストすると、それも機能しているようです.

この長いとりとめのない混乱をわざわざ読んでくれた人、そして返信に時間を割いてくれた人に感謝します! =)

4

1 に答える 1

2

最初の質問については、答えはイエスです。iBRDF は、入射方向を持つ光子が方向に向かって反射さoれる (または吸収される)確率を表す単なる確率分布です。それはあなたの Phong モデルも説明しています。

2 番目の質問については、問題は倍率にあると思います。半径の近傍で光子を収集する場合R(R定数であるか、k 個の最近傍によって変化するか)、累積されたエネルギーを半径の円盤の面積で割る必要がありますR(したがって、この面積がはるかに小さい場合は、よりも、これはあなたの強度を高めます)。それとは別に、あなたの計算は正しいようです:すべての光子をその方向で取り、それらをBRDFで使用して、それらがカメラに向かって反射される確率を確認します(または、別の言い方をすれば、カメラに向かって反射されたときに光子のエネルギーがどれだけ残っているかを言います) )、すべてを合計します。あなたには拡散コンポーネントが含まれていると思いますPhong_Diffuse(したがって、その名前です)。もしそうなら、それも正しいです。
もう 1 つの可能性は、拡散反射が弱すぎて目に見える拡散相互反射を生成できないことです。

于 2012-12-06T07:47:25.453 に答える