본문 바로가기
기본 쉐이더

Rim Lighting 의 원리와 공식

by Raypop 2011. 8. 27.



먼저 쉐이더 코드로 구현하면


float3 vCameraPos = normalize(vCameraPos-v.Pos);

float3 RimLightColor =smoothstep(1.0f-rimWidth, 1.0f, 1-max(0,dot(v.nor,vCameraPos));



- 설명


1-max(0,dot(v.nor,vCameraPos)

카메라 벡터와 오브젝트의 법선벡터를 내적해서 나온 값을 판별


smoothstep(min,max,x)

x의 값을 min과 max의 사이값을 보간한다

이때의 보간형식은 Hermit 보간(spline 보간)을 사용한다.


최대값을 1로 rimWidth 값을 설정해

외곽선판별을 해서 나온 값에 대해 나온값을 RimLightColor 로 설정한다는 것이다

여기에 Diffuse 값과 + 연산을 사용하면 구현은 끝난다.



RimLightColor 값이 1이라면 + 연산시 1이 되므로 하연색

RimLightColor 값이 0이라면 + 연산시 Diffuse 값이 나오므로 일반 텍스쳐 색


외곽선에 대해 많은 부분에 Rimlight 를 사용하고 싶을 경우 smoothstep 에서 min 값을 높이 주면 되고

외곽선이 넓이를 넓게 하고 싶으면 max 값을 1보다 낮게 설정해주면 된다.




'기본 쉐이더' 카테고리의 다른 글

Half Lambert 의 원리와 공식  (0) 2010.12.09
스터디 - Fx(UV맵을 활용한 효과)  (0) 2010.12.04
스터디 - 스페큘러맵  (0) 2010.11.28
스터디 - 기본 노멀맵  (0) 2010.11.16
빛에 관한 공식  (0) 2010.09.16