Study/Directx 10
다수의 광원.
붕대마음
2010. 5. 15. 15:40
반응형
기억할 것 : 광원으로의 방향이 아니라, 광원으로 부터 나온 빛이 향하는 방향.
(0,1,0)이면 광원이 +y으로 향한다는 의미이다.
보통 쉐이더에 인자로 넘겨주는 방향은 빛이 광원으로 부터 표면으로 향하는 방향인데
이를 쉐이더에서 -로 하여 사용해야 한다.
float3 L = - normalize(lightDirection);
그렇지 않다면 처음 입력부터 지표면에서 광원으로 향하는 방향을 넘겨서 -을 붙이지 않으면 된다.
다수의 광원일 경우에는 각 광원에 대해서 확산성분과 정반사 성분을 각각 계산하여 모두 더하고
환경성분은 전체적으로 한번만 더하면 된다.
float4 finalColor = 0;
for (int i=0; i<2; i++) {
finalColor += saturate( dot( (float3)lightDirs[i],input.normal) * lightColors[i] );
}
finalColor.a = 1;
위의 예에서 재질의 컬러는 제외대상이다.