誰かがラジオシティ照明を私に説明できますか?


8

私はすでにアンビエントオクルージョンの基本を理解しています。私はレイキャスターを持っていて、半球の周りの光線を均一に発射することができます。それらはラジオシティに必要なものの基本であるように見えますが、そこからどこへ行くべきか分かりません。それぞれの顔からどれくらいの光が出るのですか?(私はminecraftのようなキューブでゲームを作っています)その後、私は何をしますか?


3
なぜ「minecraft」というタグなのですか?
Valmond 2011

回答:


9

実際、ラジオシティに必要なのはそれだけです。2つの異なる(ただし等しい)公式があります。1つは、各パッチ(おそらく顔)から光を「放射」または放射することであり、もう1つは、各パッチに光を「収集」または受信することです。これを何度も繰り返し行うと、ラジオシティが得られます。

最初のステップは、どちらの方法にも光源がなければならないため、光がどこから発生するかを理解することです。ギャザーメソッドを実行する場合は、ポイントライトをうまく処理できないことを警告する必要があります。パッチを光でシードする(個別に計算する)か、奇妙な結果が得られます。radiateメソッドでは、通常どおりポイントライトから放出しますが、他のパッチからのレシーバーとしてそれらを無視します。

任意の数のバウンス(または反復)の後で停止することができますが、実行する回数が多いほど、ソリューションは向上します。キューブの両側をパッチと見なすことができるため、パッチを簡単に作成できます。より詳細なものが必要な場合は、それらの面をさらに細かく分割できます。

放射の例では、これはループの基礎として使用できます。

while(!done) {
   foreach Patch a {
     a.shootRays(n);
     foreach ray r {
       Patch b = r.firstIntersectingPatch();
       float modifier = 1 / ((distance(a,b)^2)
       b.incidentLight += (a.exidentLight / n) * modifier; 
     } 
   }
  foreach Patch a {
    float modifier = a.absorption;
    a.exidentLight = (a.incidentLight * modifier) + a.emission;
    a.incidentLight = 0;
  }

  done = goodEnough() ? true : false;
}

収集メソッドの場合、最初のループが少し異なります。

      foreach Patch a {
         a.shootRays(n);
         foreach ray r {
           Patch b = r.firstIntersectingPatch();
           float modifier = 1 / ((distance(a,b)^2)
           a.incidentLight += b.exidentLight * modifier; 
         } 
         a.incidentLight /= n;
       }

最初のモディファイヤは、入射光のパッチごとのモディフィケーションに使用されます。最も一般的な使用法は、上記のように距離からの減衰です。2番目のモディファイヤは、マテリアルの吸収など、入射光をグローバルに変更するためのものです。ほとんどのパッチでは、a.emission変数は0です。

0以外のエミッション値を持つのは、光源であるもの(または、上記のギャザーメソッドを使用している場合は点光源の影響を直接受けるもの)のみです。

goodEnough()関数には多くのことが考えられます。反復回数を数えるだけの場合もあれば、シーン内の光の総量を調べる場合もあれば、他に考案したテストの場合もあります。この部分は本当にあなた次第であり、あなたが十分に良く見えると思うものはまだ妥当な時間で終了します。

撮影する光線が多いほど、ソリューションは正確になりますが、プロセスは遅くなります。同じことは、パッチの数とループの反復数にも当てはまります。最終的な光の値を保存する方法はあなた次第です。テクスチャ内にある場合もあれば、キューブに値として格納されている場合もありますが、適切な数のパッチを使用してリアルタイムで実行するのは現実的ではないと思います。


こんにちは、チューイー。これは本当に機能しますか?私はそれがランバートの余弦の法則を考慮すべきであるとかなり確信しています。しかし、多分私は何かを得ません。
Notabene 2011

1
必要に応じて、物理的に正確にすることができます。パッチ間の角度は、その他の現象の数とともに、最初の修飾子の値で考慮することができます。これは、何が起きるかの概要に過ぎません。
チューイーガムボール2011

OK。非常に素晴らしい。レイキャスティング方式でラジオシティについて聞くのはこれが初めてです。しかし、それは完全に理にかなっています。ありがとうございます。
Notabene 2011

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.