이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

그래픽스 객체의 반사율 특성

정반사와 난반사

patch 객체와 surface 객체의 반사율 특성을 지정하고 이를 통해 장면에 조명을 적용할 때 이들 객체의 보여지는 모습에 영향을 줄 수 있습니다. 특정 결과를 생성하기 위해 이러한 특성들을 같이 조정할 경우가 꽤 있을 것입니다.

편리하게 특정 조명 효과를 생성하는 방법을 보려면 material 명령도 참조하십시오.

SpecularStrength 속성과 DiffuseStrength 속성을 설정하여 객체의 곡면에서 정반사와 난반사의 양을 제어할 수 있습니다. 다음 그림은 다양한 설정값들을 보여줍니다.

주변광

주변광은 장면 내 모든 객체에 균일하게 비추는 방향성이 없는 빛입니다. 주변광은 좌표축에 light 객체가 있을 때만 볼 수 있습니다. 주변광을 제어하는 속성은 두 가지가 있습니다. AmbientLightColor는 색을 설정하는 axes 속성이고 AmbientStrength는 특정 객체에 비치는 주변광의 명암을 결정하는 patch 객체와 surface 객체의 속성입니다.

다음 그림은 다양한 명암에서 세 가지 다른 주변광 색을 보여줍니다. 구는 빨간색이며 장면에는 하나의 흰색 light 객체가 있습니다.

녹색 조명에는 빨간색 성분이 없으므로 녹색 [0 1 0] 주변광은 장면에 영향을 주지 않습니다. 하지만 RGB 값 [.5 0 1]로 정의된 색은 빨간색 성분을 포함하므로 구에 비치는 조명에 영향을 미칩니다(단, 흰색 [1 1 1] 주변광보다는 그 영향력이 덜함).

정반사 지수

반사면 지점의 크기는 patch 객체와 surface 객체의 SpecularExponent 속성값에 따라 결정됩니다. 이 속성의 일반적인 값 범위는 1~500이며, 일반적인 객체는 5~20 범위의 값을 갖습니다.

다음 그림은 세 가지 다른 SpecularExponent 속성값으로 흰색 조명을 비춘 빨간색 구를 보여줍니다.

색상 정반사율

정반사되는 조명의 색 범위는 객체 색과 광원 색의 조합부터 광원 색만 사용하는 것까지 다양할 수 있습니다. patch와 surface의 SpecularColorReflectance 속성은 이 색을 제어합니다. 다음 그림은 흰색 조명을 비춘 빨간색 구를 보여줍니다. SpecularColorReflectance 속성값의 범위는 0(객체 색과 조명 색)부터 1(조명 색)까지입니다.

후면 조명

후면 조명은 내부 면과 외부 면 사이의 차이를 보여주는 데 유용합니다. 아래 잘려진 원통면 그림은 후면 조명의 효과를 보여줍니다.

BackFaceLighting의 디폴트 값은 reverselit입니다. 이 설정은 카메라 반대쪽을 향하는 꼭짓점 법선의 방향을 반전함으로써 내부 곡면이 카메라 쪽으로 조명을 반사하도록 합니다. BackFaceLightingunlit로 설정하면 카메라 반대쪽을 가리키는 법선을 가진 면에 대한 조명이 비활성화됩니다.

BackFaceLighting을 사용하여 닫힌 객체의 가장자리 효과를 제거할 수도 있습니다. 이런 효과는 BackFaceLightingreverselit로 설정되어 있고 닫힌 객체의 가장자리에 있는 픽셀이 마치 그 꼭짓점 법선이 카메라를 마주 보고 있는 것처럼 조명을 받을 때 발생합니다. 이 경우 픽셀이 보이긴 하지만 실제로는 카메라 반대쪽을 향하므로 부적절하게 조명이 비춰진 픽셀이 생기게 됩니다.

이 효과를 보여주기 위해 다음 그림은 조명을 비춘 구의 가장자리를 확대한 모습을 보여줍니다. BackFaceLightinglit로 설정하면 픽셀에 조명이 부적절하게 비춰지는 것을 방지할 수 있습니다.

데이터 공간에 조명 배치하기

다음 예제에서는 구와 정육면체를 만든 후 두 개의 광원으로 조명을 비춥니다. 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

light 함수는 Position 벡터로 지정되는 방향으로 무한에 위치한 두 개의 light 객체를 정의합니다. 이 벡터는 좌표축 좌표 [x, y, z]로 정의됩니다.