[DX3D] 반사광
반사광
픽셀 쉐이더에서 반사 벡터를 계산하면 각 픽셀마다 반사 벡터 값이 나오는데 이를 카메라가 오브젝트를 쳐다보는 방향, 즉 Eye Vector와 이루는 각도를 비교하여 반사광을 계산할 수 있다. 구현을 위해 필요한 것들은 아래와 같다.
1. 픽셀의 View Space 위치
2. 카메라의 View Space 위치
3. Eye Vector
4. 반사벡터
View Space는 카메라가 기준이 되기 때문에 카메라의 위치가 (0.f, 0.f, 0.f)이므로 카메라의 View Space 위치를 따로 생각할 필요가 없고, 또한 픽셀의 View Space에서의 좌표가 곧 Eye Vector가 된다.

두 벡터를 Normalize 하여 Reflect Vector와 -Eye Vector를 내적하면 두 벡터의 cos 값이 나오게 되고(0~1) 이 값을 빛의 세기로 사용하면 된다. 그림으로 표현하자면 카메라가 바라보는 방향과 반사광의 방향이 이루는 각도가 0에 가까울 수록 반사광의 세기는 밝아지는 것이다.
(0 이하의 값이 나오면 안되므로 Saturate)

반사광의 세기를 단순히 내적으로만 구하게 되면 코사인 그래프를 따르게 되므로 각도차이에 따른 변화량이 미미하다. 반사광과의 각도차이가 꽤 있는데도 불구하고 반사되는 양의 변화가 크지 않아 전체적으로 푸석푸석한 느낌이 나게 된다. 각도에 따른 변화량을 크게 주기 위해서 반사광 값에 제곱을 계속 하게 된다면 각도 차이에 따른 변화량이 커져 제곱수가 커질수록 표면이 매끈한 느낌이 많이 나게 된다.

