最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

グラフィックス オブジェクトの反射率特性

鏡面反射と拡散反射

patch オブジェクトおよび surface オブジェクトの反射率特性を変更することができます。これにより、ライトが照らされたときに見え方が変わります。特定の結果を得るために、これらのプロパティを組み合わせて使用する場合が多くあります。

特定のライティング効果を得るための便利な方法については、material コマンドも参照してください。

オブジェクト表面からの鏡面反射および拡散反射の量は、SpecularStrength および DiffuseStrength プロパティを設定することによって制御できます。次の図はさまざまな設定を示しています。

周囲光

周囲光は、シーン内のすべてのオブジェクトを一様に照らす方向性のない光です。周囲光は、Axes 内に Light オブジェクトが存在する場合にのみ見ることができます。周囲光を制御するプロパティは 2 つあります。AmbientLightColor は色を設定する座標軸プロパティで、AmbientStrength は特定のオブジェクトに対する周囲光の強度を決める surface オブジェクトおよび patch オブジェクトのプロパティです。

次の図は、種々の強度で 3 種類の周囲光の色を示したものです。球面は赤で、白の Light オブジェクトが存在します。

緑 [0 1 0] の周囲光はシーンには影響しないことに注意してください。これは緑の光には赤の成分がないからです。ただし、RGB 値 [.5 0 1] で定義された色には赤の成分があるため、球面上の光に影響を与えます (ただし、白 [1 1 1] ほどの影響はありません)。

鏡面指数

鏡面の反射点のサイズは、surface オブジェクトまたは patch オブジェクトの SpecularExponent プロパティの値に依存します。このプロパティの典型的な値は 1 ~ 500 の範囲ですが、通常のオブジェクトは 5 ~ 20 の範囲の値をもちます。

次の図では、SpecularExponent プロパティに 3 つの異なる値を設定して、赤い球面を白いライトで照らしています。

色の鏡面反射率

鏡面反射するライトの色は、オブジェクトの色と光源の色の組み合わせから光源のみの色までの範囲になります。patch および surface の SpecularColorReflectance プロパティによりこの色が制御されます。次の図は、白色光で照らされた赤い球面を示したものです。SpecularColorReflectance プロパティの値の範囲は 0 (オブジェクトとライトの色) ~ 1 (ライトの色) です。

背面ライティング

背面ライティングは、内部と外部の面の差を示すのに有効です。次の円筒形切断面の図は、背面ライティングの効果を示したものです。

BackFaceLighting の既定値は reverselit です。この設定は、カメラとは逆の方向を向く頂点法線の方向を逆転させ、内部面がカメラの方向に光を反射するようにします。BackFaceLightingunlit に設定すると、カメラから遠ざかる方向を指す法線をもつ面上のライティングを無効にします。

BackFaceLighting を使用して、閉じたオブジェクトのエッジの影響を取り除くこともできます。これらの影響は、BackFaceLightingreverselit に設定すると現れ、閉じたオブジェクトのエッジに沿ったピクセルはその頂点法線がカメラに向かっているかのように照らされます。ピクセルは視覚可能ですが実際にはカメラと逆の方向を向いているので、不適切に照らされたピクセルが生じます。

この効果を示すために、照らされた球面のエッジを引き伸ばした図を示します。BackFaceLightinglit に設定すると、ピクセルの不適切なライティングを回避することができます。

データ空間の中でのライトの配置

この例では、球面と立方体を作成し、2 つの光源から照明します。light オブジェクトは、位置ベクトルで指定した方向の無限遠に位置します。

% Create a sphere
sphere(36);
axis([-3 3 -3 3 -3 3]) 
hold on
% Create a cube
fac = [1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
vert = [1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
patch('faces',fac,'vertices',vert,'FaceColor','y');
% Add lights
light('Position',[1 3 2]);
light('Position',[-3 -1 3]);
hold off

関数 lightPosition ベクトルで指定した方向の無限遠点に 2 つの light オブジェクトを定義します。これらのベクトルは、Axes 座標 [x, y, z] で定義します。