光源には、色・位置・方向を指定します。JSLでは、Light関数で最大8つ(0~7)の光源を定義できます。nは光源の番号です。
Light( n, argument, value, ... value )
メモ: 各光源をオンにするには、Enable(Lighting)とEnable(lightn) 関数を使います。nは光源の番号です。次に、Light(n, POSITION, x, y, z)関数で、光源をシーン内に移動します。
Table 13.3に、指定できる引数(argument)の値を示します。各引数のデフォルト値も示しています。
引数 |
デフォルト値 |
意味 |
---|---|---|
AMBIENT |
(0, 0, 0, 1) |
環境光(周囲光)のRGBA 輝度 |
DIFFUSE |
(1, 1, 1, 1) |
拡散光のRGBA 輝度 |
SPECULAR |
(1, 1, 1, 1) |
鏡面光のRGBA 輝度 |
POSITION |
(0, 0, 1, 0) |
(x, y, z, w)の位置 |
SPOT_DIRECTION |
(0, 0, -1) |
スポットライトの(x, y, z)方向 |
SPOT_EXPONENT |
0 |
スポットライト指数 |
SPOT_CUTOFF |
180 |
スポットライトの遮断角度 |
CONSTANT_ATTENUATION |
1 |
一定減衰率 |
LINEAR_ATTENUATION |
0 |
線形減衰率 |
QUADRATIC_ATTENUATION |
0 |
2次減衰率 |
メモ: この表のDIFFUSEとSPECULARのデフォルト値はLight 0だけに適用されます。その他の光源については、この2つの引数のデフォルト値は(0, 0, 0, 1)です。
最初の3つの引数(AMBIENT、DIFFUSE、SPECULAR)は、光源に色を付ける場合に使います。DIFFUSE(拡散)は、光源の物理的な色を決める引数です。AMBIENT(環境)は、光がもつ背景光としての特徴に対応したパラメータです。SPECULAR(鏡面)は、表面に反射する光に関連したパラメータです。
POSITION引数を使って、光源の位置を指定します。4番目の座標(w)に0以外の値を指定すると、光源はオブジェクト座標と同じ座標に配置されます。
現実世界の光は、光源から離れるに従って暗くなります。ただし、指向性の光に関しては、光源は無限に遠くにあるので、光の輝度の減衰を距離の関数で表すのは意味がありません。JSLでは、光源の輝度に、次の減衰率を掛けて光を減衰させます。
cはCONSTANT_ATTENUATION、lはLINEAR_ATTENUATION、qはQUADRATIC_ATTENUATIONです。
スポットライトを作成するには、光源の形を円錐形にします。次に示すように、SPOT_CUTOFF引数を使って円錐形の側面を定義します。
図13.16 スポットライト
遮断角のほかに、円錐形内の照射の輝度と方向も制御できます。SPOT_DIRECTIONは、スポットライトを向ける方向を指定し、SPOT_EXPONENTは、集光方法に影響します。