본문 바로가기

Unity3D/shader_스터디

[Unity쉐이더] 라이팅 이론_Vecter

 

 

 

 아래 두 사진은 라이팅 전 후의 같은 배경입니다.

라이트를 이용해서 컬러를 추가했고, 음영 차이로 씬에 입체감을 주는 등 라이트 배치만으로도 최종 결과물을 낼 때 라이팅이 큰 영향을 끼친다는 것을 알 수 있습니다.  

 

 

 

컴퓨터 내의 라이팅은 현실의 빛과 빛을 받는 물체에서 일어나는 현상들을 종류별로 구분해 현실, 카메라에 담을 수 있는 풍경과 최대한 비슷한 빛을 구현하고자 했습니다. 

 

 

초기 라이팅 방식은 간단한 수학 계산이었습니다.

밝은 곳은 빛과 평행하고 있는 90도에 가까운 면. 어두운 곳은 빛과 서로 바라보는 방향이 틀어질수록 어두워지게 됩니다. 

 

 

아래 사진은 위 라이팅 연산을 맥스 내에서 확인한 것입니다.

 

거리 상관없이 빛과의 방향이 90도에 근접한 면이 많을 수록 밝아진다! 

 

이제 유니티 내의 대표적인 라이트 3개를 보고 갑시다.

 

Directional lights

디렉셔널 라이트는 씬의 햇빛과 같은 용도로 사용할 수 있습니다. 태양 또는 달 같은 매우 먼 거리의 강한 빛처럼 모든 빛이 같은 방향에서 오는 것처럼 나타납니다. 결과만 보면 태양과 비슷하게 느끼지만 같지는 않습니다.

 

모든 빛은 에너지로서 먼 거리를 이동할 수록 산란되며 에너지를 잃고 빛이 약해지게 됩니다. 그러나 디렉셔널 라이트는 광원의 위치가 정해지지 않았으며, 위치가 정해지지 않았기 때문에 거리에 따른 빛의 감소도 없습니다. 이름 그대로 빛의 방향만 정합니다.

 

 

 

 

Point lights

 유니티를 몇번 만져봤으면 자주 써봤을 포인트 라이트. 램프나 부분 조명 등에 자주 사용합니다.

위치 값도 있으며 거리에 따라 빛의 강도가 감소합니다. 이러한 빛들은 거리에 따라 빛이 약해지는 것이 아니라 끝으로 갈수록 검은색을 더해 빛이 약하게 보이도록 하는 것입니다.

 

 

Spot lights

스폿라이트. 특정 범위를 밝히는 손전등, 인공 광원 등에 사용됩니다.

포인트 라이트와의 각에 따라  빛을 밝히는 범위가 정해져 있습니다. 

 

 

 

이렇게 빛의 방향(Normal Vector), 물체의 방향(Normal vector)을 이용한 간단한 방법에서 부터 현실의 빛을 따라 하려고 하는 게 컴퓨터 그래픽의 빛입니다.

 


벡터(Vector)

 

아까부터 얘기한 방향에 대한 얘기입니다. 

방향과 크기를 담고 있는 것을 방향벡터(direction vector)라고 합니다.

 

주로 화살표 모양으로 나타내는데 유니티나 맥스에서도 흔하게 볼 수 있습니다.

 

 

위의 어디서 많이 본 색 조합은 숫자로도 볼 수 있습니다.

R-X float3(1,0,0)

G-Y float3(0,1,0)

B-Z float3(0,0,1)

숫자는 색, 색은 위치이며 동시에 위치일 수도 있고 방향일 수도 있다는 것입니다.

 

float3(1,0,0) 이라면?

x방향으로 길이가 1인 화살표랑 같다는 거죠

 

2차원일 경우에는 float2, 3차원일 경우에는 float3로 나타냅니다.

 

 


다음부터는 라이팅 세팅을 위해 미리 준비를 하고 마무리하겠습니다.

라이팅을 Lambert로 변환해줍니다.

Lambert

Lambert에서는 스페큘러 등등이 없이 빛에 의한 밝고 어두움만을 나타냅니다.

주석을 참고해서 기존 쉐이더에서 아래 두 부분을 수정합니다.