Main Content

ライティングの概要

ライティング コマンド

MATLAB® グラフィックス環境に備わるコマンドを使用すると、光源を配置したり、ライトを反射するオブジェクトの特性を調整できます。これらのコマンドは以下を含みます。

コマンド

目的

camlight

カメラの位置に関連付けてライトを作成/移動する

lightangle

球面座標系内でライトを作成/配置する

light

Light オブジェクトを作成する

lighting

ライティング法を選択する

material

Light オブジェクトの反射に関するプロパティを設定する

light とlit オブジェクト プロパティを設定し、特定の結果を達成できます。これらのトピックに加えて、可視化にライティングを導入するため、ライティングの例を用意しています。

Light オブジェクト

light オブジェクトは関数 light を使用して作成します。Light オブジェクト プロパティには、3 つの重要なプロパティがあります。

  • Color — light オブジェクトが投じる光の色

  • Style — 無限遠点 (既定の設定) またはローカル点のいずれか

  • Position — 方向 (無限光源の場合) または位置 (ローカル光源の場合)

Color プロパティは、光源からの方向性をもつライトの色を決めます。シーン内でのオブジェクトの色は、オブジェクト自体の色と光源により決められます。

Style プロパティは光源が点で (Stylelocal に設定)、ある特定の位置からすべての方向に放射しているか、または光源が無限遠 (Styleinfinite に設定) で、指定した位置の方向から平行な光を照射しているかを決めます。

Position プロパティは Axes のデータ単位で光源の位置を指定します。光源が無限遠の場合、Position は光源に対する方向を指定します。

Light は、同じ座標軸に存在する surface オブジェクトや patch オブジェクトに影響を与えます。これらのオブジェクトは、ライトで照射されたときの見え方を変更するためのプロパティをもっています。

ライティングに影響するプロパティ

Light オブジェクト自体を見ることはできませんが、ライトを含む座標軸に存在する patch や surface オブジェクトに対する効果を見ることができます。surfmeshpcolorfillfill3 および surfacepatch などの関数によって、これらのオブジェクトは作成されます。

ライティングの効果は、axes、light、patch、surface オブジェクト プロパティを設定することによって制御することができます。すべてのプロパティは、一般的に望ましい結果を得られるように、既定値をもっています。ただし、これらのプロパティの値を調整することにより、特別な効果を得ることもできます。

プロパティ

効果

AmbientLightColor

背景光の色を指定する座標軸プロパティ。これは方向性をもたず、すべてのオブジェクトに一様に影響します。周囲光の効果は、Axes に視覚可能な Light オブジェクトがある場合にのみ発生します。

AmbientStrength

オブジェクトから反射した光の周囲要素の強度を決める Patch および Surface プロパティ。

DiffuseStrength

オブジェクトから反射した光の散乱要素の強度を決める Patch および Surface プロパティ。

SpecularStrength

オブジェクトから反射した光の反射要素の強度を決める Patch および Surface プロパティ。

SpecularExponent

反射強調のサイズを決める Patch および Surface のプロパティ。

SpecularColorReflectance

鏡面反射がオブジェクトの色または光源の色によって色付けされる度合を決める、Patch および Surface のプロパティ。

FaceLighting

オブジェクトの面上の光の効果を計算するための方法を決める Patch および Surface プロパティ。選択肢は、ライティングなしか、flat または gouraud ライティング アルゴリズムです。

EdgeLighting

オブジェクトのエッジ上の光の効果を計算するための方法を決める Patch および Surface プロパティ。選択肢は、ライティングなしか、flat または gouraud ライティング アルゴリズムです。

BackFaceLighting

面の頂点法線がカメラから離れたときに、面がどのように照射されるかを決める Patch および Surface プロパティ。このプロパティは、オブジェクトの内部と外部を見分けるのに役立ちます。

FaceColor

オブジェクトの面の色を指定する Patch および Surface プロパティ。

EdgeColor

オブジェクトのエッジの色を指定する Patch および Surface プロパティ。

VertexNormals

オブジェクトの各頂点の法線ベクトルを含む Patch および Surface プロパティ。MATLAB は、頂点の法線ベクトルを使用してライティング計算を実行します。MATLAB はこのデータを自動的に生成しますが、ユーザーが独自の頂点法線を指定することも可能です。

NormalMode

オブジェクト データを変更したときに MATLAB が頂点法線を再計算するか (auto)、あるいは VertexNormals プロパティの現在値を使用するか (manual) を決める Patch および Surface プロパティ。VertexNormals に対する値を指定すると、MATLAB はこのプロパティを manual に設定します。

詳細については、Axes のプロパティSurface のプロパティ および Patch のプロパティ を参照してください。

ライティング コントロールの例

ライティングは、グラフィカルなシーンに現実性を付加するテクニックです。ライティングは、自然照明 (すなわち、太陽からの方向性をもつ光) の環境でオブジェクトに生じる陰影をシュミレーションすることにより実行します。ライティングの効果を実装するために、MATLAB は Light と呼ばれるグラフィックス オブジェクトを定義します。MATLAB はライティングを surface と patch オブジェクトに適用します。

例 — シーンへのライトの追加

この例では、膜の表面を表示し、カメラの右から発する光源で照明します。

membrane
camlight

ライトを作成すると、周囲光やオブジェクトの反射率などの特性を制御するいくつかのライティングに関するプロパティをアクティブにします。

Surface plot with lighting. The surface has a reflective appearance.

例 — 数学関数のグラフの照明

ライティングは、数学関数の表面グラフを強調することができます。たとえば、ezsurf コマンドを使用して、-6π から 6π までの領域で式

sin(x2+y2)÷(x2+y2)

を評価します。

h = fsurf(@(x,y) sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2), ...
[-6*pi,6*pi]);

Surface plot with default appearance

次に関数 lightangle を使用してライティングを付加します。このコマンドは方位角と仰角を使用して、ライトの位置を設定できます。

view(0,75)
shading interp
lightangle(-45,30)
h.FaceLighting = 'gouraud';
h.AmbientStrength = 0.3;
h.DiffuseStrength = 0.8;
h.SpecularStrength = 0.9;
h.SpecularExponent = 25;
h.BackFaceLighting = 'unlit';

Surface plot shown from a different angle with lighting to give it a reflective appearance

findobj を使用して surface オブジェクトのハンドルを取得した後で、表面からライトがどのように反射するかをプロパティを使用して設定できます。これらプロパティの詳細は、ライティングに影響するプロパティを参照してください。