티스토리 뷰
피사체 뒤쪽에서의 빛? 후광?
간단하게 구현하는건
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)));
야매?로 할떄 간단히 하면 좋을듯.
'기타' 카테고리의 다른 글
char*, char[] (0) | 2015.10.14 |
---|---|
컴파일시 MSVCP120D.dll이 없는 에러 (0) | 2015.02.03 |
맥스 플러그인(익스포터) 디버깅하기 (0) | 2015.01.20 |
Visual Studio 2012 error MSB8020: The builds tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found (0) | 2015.01.05 |
_countof 매크로 (0) | 2014.11.27 |