10. ラジオシティ


10. ラジオシティ

ラジオシティ(radiosity)は、光の相互反射作用を計算するものである。光の相互反射を計算することは難しい場合も多く、従来のレイ・トレーシングでは環境光(POV-Rayでは、ambient_light)として一定値を簡易的に与えることが多い。現実の世界における環境光の明るさは、光源から出た光が室内のあらゆる場所で無限に相互反射を繰り返した結果生じるものである。そのため、環境光の明るさは一定でなく、場所によって異なる。一般的に照明などの分野では、このような光は間接光と呼ばれる。

< radiosity の構文>

(注意)ラジオシティは実験的な実装のため、バージョンアップにより記述方法や機能に互換性がなくなる可能性が強い。POV-Ray3.5と旧バージョンPOV-Ray3.1では互換性が失われている。

global_settings { 
  radiosity { 
     [ adc_bailout FLOAT ]
     [ always_sample on|off ] 
     [ brightness FLOAT ] 
     [ count INT ]
     [ error_bound FLOAT ]
     [ gray_threshold FLOAT ]
     [ low_error_factor FLOAT ] 
     [ max_sample FLOAT ]
     [ media on|off ]
     [ minimum_reuse FLOAT ]
     [ nearest_count INT ] 
     [ normal on|off ] 
     [ pretrace_start FLOAT ]
     [ pretrace_end FLOAT ] 
     [ recursion_limit INT ]
     [ load_file FILE_NAME ] 
     [ save_file FILE_NAME ] 
  }
}
radiosity ラジオシティを指定するキーワード
adc_bailout FLOAT ラジオシティの反射計算の精度の指定。 [デフォルト:0.01 ] ⇒「4.1 ADC_bailout」
always_sample on|off ラジオシティ終了時のサンプル収集スイッチ。 [デフォルト:on ]
brightness FLOAT ラジオシティにおいて全体の輝度を調整するための値。 [デフォルト:1.0 ]
count INT サンプル点のラジオシティを計算するための光線数の指定。最大値は1600、 [デフォルト:35 ]
error_bound FLOAT サンプル領域の調整値。 [デフォルト:1.8 ]
gray_threshold FLOAT ラジオシティによる光の色の調整割合。0〜1の間で指定し、その割合だけ灰色値と置き換えられる。 [デフォルト:0 ]  ⇒「4.7 max_trace_level」
low_error_factor FLOAT プレビューにおけるerror_boundの調整値。プレビュー時に指定した値がerror_bound値に乗ぜられる。 [デフォルト:0.5 ]
max_sample FLOAT サンプルの最大輝度の指定
media on|off ラジオシティ計算でメディアを有効にするスイッチ  [デフォルト:off ]
minimum_reuse FLOAT 画素におけるラジオシティのサンプル値の再利用割合の指定。スクリーン幅のに対する割合である。 [デフォルト:0.015 ]
nearest_count INT ラジオシティの平均値計算に使用する計算点近傍のサンプル値の最大数(整数値) [ディフォルト:5 ]
normal on|off ラジオシティ計算で法線ベクトルを有効にするスイッチ。 [デフォルト:off ]
pretrace_start FLOAT プレビュー開始のモザイクブロックのサイズ割合。0.0〜1.0の範囲、 [デフォルト:0.08 ]
pretrace_end FLOAT プレビュー終了のモザイクブロックのサイズ割合。0.0〜1.0の範囲の値、 [デフォルト:0.04 ]
recursion_limit INT ラジオシティ計算における再帰レベルの指定。最大値は20、 [デフォルト:3 ]
load_file FILE_NAME ファイルからのラジオシティを読み込む。
save_file FILE_NAME ラジオシティをファイルに保存する。

※ ラジオシティの使用は、グローバル設定に記述するだけである。

※ ラジオシティの設定は、空のラジオシティ・ブロック文による設定
      global_settings {
          radiosity {   }
      }
と下記の記述は同等である。下記の文は主要なディフォルト値を明白に記述したものであり、これを基本として設定の変更を考える。
     global_settings {
         radiosity {
           pretrace_start 0.08
           pretrace_end   0.04
           count 35
           nearest_count 5
           error_bound 1.8
           recursion_limit 3
           low_error_factor 0.5
           gray_threshold 0.0
           minimum_reuse 0.015
           brightness 1
           adc_bailout 0.01/2
         }
    }

各パラメータの設定値により画質が決まる。設定値により計算時間は大幅に異なる。このため計算時間を考慮した場合、最適な設定はシーンと目的により異なり、これが最適値というものを示すことができない。設定の参考として、以下に主なパラメータと例を示す。
また、設定パラメータには画像サイズに関係するものもある。設定がそのままだと、小さい画像で確認してから大きいサイズで計算するという方法ではうまくいかないことがある。


●POV-Rayに含まれているコーネル・ボックスのシーンファイルを例にとって比較を行う。図10aは添付ファイルをそのまま実行したものである。このシーンに最適なラジオシティ設定がされている。図10aの右側には、シーンファイルに記述されているグローバル設定関係部分を示す。図10bは、ディフォルトの設定で実行した結果である。

