6. 光源


6. 光源

POV-Rayでは、光源はシーンに光を放射する目に見えない物体として定義されている。 POV-Rayで使用できる光源には点光源と面光源があり、スポットライトと円柱光を作ることもできる。 光源は1つのシーンの中でいくつ指定してもよく、異なるタイプの光源を一緒に使うこともできる。 また、他の物体と同じようにCSGによって組み合わせることもできる。
自然の世界では光は、距離の二乗に反比例して減衰する。しかし、POV-Rayでは「距離による光の減衰は無し」が既定値となっているため注意すること。照明のシミュレーション等にはPOV-Rayは使用できない。

<光源の構文>

 light_source {
   <LOCATION>
   color <COLOUR>
   [ spotlight SPOTLIGHT_ITEM ]
   [ cylinder CYLINDER_LIGHT_ITEM ]
   [ area_light AREA_LIGHT_ITEM ]
   [ LIGHT_MODIFIERS ... ]
 }
light_source 光源を指定するためのキーワード。
<LOCATION> 光源の位置のx, y, z座標の指定。
color <COLOR> 光源の色の指定。
spotlight SPOTLIGHT_ITEM スポットライトの指定。
「6.2 スポットライト」
cylinder CYLINDER_LIGHT_ITEM 円柱光の指定。 ⇒「6.3 円柱光」
area_light AREA_LIGHT_ITEM 面光源の指定。 ⇒「6.4 面光源」
LIGHT_MODIFIERS ... 光源に与える効果の指定。
「6.5 光源のオプション」

※ 太陽光を簡易的に表現する方法

POV-Rayでは物体表面の明るさは光源に対する角度のみに依存し、光源からの距離には関係しない。 POV-Rayは光源として平行光線を使用できないが、点光源を非常に遠い位置に置くことによって平行光線を表現することができる。 これによって太陽光を(簡易的に)表現することができる。 建築物の外観など、太陽光によって照らされるシーンを作成する場合はこの方法を用いるとよい。

●太陽光の例(+y方向を北とした場合)
          light_source { y*100000    // 真南に非常に遠い位置に置く
            color 1
            rotate x*60              // 太陽高度(地面との角度)の指定
            rotate z*30              // 太陽方位角(真南に対する角度)の指定
          }

※ " 非常に遠い距離 " は自分で決めた使用する単位(1.0を" 1m"とするか" 1mm "とするかなど)に合わせて調整する。
6.1 点光源

点光源は指定された色の光を全方向に同じ強さで出す。 POV-Rayでは特に指定いない限り点光源が使用される。

図6.1.1 点光源による光と影

<点光源の構文>

 light_source {
   <LOCATION>
   color <COLOUR>
   [ LIGHT_MODIFIERS ... ]
 }
light_source 光源を指定するためのキーワード。
<LOCATION> 光源の位置のx, y, z座標の指定。
color <COLOR> 光源の色の指定。
LIGHT_MODIFIERS ... 光源に与える効果の指定。 ⇒「6.5 光源のオプション」

●点光源の例(図6.1.1)

light_source{z*5 color 1.5}


6.2 スポットライト(spotlight)

スポットライトは円錐形に収束した光を表現するものである。 光はそのコーンの中心付近で最も明るくなり、端にいくほど減衰して暗くなる。 デフォルトでは点光源が使用されるが、面光源とともに使うこともできる。 ⇒「6.4 面光源」

図6.2.1 スポットライトによる光と影

<スポットライトの構文>

 light_source {
   <LOCATION>
   color <COLOUR>
   spotlight
   point_at <POINT_AT>
   radius RADIUS
   falloff FALLOFF
   tightness TIGHTNESS
   [ LIGHT_MODIFIERS ... ]
 }
light_source 光源を指定するためのキーワード。
<LOCATION> 光源の位置のx, y, z座標の指定。
color <COLOR> 光源の色の指定。
spotlight スポットライトを指定するキーワード。
point_at <POINT_AT> 光が指す点の指定。
radius RADIUS 光が減衰しない範囲の指定。 RADIUS < 90。
falloff FALLOFF 光が減衰していく範囲の指定。 FALLOFF < 90。
tightness TIGHTNESS 光の輪郭の鋭さの指定。 値を大きくすると明るい部分が狭
くなり、輪郭がぼやける。 1≦TIGHTNESS≦100。 デフォ
ルト値は10。
LIGHT_MODIFIERS ... 光源に与える効果の指定。 ⇒「6.5 光源のオプション」

