유니티 쉐이더 공부 - 각종 빛

실제 빛

실제 빛은 x라는 표면에 w방향 마다 모든 빛을 계산해야하지만 이는 연산이 너무많아서..

컴퓨터에서는 근사값으로 처리한다.

 

 

컴퓨터 빛의 종류

디퓨즈-다양항 방향으로 빛을 나타냄(반사)

스펙큘러-특정 방향으로 빛을 나타냄(반사)

엠비언트-씬안에서의 최소의 빛강도

 

 

 

 

밝기를 계산하는 방법

Float brightness = cos(입사각)

Float brightness = dot(normal,lightDir) //중요!

->증명

->Dot(a,b) = |a||b|cos(입사각)  [ |a||b| 가 노멀라이즈되서 1이기 때문에 ] normallightDir의 내적은 cos(입사각)과 같고 밝기와 같다

 

 

위의 확률은 각도에따라 빛이 얼마나 반사되는지를 말해준다.

0도일 때 100%라면 당연히 cos이겠지? 이런식으로 외워두면 좋을것 같다.

 

Vec3 normal = normalize(Normal);

Vec3 lightDir = normalize(lightPos – FragPos);

아까 위에서 말한 밝기 계산공식중

Float brightness = dot(normal,lightDir);

 

아까 위에서도 말했지만 중요하니 다시말하자면 Dot(a,b) = |a||b|cos(입사각)  [ |a||b| 가 노멀라이즈되서 1이기 때문에 ] normallightDir의 내적은 cos(입사각)과 같고 밝기와 같다

 

  Comments,     Trackbacks