図10a コーネル・ボックス
  global_settings{
    assumed_gamma 1.0
    radiosity{
      pretrace_start 0.04
      pretrace_end 0.01
      count 200
      recursion_limit 3
      nearest_count 10
      error_bound 0.5
    }
  }

 #declare 
    Finish = 
       finish
       {diffuse 0.75 ambient 0}
 

図10b デフォルト設定
  global_settings{
    assumed_gamma 1.0
    radiosity{   }
  }

 #declare 
    Finish = 
       finish
       {diffuse 0.75 ambient 0}

これらを比較すると、このシーンにおいてはデフォルト設定では、部屋の奥にある大きいほうの直方体の影部分が少し不自然である。


10.1 全体輝度(brigthness)

ラジオシティ計算におけるシーン全体の輝度調整を行う。通常の場合のambient_lightに相当するものである。指定する値により全体のラジオシティの強さが調節される。設定値0はラジオシティ計算を行わない場合と同じになる。デフォルトは1.0で、調整無しである。
図10.1は、図10aの設定を brigthness 1.5 に変更したものである。全体が明るくなっているのがわかる。


図10.1 brigthness 1.5


10.2 光線数(count)

サンプル点におけるラジオシティ計算のために発射する光線の数である。一般的に多ければ多いほど計算が正確になる。指定できる最大値は1600で、デフォルトは35である。
図10.2は、図10aの設定を count 10 に変更したものである。光線数が少なくなったため、天井の陰影が不自然になっている。


図10.2 count 10


10.3 エラー境界値(error_bound)

サンプル点をとる割合の指定をする。値が小さいほど細かくサンプル点が取られるので計算が正確になり、エラーが軽減する。デフォルトは1.8である。半影部分の計算においては、この値ではサンプル点が荒すぎて、リアルな影が得られにくいようである。
図10.3は、図10aの設定を error_bound 4 に変更したものである。濃い影の部分が明るすぎて不自然になっている。


図10.3 error_bound 4


10.4 無彩色割合(gray_threshold)

ラジオシティは相互反射の計算をするので、各面の明るさが互いに影響し合う。このため、近接する面の色が互いの面に反映する色の映り込みが発生する。gray_thresholdは色の映り込みの割合を調整する。0〜1の範囲で指定する。計算されたラジオシティにおいて、指定された割合を無彩色(灰色)とする。1.0を指定するとその色の映り込みがある場合と同等の明るさの無彩色となる。デフォルトは0.0である。
図10.4は、図10aの設定を gray_threshold 0.5 に変更したものである。映り込んた色の50%を無彩色に置き換えている。


図10.4 gray_threshold 0.5


10.5 再利用の境界値(minimum_reuse)

サンプル点の計算済みの値を再利用するための、境界の最小半径を指定する。この値が小さすぎると滑らかな陰影変化が得られにくくなり、逆に大きすぎると陰影の変化が乏しくなり本来あるはずの陰影が表現されなかったりする。値はスクリーン幅の割合で指定する。デフォルト値は0.015である。


10.6 平均点の最小数(nearest_count)

ある点のラジオシティは、その近傍のサンプル点を平均してその値を得る。nearest_count はそれらの平均するサンプル点の最小数を指定する。平均に使用する点数が実際にいくつになるかは error_bound に依存している。
図10.6は、図10aの設定を error_bound 4、nearest_count 1 に変更したものである。図10.3より手前の小さいボックスがさらに不自然になっている。


図10.6 error_bound 4 + nearest_count 1


10.7 予備計算(pretrace)

モザイク・プレビュー時のモザイクの大きさを画面に対する割合で指定する。このラジオシティ計算値は、本計算時の平均計算に再利用される。このため指定値は画質に影響を及ぼすことに注意する。0〜1の範囲で指定する。デフォルト値は、pretrace_start(開始値)が0.08、pretrace_end(終了値)が0.04である。
図10.7は、図10aの設定を pretrace_start 0.1 pretrace_end 0.06 に変更したものである。図10.3より2つのボックスの表面の陰影が不自然になっている。


図10.7 pretrace start 0.1 + end 0.06


10.8 相互反射回数/再帰限度(recursion_limit)

相互反射に関する繰り返し回数を指定する。指定できる値は1〜20の範囲であり、1次反射から20次反射に対応しているものと思われる。値が大きいほど正確になる。他の値の設定にもよるが、POV-Rayではデフォルト値の3程度で十分である。
図10.8は、図10aの設定を recursion_limit 1 に変更したものである。相互反射の計算回数が少ないため、影部分が暗くなっている。


図10.8 recursion_limit 1


10.9 ラジオシティとフォトンマッピング

次に、ラジオシティとフォトンマッピングを同時に使用した例を示す。図10aのコーネルボックスに薄い水色のガラス球体を追加したものである。


図10.9 rradiosity + photon

ラジオシティとフォトン設定例)
     global_settings{
       assumed_gamma 1.0 
       radiosity{
         pretrace_start 0.04
         pretrace_end 0.01
         count 200
         recursion_limit 3
         nearest_count 10
         error_bound 0.5
        }
       photons{ spacing 0.02 }
     }

     sphere{<40,10,15>,7 
             material{M_Green_Glass}
             photons{target
                     collect off
                     refraction on
                     reflection on
              }
           }