図6.2.2 スポットライトのパラメータ 図6.2.3 falloff 5のときの減衰曲線

図6.2.2に示されるように、スポットライトは重なった2つの円錐として考えることができる。 内側の円錐は、光が減衰しない範囲であり、外側の円錐は光が減衰していく範囲である。 この円錐の外側の範囲は照らされない。 これら2つのパラメータの値はそれぞれの円錐の頂点の角度の半分であり、どちらの角度も90°より小さくなければならない。 光は(radiusの角度が負でない限り)図6.2.3のようにradiusとfalloff の間で滑らかに減衰する。

radius 30、falloff 60のとき radiusの角度が負のとき
図6.2.4 tightnessの値による減衰の違い

図6.2.4にあるようにradiusとfalloffの角度はtightnessのパラメータと互いに影響しあう。ただしradiusの角度が負である場合は、照らされる範囲はfalloffの角度に関係なくtightnessのみに依存するため、tightnessの値でスポットライトの光を制御できる。

●スポットライトの例(図6.2.1)
          light_source{z*5 color 1.5
            spotlight
            point_at z*1
            radius 5
            falloff 45
            tightness 20
          }

6.3 円柱光(cylinder)

円柱光源はスポットライトに似ているが、光線は円錐形ではなく円柱形に収束する。
デフォルトでは点光源が使用されるが、面光源とともに使うこともできる。 ⇒「6.4 面光源」
円柱光は点光源または面光源から放射された光線を円柱形に収束するだけであり、平行光線ではない。

図6.3.1 円柱光による光と影

<円柱光の構文>

 light_source {
   <LOCATION>
   color <COLOUR>
   cylinder
   point_at <POINT_AT>
   radius RADIUS
   falloff FALLOFF
   tightness TIGHTNESS
   [ LIGHT_MODIFIERS ... ]
 }
light_source 光源を指定するためのキーワード。
<LOCATION> 光源の位置のx, y, z座標の指定。
color <COLOR> 光源の色の指定。
cylinder 円柱光を指定するキーワード。
point_at <POINT_AT> 光が指す点の指定。
radius RADIUS 光が減衰しない範囲の指定。 RADIUS < 90。
falloff FALLOFF 光が減衰していく範囲の指定。 FALLOFF < 90。
tightness TIGHTNESS 光の輪郭の鋭さの指定。 値を大きくすると明るい部分が狭
くなり、輪郭がぼやける。 1≦TIGHTNESS≦100。 デフォ
ルト値は10。
LIGHT_MODIFIERS ... 光源に与える効果の指定。 ⇒「6.5 光源のオプション」

●円柱光の例(図6.3.1)
          light_source{z*5 color 1.5
            cylinder
            point_at z*1
            radius 5
            falloff 45
            tightness 20
          }

6.4 面光源(area_light)

面光源は大きさを持った光源であり、やわらかい影を作ることができる。 また、POV-rayでは線光源(細長い蛍光灯のような光源)は面光源の一つとして扱う。

POV-Rayで使われる面光源は擬似的な面光源である。この面光源は指定した長方形内に点光源を並べたものであり、この点光源の数が多いほどレンダリング時間は増えるがより精度の高い面光源となる。

図6.4.1 面光源による光と影

<面光源の構文>

 light_source {
   <LOCATION>
   color <COLOUR>
   area_light <AXIS1>, <AXIS2>, SIZE1, SIZE2
   adaptive ADAPTIVE
   jitter
   [ spotlight SPOTLIGHT_ITEM | cylinder CYLINDER_ITEM ]
   [ LIGHT_MODIFIERS ... ]
 }
