2020. 4. 2. 22:56, 개발/쉐이더
실제 빛
실제 빛은 x라는 표면에 w방향 마다 모든 빛을 계산해야하지만 이는 연산이 너무많아서..
컴퓨터에서는 근사값으로 처리한다.
컴퓨터 빛의 종류
디퓨즈-다양항 방향으로 빛을 나타냄(반사)
스펙큘러-특정 방향으로 빛을 나타냄(반사)
엠비언트-씬안에서의 최소의 빛강도
밝기를 계산하는 방법
Float brightness = cos(입사각)
Float brightness = dot(normal,lightDir) //중요!
->증명
->Dot(a,b) = |a||b|cos(입사각) [ |a||b| 가 노멀라이즈되서 1이기 때문에 ] normal과 lightDir의 내적은 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이기 때문에 ] normal과 lightDir의 내적은 cos(입사각)과 같고 밝기와 같다
'개발 > 쉐이더' 카테고리의 다른 글
노드 툰 쉐이더 멀티라이팅 (0) | 2020.06.26 |
---|---|
유니티 쉐이더 - 툰 쉐이더 (0) | 2020.05.08 |
유니티 쉐이더 - 블린퐁 (0) | 2020.05.04 |
Unity Shader 공부- 림라이트 (0) | 2020.05.04 |
유니티 쉐이더 공부 - 디퓨즈 , 앰비언트 , 스페큘러 , 텍스처 구현 (0) | 2020.04.03 |
Comments, Trackbacks