티스토리 뷰

기타

림 라이트

따분한놈 2015. 2. 5. 03:04

피사체 뒤쪽에서의 빛? 후광?

 

간단하게 구현하는건

 

vs

1
2
3
4
5
6
7
8
9
10
11
12
 
VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;
   Output.Position = mul( Input.Position, matViewProjection );
   Output.Texcoord = Input.Texcoord;
   Output.Normal = normalize(Input.Normal);
   
   Output.Direction = normalize(vViewPosition-Input.Position);
   return( Output );
}
cs

 

 

ps

1
2
3
4
5
6
7
8
float4 BaseColor = tex2D( baseMap, Input.Texcoord );
   
float fRim = 1.0f saturate(dot( Input.Normal,Input.Direction));
   
float4 rc = fRimColor * ArtValue;
 
return BaseColor + pow(fRim,2.0f)*rc;
cs

 

 

오브젝트 법선벡터와 카메라 방향벡터를 내적한다.

 

당연하지만 벡터는 정규화를 한다. 그래야 cos값을 쓰니.

 

방향벡터와 오브젝트의 법선벡터가 90도가 되면 cos값이 0이니

 

fRim값이 0이되고 컬러값이 곱해서 준다.

 

나머지 값은 saturate에 의해 0~1사이 값이니 0.x의 경우는 작은 값이라서 잘 티가 안나게 되서 가쪽에만 컬러가 입혀진다.

 

 

 

 

근데 문제는 망토나 머리카락같은 부분의 면으로 된 것의 경우 문제가 생기는 것이다.

벡터가 반대방향이랑 같다 보니 이 식에서 세타값이 180도가 되다보니 내적값이 -1이되고 결국 fRIm값이 1이된다는 것이다.

 

float fRim = 1.0f - saturate(dot( Input.Normal,Input.Direction));

 

결국 색이..

 

 

 

해결 방안은 내적값이 무조건 양수가 나오게 한다는 것이다.

float fRim = 1.0f - saturate(abs(dot( Input.Normal,Input.Direction)));

 

 

야매?로 할떄 간단히 하면 좋을듯.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함