ラジオシティ
ラジオシティ (Radiosity) とは、3次元コンピュータグラフィックスのレンダリングにおける、グローバル・イルミネーションの計算法のひとつである。
一般に多用されているレイトレーシングのように、仮想のカメラから、そこに届く光線を求めていくという方向ではなく、光源の側から、光として発せられたエネルギーの行方を熱力学的に処理することで(エネルギー保存則)、複数の物体が光を乱反射させて、お互いを照らす効果などが計算できる。たとえば壁紙が赤いために部屋にあるものが赤く見えるといった効果がより現実的に再現できる。
この方法を用いると柔らかな陰影が表現でき、特に室内などの風景で画像の写実性が高くなる。現在では、リアルタイム描画以外の3次元グラフィックスではラジオシティを何らかの形で援用することが多い。ラジオシティ法はレイトレーシング法などのモンテカルロ法に基づいた手法と異なり、あらゆる種類の照明現象を再現することはできない。典型的なラジオシティ法は場面が拡散面によってのみ構成されていることを前提としているため、光源から放射された光が何度か拡散面によって反射されたあとで視点にいたるという現象しか再現できない。この現象を一般的な光経路の表記法であるHeckbertの表記法により表すと「LD*E」となる。ラジオシティ法の利点として、一度計算を行っておけば、オブジェクトや照明を変更しない限り、カメラ設定を変更しても再レンダリングを容易に行えるということが挙げられ、近年はリアルタイムレンダラーでも使用例がある。
ラジオシティの基本的な手法は熱移動の研究分野で1950年に初めて提案されたものである。後の1984年にコーネル大学の研究チームがコンピュータグラフィックスによるレンダリングにこれを応用した。そのためラジオシティ法のような大域照明を行うための有名なサンプル(ユタ・ティーポットなど)にコーネルボックスがある。また日本のコンピュータグラフィックス研究の第一人者としても知られる西田友是も、独立に全く同時期に先駆的な研究をしていたことでも有名である。
ラジオシティ法では、実世界の現象に近い光の挙動を模しているため最終的なレンダリング結果がより現実に近いものとなる。単純な部屋のシーンを想定してみる。
左の画像は直接照明レンダリングによって得られたものである。この場面では3種類の照明現象を分けて扱うことで、より現実に近い結果を得ている。これらの照明現象はデザイナーなどにより調整されなくてはならない。3種類の照明現象とはスポット照明(窓から差し込み柱の影を作る)、環境照明(光が直接当たっていないような暗い場所を再現)、無指向性照明(環境光の一様さを低減するような成分)である。
右の画像はラジオシティ法によりレンダリングされた場面である。この場面で用いた光源は窓の外から差し込む光のみであるが、左の画像との違いが見て取れる。部屋全体が柔らかく光っており、床の影もより現実的で、間接照明による効果がよく再現されている。さらに左奥の壁は床に反射した光によってやや赤色になっており、より穏やかな印象を与えている。これらの現象は全てラジオシティ法の計算結果によるものでありデザイナーなどによる照明効果の調整などは一切行う必要がない。
場面を構成する物体の表面は多くの小さな平面に分割されている。角関係 (view factor) は各々の小平面に対して計算されなくてはならない。角関係とは面と面とが互いに見えているかどうかを表す係数である。角関係は互いの面が離れている場合やお互いに傾いて存在している場合には小さな値の係数によってあらわされる。また2つの小平面の間に他の平面が存在する場合には、その平面によって2平面間が完全に遮られているか部分的に遮られているかで、係数を0にしたり小さくしたりする。
これらの角関係は線形のレンダリング方程式における係数として扱われる。この方程式を解くことがラジオシティ法の主な処理であり、これにより小平面間の拡散や相互反射、柔らかな陰影などを扱うことができる。
漸進的なラジオシティ法ではこの方程式を繰り返し計算によって解き、その計算の過程でそれぞれの小平面における放射発散度(ラジオシティ)の中間値を得る。これらの中間値は光子の反射回数と関係がある。つまり1回の繰り返し計算で得られる中間値は光子が光源を出発してから1度だけ反射をした場合の放射発散度を表しており、繰り返しが2回、3回と増えるごとに得られる中間値が表すものが2回、3回反射した光子による効果へと変わっていく。さらにある繰り返し回数で十分なレンダリング結果が得られると判断される場合には計算の収束を待つことなく計算を終了することもできる。
ラジオシティ法におけるレンダリング方程式を解く手法として、この他にシューティングラジオシティという手法がある。この手法は繰り返し計算を行うごとにエラーが最も多い小平面から光子を放つことによりレンダリング方程式を解く方法である。1回の繰り返し計算では光が直接あたるような小平面しか照らされないが2回目以降の繰り返し計算では場面のあらゆる場所から光が反射してくるため、より多くの小平面が照らされることとなる。この繰り返し計算を行うことで、照明状態が一定の安定状態に至る。
ラジオシティ法の考え方の根底には熱輻射の考え方があり、場面を構成する小平面間での光エネルギーの遷移を計算している。計算を単純にするため、ラジオシティ法では全ての光の拡散がランバート反射に基づくと考える。すなわちある光が拡散面に入射した場合、拡散後の光は全ての方向に均等な明るさで反射されると考える。また小平面は四角形あるいは三角形のポリゴンであるとし、その平面群に対して多項式が定義される。
このようにして場面を小平面群に分解すると、光エネルギーの遷移は反射面の反射性質および2つの小平面間の角関係によって計算することができる。この無次元量は2つの面の向きから計算され、ある平面から放出された光が他の平面にどの程度到達するかを表すことができる。より詳しく言えば、放射発散度Bは小平面上の単位平面から単位時間に放出される光エネルギーを表しており、これは光の放射エネルギーと反射エネルギーによって次のように表現される。
B(x)\,\mathrm dA = E(x) \,\mathrm dA +\rho(x) \,\mathrm dA \int_{S}B(x') \frac{1}{\pi r^2} \cos\theta_x\cos\theta_{x'} \cdot \mathrm{Vis}(x,x') \,\mathrm dA'
B(x)dAi - xの近傍である小領域dAiから放出される光エネルギー
E(x)dA - 放射エネルギー。
ρ(x) - 点xにおける反射度であり、単位平面あたりの反射光のエネルギーと入射光のエネルギーの積であらわされる。
S - xを平面全体について積分したもの。
r - 点xと点xとの距離。
θx, θx' - 点xと点xとを結んだ直線と各々の点が存在する平面とが作る角。
Vis(x, x) - 点xと点xが互いに見えている場合には1を、見えていない場合には0を取る関数(可視関数とも言う)。
平面が有限の小平面による集合として与えられる場合には、連続量としてあらわされていた方程式が差分式の形で書き直せる。すなわち各々の小平面が持つ放射発散度をBi、反射度をρiとあらわして次のように書く。
B_i = E_i + \rho_i \sum_{j=1}^n F_{ij} B_j
Fijは面iと面jとの間の角関係を表す。この方程式は各々の小平面に対し計算可能である。この方程式はモノクロ画像のためのものであるので、カラー画像を扱う場合には色を構成するチャネルそれぞれについてこの方程式を解く必要がある。