1
パストレースでの反射または屈折の選択
私は自分のパストレーサーに屈折と透過を実装しようとしていますが、その実装方法が少しわかりません。まず、いくつかの背景: 光が表面に当たると、その一部が反射し、一部が屈折します。 反射光と屈折光の量は、フレネル方程式で与えられます 再帰的なレイトレーサーでは、単純な実装は、反射用のレイと屈折用のレイを撮影し、フレネルを使用して加重合計を行うことです。 RTLo=Fresnel()=1−R=R⋅Li,reflection+T⋅Li,refractionR=Fresnel()T=1−RLo=R⋅Li,reflection+T⋅Li,refraction\begin{align*} R &= Fresnel()\\ T &= 1 - R\\ L_{\text{o}} &= R \cdot L_{\text{i,reflection}} + T \cdot L_{\text{i,refraction}} \end{align*} ただし、パストレースでは、1つのパスのみを選択します。これは私の質問です: 偏りのない方法で反射するか屈折するかを選択する方法 私の最初の推測は、フレネルに基づいてランダムに選択することです。別名: float p = randf(); float fresnel = Fresnel(); if (p <= fresnel) { // Reflect } else { // Refract } これは正しいでしょうか?または、何らかの補正係数が必要ですか?私は両方の道を進んでいないので。