light_source 光源を指定するためのキーワード。
<LOCATION> 光源の位置のx, y, z座標の指定。
color <COLOR> 光源の色の指定。
area_light 面光源を指定するためのキーワード。
<AXIS1>, <AXIS2> 光源面となる長方形の対角の座標。
SIZE1, SIZE2 光源面に配列する点光源の縦と横の数。 値を大きくす
ると影が滑らかになるが、レンダリングは遅くなる。
※ どちらかを1にすると線光源になる。
adaptive ADAPTIVE 簡易サンプリングの回数の指定。 0以上の整数を指
定する。 値を大きくするとより正確な影が生成される
が、レンダリングは遅くなる。
jitter 各点光源をランダムに揺らして影の中に生じる縞模様
を消すためのキーワード。
※ jitterはレンダリングのたびにランダムに変わるので
アニメーションでは使用しないほうがよい。
spotlight SPOTLIGHT_ITEM スポットライトの指定。 面光源による光を円錐形に収
束させることができる。 ⇒「6.2 スポットライト」
cylinder CYLINDER_ITEM 円柱光の指定。 面光源による光を円柱形に収束させ
ることができる。 ⇒「6.3 円柱光」
LIGHT_MODIFIERS ... 光源に与える効果の指定。
「6.5 光源のオプション」

adaptiveは光の計算を簡略化して計算を速くするために使用する。 デフォルトによって、POV-Rayは配列されたすべての点光源について光の計算を行うため非常に時間がかかるが、adaptiveを指定すると最低限のサンプリングによって近似するため、計算が速くなる。

adaptiveによる簡易サンプリングは、まず光源面の四隅の点について計算することから始まる。 四隅全部から受け取る光の量が近似的に等しい場合は、面光源は完全に見える/完全に遮られているのどちらかだとみなされる。 この場合光の強度は四隅からの光の強度の平均として計算される。

四隅からの光の強度が一定以上異なる場合は、その面光源は部分的に遮られているとみなされ、次に1/4に分割されてそれぞれの部分で同じテストが行われる。 これによって配列内のすべての点光源を計算せずに、面光源の見える範囲をより速く近似することができる。

ADAPTIVEの値はこのテストが繰り返される回数、つまり、面光源の分割数を決定する。 例えば、adaptive 0を指定すると、四隅の点だけで光が計算される。 adaptive 1では9分割、adaptive 2では25分割、... というふうになる。

※ この分割数は、SIZE1とSIZE2で指定した点の数より多くしても無視される。

図6.4.2 簡易サンプリングのイメージ

面光源ステートメントの中にスポットライトまたは円柱光のパラメータを指定することによって面光源の光を収束させることができる。 これにより必要な部分だけでやわらかい影の計算を行うことができ、レンダリングが速くなる。

●面光源の例(図6.4.1)
          light_source{z*5 color 1.5
            area_light
            <-2,-2,0>,
            <2,-2,0>,
            10,10
            adaptive 0
            jitter
          }

図6.4.3 面光源のスポットライト


6.5 光源のオプション

いくつかのオプションを使って光源に様々な効果を与えることができる。 光源のオプションには下記のものがある。

●影スイッチ
●光源の形状
●距離による減衰
●大気効果スイッチ

※ これらのオプションはデフォルトでは使用されない。

6.5-1 影スイッチ(shadowless)

光源ステートメントに shadowless を追加することで、物体によって生じる影をなくすことができる。

6.5-2 光源の形状(looks_like)

通常光源は目に見えないが、 looks_like { OBJECT } を加えることで、光源の形を表現することができる。

※ 見かけの形状を与えるだけであり、光源そのものは変化しない。

6.5-3 距離による減衰(fade_distance、fade_power)

デフォルトでは光源からの光は距離によって減衰しないが、 fade_distance fade_power を使って、距離による光の減衰を表現することができる。

fade_distance FADE_DISTANCEは、光が減衰せずに届く距離を指定する。 減衰の割合はfade_power FADE_POWERによって指定する(例えば、1次と2次の減衰はFADE_POWER をそれぞれ1と2に設定する)。 減衰された光を計算する式は次のものである。

attenuation = 2 / ( 1 + (d / FADE_DISTANCE) ^ FADE_POWER ) (dは物体までの距離)

6.5-4 大気効果スイッチ

(media_interaction on/off、media_attenuation on/off)

光源からの光が大気効果の影響を受けるかどうかを指定するスイッチ。POV-Ray3.0 では、atmosphere on/off, atmosphere_attenuation on/off が使われていた。