lighting 照明の概要

## 説明

scilabにおける照明は実世界の照明を近似するもので, 曲面の外観は光線と曲面の物質特性の相互関係により指定されます.

実世界の光源を模擬することは複雑で計算負荷が高いため, 簡易的なモデルを使用します.

光源は主にその色で表されます: アンビエント, 拡散, 鏡面反射. light 関数により作成でき, delete 関数により削除されます.

曲面の物性は色(アンビエント, 拡散および鏡面反射)と輝度によっても表されます.

曲面は,拡散色として曲面の色を有効にする `color_material`プロパティを有します.

最終的な曲面の色は,曲面と光源色の積に適用される光線モデル方程式により 指定されます.以下に光線モデル方程式を示します:

set(gca(), "font_style", 1, "font_size", 4); xstring(0.0, 0.4, '$Color = Ambient_{term} + Diffuse_{term} + Specular_{term} \\ Ambient_{term} = L_{ambient}*S_{ambient} \\ Diffuse_{term} = L_{diffuse}*S_{diffuse}*(L_{direction} \cdot S_{normal}) \\ Specular_{term} = L_{specular}*S_{specular}*(S_{normal} \cdot (L_{direction}+View_{direction}) ))^{S_{shininess}}$'); f=gcf(); f.figure_size = [750,280];

- アンビエント色は,曲面に間接的にさした光をモデル化するもので, 面の法線または光の方向に依存しません.

- 拡散色は直接さす光をモデル化するもので, 光線方向および面の法線に依存します.

- 鏡面反射色は鏡面反射ハイライト色を定義します.

以下に照明のあるまたはない面を比較します:

plot3d(); l = light();

plot3d();

## 光源プロパティのリスト

kightプロパティ
  visible:

    このフィールドは光の有効(`"on"`)または 無効(`"off"`)を定義します.

  light_type:

    このフィールドは使用される光の型を定義します. 以下の2種類の光を利用できます: `"directional"` および `"point"`. 方向性(directional)光源は,曲面から無限遠に位置する光源で,平行線となります.

    点光源は,全ての方向に放射する空間の点として 定義されます. デフォルト値は `"point"`です.

  direction:

    このフィールドは方向性光源の光線方向を定義します. 方向は,原点からのベクトルを表す 3要素ベクトル`"[x, y, z]"`により変更できます.

    デフォルト値は `"[0 0 1]"`です.

  position:

    このフィールドは,点光源の光源位置を定義します. 位置は3要素ベクトル`"[x, y, z]"`により変更できます.

    デフォルト値は`"[0 0 1]"`です.

  ambient_color:

    このフィールドは光源のアンビエント色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます.

    デフォルト値は`"[0.1 0.1 0.1]"`です.

  diffuse_color:

    このフィールドは光源の拡散色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます.

    デフォルト値は`"[1 1 1]"`です.

  specular_color:

    このフィールドは光源の鏡面反射色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます.

    デフォルト値は `"[1 1 1]"`です.

曲面のプロパティ
  use_color_material:

    このフィールドは曲面の色を拡散色として使用することを有効にします. デフォルト値は`"on"`です.

  material_shininess:

    このフィールドは曲面の輝度を定義します. このパラメータは曲面内で散らばる輝度色を制御します. 正の値を使用できます.

    [0 10]の範囲の値を使用すると良く, 小さい値は強いハイライト, 大きな値はわずかに認識できるハイライトを生成します. デフォルト値は`"2"`です.

  ambient_color:

    このフィールドは光源のアンビエント色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます.

    デフォルト値は`"[1 1 1]"`です.

  diffuse_color:

    このフィールドは光源の拡散色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます. このフィールドはuse_color_materialが無効の場合の 使用されることに注意してください.

    デフォルト値は`"[1 1 1]"`です.

  specular_color:

    このフィールドは光源の鏡面反射色を定義します. この色は3要素ベクトル`"[red, green, blue]"` (各要素の範囲は[0, 1])により定義されます.

    デフォルト値は `"[1 1 1]"`です.

## 例

color_materialなしの点光源:

    plot3d();

    s=gce();

    s.color_flag=0;

    s.thickness=0;

    s.hiddencolor = -1;

    light();

    //拡散色をオレンジに変更

    s.diffuse_color = [1, 0.6, 0];

    s.use_color_material="off";

    //黒の点を暗いオレンジに変更

    s.ambient_color = [1, 0.6, 0];

方向性光源:

    plot3d();

    s=gce();

    l = light();

    s.color_flag=0;

    s.thickness=0;

    l.light_type = "directional";

    l.direction = [0 0 1];

    l.diffuse_color = [1 0.9 0.9];

    l.ambient_color = [0.5 0.4 0.4];

    l.specular_color = [0.5 0.3 0.7];

## 参照

- light
- lightプロパティ
- surfaceプロパティ
- delete